是否可以从PHP检查PHP文件语法?

时间:2009-07-30 17:38:53

标签: php parsing syntax-checking

我使用自动加载动态加载PHP类文件。 这些文件可能由于某种原因而丢失或损坏。

Autoload将成功报告丢失的文件,以便应用程序逻辑可以处理。但是,如果这些文件已损坏,则整个处理将暂停,并为用户显示空白屏幕,并在错误日志中显示“PHP Parse error:syntax error”。

是否可以从PHP代码检查PHP文件的语法?

我看过这里:http://us.php.net/manual/en/function.php-check-syntax.php - 它已被弃用。

exec("php -l $file");

似乎是一种错误的方式(http://bugs.php.net/bug.php?id=46339

思想?

4 个答案:

答案 0 :(得分:4)

你真的不应该在执行时尝试检查不正确的PHP文件:它会终止你的应用程序的响应时间!

“更好的方法”是在修改PHP脚本时从命令行使用php -l;或者如果您正在使用它,请将其包含在构建过​​程中;或者如果你正在使用SVN并且可以定义SVN hooks,则将其作为SVN预提交钩子插入。

在我看来,几乎任何给定的解决方案都比在执行时检查自己更好!


考虑到你想要避免的错误可能不会经常发生,最好是......让它们发生。
ONly的事情是:激活日志,并监控它们,能够在出现问题时快速检测到: - )


当然,这并不妨碍您处理丢失文件的情况;但那是另一回事......

答案 1 :(得分:3)

另一种方法是在你的根目录中创建一个php文件     checkSyntax.php

<?php
for($i=1; $i < count($argv); $i++){
        $temp = "php -l " . $argv[$i];
        $output = exec($temp);
        echo "\n$output";
}
?>

现在,打开您的bashrc文件以创建运行此文件的快捷方式。 添加以下行以运行checkSyntax.php

alias checkSyntaxErrors='php /root/checkSyntax.php'

现在转到你的源目录做svn st。

它显示了文件列表,现在可以轻松运行命令。

checkSyntaxErrors file1.php file2.php .......

这将检查作为参数传递的所有文件。

享受:)

答案 2 :(得分:0)

简而言之:我看不到这样做的方法,但有一个想法可能就足够了。

有日志监控程序或可以通过标准工具过滤日志,以查找具有解析错误的文件。如果出现文件,则将恶棍文件名放入黑名单,并在加载此列表之前检查自动加载器。

使用这种方法,您第一次服务空白屏幕(生产服务器上打开输出的错误报告),但第二次会有一个没有错误组件的页面。

在自动加载器中,您应该有一个列表或命名方案,以便始终尝试加载必需的类(应用程序可能处于不一致状态的其他方式)

答案 3 :(得分:0)

您还可以进行一些单元测试,在其中加载您正在动态执行的PHP并声明exec(“php -l $ fileName”)有效。如果你这样做了,你就可以在测试中验证它一次,用适当的变量生成它,并且对你的PHP有良好的信心。