12

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

自动加载将成功报告丢失的文件,以便应用程序逻辑可以处理。但是,如果这些文件已损坏,则整个处理过程将停止,用户出现空白屏幕并在错误日志中显示“PHP Parse 错误:语法错误”。

是否可以从 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

4 回答 4

4

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

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

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


考虑到您想要避免的错误可能不会经常发生,最好……让它们发生。
唯一的事情是:激活日志,并监控它们,当有问题时能够快速检测到:-)


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

于 2009-07-30T18:01:28.377 回答
4

另一种方法是在根目录中创建一个名为 checkSyntax.php 的 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 .......

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

请享用 :)

于 2012-04-26T07:06:54.767 回答
0

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

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

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

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

于 2009-07-30T17:57:24.250 回答
0

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

于 2014-02-10T22:35:11.280 回答