可以从PHP检查PHP文件语法吗?

可以从PHP检查PHP文件语法吗?,php,parsing,syntax-checking,Php,Parsing,Syntax Checking,我使用自动加载动态加载PHP类文件。 这些文件可能由于某种原因丢失或损坏 Autoload将成功报告丢失的文件,以便应用程序逻辑能够处理该问题。但是,如果这些文件被破坏,那么整个处理过程将停止,用户将进入空白屏幕,并在错误日志中显示“PHP解析错误:语法错误” 是否可以从PHP代码中检查PHP文件的语法 我在这里看了一下:-不推荐使用 及 似乎是个错误的方法() 想法?简言之:我看不出有什么办法可以做到这一点,但我有一个想法可能就足够了 有日志监控程序,或者可以通过标准工具过滤日志,查找有解析错

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

Autoload将成功报告丢失的文件,以便应用程序逻辑能够处理该问题。但是,如果这些文件被破坏,那么整个处理过程将停止,用户将进入空白屏幕,并在错误日志中显示“PHP解析错误:语法错误”

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

我在这里看了一下:-不推荐使用

似乎是个错误的方法()


想法?

简言之:我看不出有什么办法可以做到这一点,但我有一个想法可能就足够了

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

使用此方法,第一次您将提供一个空白屏幕(在生产服务器上打开向输出报告的assumig错误),但第二次将有一个没有故障组件的页面


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

您确实不应该在执行时检查不正确的PHP文件:这会缩短应用程序的响应时间

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

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


考虑到你想要避免的错误可能不会经常发生,最好。。。就让它们发生吧。
唯一的问题是:激活日志,并对其进行监视,以便能够在tere出现问题时快速检测:-)



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

另一种方法是在根目录中创建一个名为 checkSyntax.php

<?php
for($i=1; $i < count($argv); $i++){
        $temp = "php -l " . $argv[$i];
        $output = exec($temp);
        echo "\n$output";
}
?>
alias checkSyntaxErrors='php /root/checkSyntax.php'
现在转到您的源目录,执行svnst

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

checkSyntaxErrors file1.php file2.php .......
这将检查作为参数传递的所有文件


享受:)

您还可以进行一些单元测试,加载动态执行的PHP并断言exec(“PHP-l$fileName”)是有效的。如果你这么做了,你就可以在测试中验证它,用适当的变量生成它,并且有一个合理的置信水平,你的PHP是好的。

你真的考虑每次脚本执行时要检查每一个文件的语法吗?不完全是这样。我有一种特殊的类,可能会被破坏,不是所有的。我假设他(他的系统)在构建时无法控制这些文件。这个想法很有趣,但我认为让语法检查依赖于访问站点的用户是不好的。即使只有第一个将得到空白页。谢谢你的回答。回答“不,性能不合理”是一个有效选项。SVN预提交钩子是一个很好的主意,我认为在大多数情况下都可以解决我们的问题。欢迎:-)关于SVN预提交钩子的问题:当你是SVN服务器的管理员时,钩子真的很好用!
checkSyntaxErrors file1.php file2.php .......