我很想知道为什么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
我希望获得所有键和值列表。
感谢您的支持
答案 0 :(得分:3)
问题是你的循环中有return
。
在foreach
循环中,您有if
/ else
个阻止。无论if
是否满足,您return
的值为true
的{{1}},if
的{{1}}。
此false
会导致循环执行死亡。它还会停止您所在的任何功能(或方法),或者如果您不在函数中,则停止当前脚本。 From the docs:
如果在函数内调用,
else
语句会立即结束当前函数的执行,并将其参数作为函数调用的值返回。return
也会结束eval()
语句或脚本文件的执行。
如果从全局范围调用,则结束当前脚本文件的执行。如果当前脚本文件为
include
d或require
d,则控制权将被传回到调用文件。此外,如果当前脚本文件为include
d,则return
的值将作为include
调用的值返回。如果从主脚本文件中调用return
,则脚本执行结束。如果当前脚本文件由return
中的auto_prepend_file
或auto_append_file
配置选项命名,则该脚本文件的执行将结束。
基于your comment(以及您正在使用return
的事实),您的循环位于方法中。因此,php.ini
会立即停止循环,停止方法,并根据具体情况返回$this
或return
。它永远不会到达true
中的第二项。