2015-12-30 86 views
-1

我wonderring为什么的foreach停止爆炸后之后,只返回的第一个结果:的foreach停止爆炸

$disabled_functions = ini_get('disable_functions'); 

print_r($disabled_functions); 

$disFunctionsNoSpace = str_replace(' ', '', $disabled_functions); 

// put them in an array 
$disFunctions = explode(',', $disFunctionsNoSpace); 

print_r($disFunctions); 

/* 
var_dump($disFunctions); 
OUTPUT 
array (size=33) 
0 => string 'curl_multi_exec' (length=15) 
1 => string ' parse_ini_file' (length=15) 
2 => string ' symlink' (length=8) 
3 => string ' shell_exec' (length=11) 
4 => string ' proc_close' (length=11) 
Etc 
*/ 

$this->disFunctions = $disFunctions; 

//print_r($this->disFunctions); 

// get file content of the uploaded file (renamed NOT the temporary) 
$cFile = file_get_contents($this->fileDestination, FILE_USE_INCLUDE_PATH); 

//var_dump($cFile); 

foreach($this->disFunctions as $kkeys => $vvals) 
{ 
    echo $kkeys.' is '.$vvals.'<br />'; 

    if(preg_match('#'.$vvals.'#i', $cFile)) 
    { 
     echo 'exists<br />'; 

     return true; 
     //echo count($this->aErrors).'<br />'; 
     //return false; 
    } 
    else 
    { 
     echo $vvals.'NOT FOUND<br />'; 
     return false; 
    } 
} // end foreach 

结果是:0是curl_multi_exec
curl_multi_execNOT FOUND

我希望得到所有的键和vals列表。

感谢您的支持

+1

为什么你的返回值为true并在if和else语句中分别返回false? –

+1

因为'return true'和'return false'退出函数。一旦你离开功能,你也结束循环。 – Barmar

+0

OHHH,对不起,我忘了删除它们,它是一个函数 –

回答

3

的问题是,你有你的return循环中。

在您的foreach循环中,您有一个if/else块。无论是否满足ifreturn值(trueif,falseelse)。

return杀死你的循环执行。它还会停止您所在的任何函数(或方法),或者如果您不在函数中,则会停止当前的脚本。 From the docs:

  • 如果在一个函数中调用,return语句,将立即结束此函数的执行,并返回其参数的函数调用的值。 return也会结束执行eval()语句或脚本文件。

  • 如果从全球范围内调用,则当前脚本文件的执行结束。如果当前脚本文件是includedrequired,则控制权将被传回给调用文件。此外,如果当前脚本文件为included,则给予return的值将作为include调用的值返回。如果从主脚本文件内调用return,则脚本执行结束。如果当前脚本文件是由php.ini中的auto_prepend_fileauto_append_file配置选项命名的,那么该脚本文件的执行结束。

基于your comment(和您使用$this的事实),你的循环是一种方法。 return因此立即停止循环,停止方法,并视情况返回truefalse。它永远不会到达$this->disFunctions中的第二项。