PHP - 检查PHP代码的语法错误,但不运行的代码(PHP - Check PHP Code f

2019-09-21 04:24发布

我知道,使用eval($code_to_check); 我们可以检查,如果这个值等于FALSE如果是这样,我们可以停止脚本的执行。 不过,我所面临的问题是,我无法定义一个函数,因为它被调用两次...它获取与处理的eval()检查,以确保没有语法错误和不是再次处理的功能,但表示说,它不能重新声明此功能,因为它已经被在eval'd函数声明的错误。 我怎样才能让这个我们不会在EVAL'd函数声明的东西,或者也许,我们可以undeclare这是在eval()函数声明,我们实际上做调用之前的一切......

不管怎么说,这里是我与迄今的工作...可以使用一些帮助,因为我得到“无法重新声明功能”时,$内容(这是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();
}

Answer 1:

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


Answer 2:

你也可以使用一个新的,但非常受欢迎的,稳定的工具PHPStan为这些类型的检查。

在这里,你可以读一个短期和简单的教程,如何使用它 。



Answer 3:

如果您检查PHP文档eval()这是描述:

EVAL - 评估一个字符串作为PHP代码

然而,PHP文件,本身说, eval是一个危险的构造:注意

该eval()函数语言结构是非常危险的,因为它允许任意PHP代码执行。 它的使用因而气馁。 如果你仔细核实,有没有其他的选择,而不是使用此结构,要特别注意不要通过任何用户没有正确验证事前它提供的数据进去。

因此,在使用时要小心eval ,非常小心。 现在回到你的问题。

我想你所需要的就是一个工具,可以帮助您与语法检查以发现违反规定的编码标准。 我用ESLint检查违反Javascript代码。 对于PHP我同时使用PHPStorm和崇高的文本,我用PHP皮棉和PHPCS。 而不是做的eval,我建议你使用这些这些工具或组合中的一个来实现你的目标。

如果您正在使用Jetbrains的PHPStorm,你可以在这里找到这些插件:

  • https://www.jetbrains.com/help/phpstorm/2016.2/using-php-code-sniffer-tool.html
  • https://plugins.jetbrains.com/plugin/7887?pr=phpStorm我个人更喜欢使用PHPStorm,它真的是最好的PHP IDE中在那里。

如果你喜欢用崇高,这里为大家介绍的插件:

  • https://github.com/SublimeLinter/SublimeLinter-php
  • https://github.com/SublimeLinter/SublimeLinter-phplint
  • https://github.com/benmatselby/sublime-phpcs

我的观点是,这些工具很好地结合起来,应该足以保证你的代码的理智。

-谢谢



文章来源: PHP - Check PHP Code for Syntax Errors without running the code