PHP-在不运行代码的情况下检查PHP代码的语法错误

Sol*_*son 5 php eval syntax-error

我知道通过使用eval($code_to_check);我们可以检查此值是否相等FALSE,如果相等,则可以停止执行脚本。但是,我面临的问题是我无法定义一个函数,因为它被调用了两次……它通过eval()检查进行处理以确保没有语法错误,然后再次处理该函数,但显示一个错误,指出它无法拒绝该函数,因为它已经在eval'd函数中声明了。我该如何做,以便我们不在EVAL'd函数中声明任何东西,或者也许我们可以在实际调用它之前取消声明eval()函数中声明的所有内容...

无论如何,到目前为止,这是我正在使用的东西……可以使用一些帮助,因为当$ content(它是php代码)中包含一个函数时,我得到了“ CAN REDECLARE FUNCTION”。

// 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();
}
Run Code Online (Sandbox Code Playgroud)

有人可以在这里帮我吗?谢谢大家,你们在这里非常有帮助!你们都应该获得金牌,但是我相信奥运会已经结束,这还不是一项运动。


好的,我在这里尝试自己的答案,想知道这是否仍会捕获错误并允许同时创建函数而无需两次调用这些函数。这是这样做的正确方法吗?谁能在此代码中看到任何可能的问题?如果没有检测到语法错误,我会在$ 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();
}
Run Code Online (Sandbox Code Playgroud)

tvl*_*ooy 4

$checkResult = exec('echo \'<?php ' . escapeshellarg($code_to_check) . '\' | php -l >/dev/null 2>&1; echo $?');
if ($checkResult != 0) {
    throw new \RuntimeException("Invalid php");
} else {
   $result = eval($code_to_check);
}
Run Code Online (Sandbox Code Playgroud)