【发布时间】:2012-08-14 01:28:23
【问题描述】:
我知道通过使用eval($code_to_check);,我们可以检查这个值是否等于FALSE,如果是,我们可以停止脚本的执行。但是,我面临的问题是我无法定义一个函数,因为它被调用了两次......它被 eval() 检查处理以确保没有语法错误,然后再次处理该函数,但显示一个错误,指出它不能 REDECLARE 这个函数,因为它已经在 eval'd 函数中声明。我怎样才能做到这一点,以便我们不在 EVAL 函数中声明事物,或者我们可以在实际调用 eval() 函数之前取消声明在 eval() 函数中声明的所有内容......
无论如何,这就是我目前正在使用的......可以使用一些帮助,因为当 $content(这是 php 代码)中有一个函数时,我得到一个“不能重新定义函数”。
// PHP Syntax errors?
if (!@eval('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解释器,以便在将 sn-p 存储在临时文件中后检查语法。例如exec("php -l checkfile.php.txt");可以返回No syntax errors detected in ... -
不,我正在通过 PHP 将代码输入文本区域,并希望它影响我网站上的页面。有时,我创建了一个函数:
function doSomething($blah),但在执行此操作时它会执行两次......真的只需要在这里运行一次 eval......也许如果我为 eval() 函数设置了一个 php 变量??? -
eval不仅仅用于代码检查。它立即运行。那么您不妨跳过该验证步骤。安全方面,无论如何它都是多余的。但是,如果您想在执行用户提供的代码之前断言代码正确性,那么有用户态 PHP 解析器。 (后者是有问题的部分。) -
你试过
token_get_all()吗?这应该警告任何语法错误。 -
@ Jack - 如何使用 token_get_all() 检查语法错误?迷茫...
标签: php eval syntax-error