偶尔我会遇到一个问题,即大型系统某处的PHP文件在某些情况下会产生虚假输出。
这可能是因为某人在<?php
开始标记之前意外输入了空格或其他字符,或者在最终结束后留下了不需要的调试echo
或包含了一些空格{{1} } tag。
有没有办法生成一个日志,显示生成一些输出的所有PHP文件,以及它们生成的输出?
如果没有,是否有其他方法可以建议追踪我所描述的问题?
编辑:澄清一下 - 我正在运行的系统是Moodle(不是直接相关的,但是当它被问到......)而且,在这种情况下,输出是在DB升级期间(但我有类似的其他时间输出随机字符的问题)。有大量不同的PHP脚本被加载到内存中以生成页面,因此手动发现生成不需要的输出的脚本并不是一个非常诱人的前景......
答案 0 :(得分:1)
如果您的“唯一”问题是php标签之外的文本token_get_all()可能对您有所帮助。 php标签外的所有内容(?)都报告为T_INLINE_HTML(312),因此很容易过滤。
E.g。
<?php
for($t=0;$t<10; $t++) { ?>
<?php
}
?>
<?php
$at = token_get_all( file_get_contents(__FILE__) );
foreach($at as $t) {
if ( is_array($t) && T_INLINE_HTML===$t[0]) {
echo 'inline html @ line ', $t[2], "\r\n";
}
}
打印(一些空行和)
inline html @ line 3
inline html @ line 7
将其与get_included_files()或RecursiveDirectoryIterator等内容相结合,您可以使用一些临时工具来完成任务。
答案 1 :(得分:0)
有几种方法可以做到,但除非你编写了代码,否则这是一项耗时的工作。确保打开错误报告,这可能也有帮助。
1)安装 Apachetop
此工具会扫描您的网络服务器日志文件,显示正在调用的文件,还有一些其他有趣的功能
2)使用lsof
watch -n1 "lsof | grep '\.php'"
上面的代码行只列出已打开的.php文件。如果文件快速打开和关闭,则可能无法列出
3)使用xdebug和xdebug profiler。
在运行代码时;同时检查xdebug探查器并继续刷新它。探查器的一个功能是它绘制了被调用文件的可视化映射。然后,您必须手动检查这些文件是否存在语法错误或错误/错误逻辑。如果您知道或者您已经制作了系统,那么您可以轻松地完成它。
我希望这会有所帮助