gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:36:12 26 4
gpt4 key购买 nike

我知道通过使用 eval($code_to_check); 我们可以检查这个值是否等于 FALSE,如果是,我们可以停止执行脚本。但是,我面临的问题是我无法定义一个函数,因为它被调用了两次......它通过 eval() 检查进行处理以确保没有语法错误,然后再次处理该函数,但显示一个错误,指出它不能重新声明此函数,因为它已经在 eval 函数中声明。我怎样才能做到不在 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();
}

最佳答案

$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);
}

关于PHP - 在不运行代码的情况下检查 PHP 代码的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11944574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com