我知道通过使用eval($code_to_check);
我们可以检查这个值是否等于FALSE
,如果是的话,我们可以停止执行脚本。然而,我面临的问题是我无法定义一个函数,因为它被调用两次......它通过eval()检查来处理,以确保没有语法错误并且再次处理该函数,但显示一个错误,指出它不能REDECLARE这个函数,因为它已经在eval'd函数中声明了。我怎样才能使它不会在EVAL'd函数中声明,或者我们可以在我们实际调用它之前声明所有在eval()函数中声明的东西...PHP - 检查PHP代码的语法错误而不运行代码
反正,这是我目前的工作......可以使用一些帮助,因为当$ content(这是php代码)中有一个函数时,我得到了“无法重定向函数”。
// PHP Syntax errors?
if ([email protected]('return true;' . $content))
{
// Error found in PHP somewhere. Call error function and return out of here!
call_user_func_array($code_error['function'], $code_error['params']);
return;
}
else
{
ob_start();
eval($content);
$code = ob_get_contents();
ob_end_clean();
}
任何人都可以帮我吗?谢谢你们,你们在这里非常有帮助!您所应得的金牌,但我相信现在奥运会已经结束,这是不太运动尚未...
好吧,我在这里尝试我自己的答案,而这是否会仍然不知道捕获错误并允许同时创建函数而不用两次调用这些函数。这是一个正确的方法吗?任何人都可以在此代码中看到任何可能的问题如果没有检测到语法错误,我在回应$ eval_code ...这样做很好吗?
$eval_code = @eval($content);
// PHP Syntax errors?
if ($eval_code === FALSE)
{
call_user_func_array($code_error['function'], $code_error['params']);
return;
}
else
{
ob_start();
echo $eval_code;
$code = ob_get_contents();
ob_end_clean();
}
您可以在“lint”模式下运行命令行'php'解释器,以便在将片段存储在临时文件中后检查语法。例如'exec(“php -l checkfile.php.txt”);'可以返回'没有检测到语法错误...' – mario 2012-08-14 01:32:46
不,我通过PHP输入代码到文本区域,并希望它影响页面在我的网站上。有时,我创建了一个函数:'function doSomething($ blah)',但是这样做会执行两次......真的只需要在这里运行eval ...也许如果我为eval()设置了一个php变量,功能??? – 2012-08-14 01:33:32
'eval'不适用于代码检查。它马上运行。那么你可以跳过验证步骤。无论如何,安全方面它是多余的。尽管如此,如果你想在执行用户提供的代码之前声明代码的正确性,还是有用户级的PHP解析器。 (后者是有问题的部分。) – mario 2012-08-14 01:40:17