我正在尝试编写一个可以接收它的第二个arg函数名称的函数。 为了验证函数的名称(将在eval语句中使用),我使用function_exists,例如:
if(function_exists($type)){
$toEval= $type.'(\''.$file.'\');';
}else{
但是如果发送的arg是include或require(带有'once'变体),则此代码失败(function_exists返回false)。
答案 0 :(得分:2)
我认为您应该考虑您的应用程序是否真的设计得很好。这种代码通常表明整体设计存在问题。你应该非常小心你传递给这种方法。您最终可能会遇到一些非常严重的安全问题。
if($type == 'require' || $type == 'require_once' || .. || function_exists($type)){}
或更好
$constructs = array('include', 'require', ...);
if(in_array($type, $constructs) || function_exists($type)){};
答案 1 :(得分:1)
答案 2 :(得分:0)
这些不是函数,而是语言结构:
http://mahmudahsan.wordpress.com/2008/07/02/php-take-advantage-of-language-constructs/
如果它们可以接受,您应该手动过滤它们,例如使用switch语句:
switch( strtolower($type) ){
case 'echo':
case 'print':
case 'include':
...
break;
}