【发布时间】:2017-09-22 08:11:09
【问题描述】:
突然间,应用程序不再能够输出 ZIP 文件。检查发现原因:ZIP 的第一个字符是空白,这违反了 ZIP 格式规范。
为了追踪这个问题,我启用了 CStatementTracer,它将每行执行的代码打印到日志文件中。没有帮助。 [备注:declare(ticks=1);似乎没有捕获每一行执行的代码]
然后我像这样设置一个输出处理程序:
function callback( $buffer ) {
$deb = print_r( debug_backtrace(), TRUE );
file_put_contents( './statementTrager.log', $deb );
return $buffer;
}
ob_start("callback", 1 );
不幸的是,这个处理程序根本没有被调用。
问:是否存在通用/规范的解决方案,它标识发出第一个字符的 PHP 代码的文件/行。
一种解决方案,无论其他代码执行什么,它都能找到 loc。
备注:
- 使用
?>甚至没有关闭一个 PHP 文件
同时我发现了类似代码的可疑之处:开始前的空白
不过,我想获得有关程序化解决方案的提示。最好是用纯 PHP 编写的解决方案。
【问题讨论】:
-
如果突然停止工作,首先要检查的是发生了什么变化。首先 - 检查问题是否可以在新环境中重现以确认它是应用程序,而不是第 3 方,然后检查 VCS 并找到它停止工作的提交。一个空白字符可能来自 php 周围的代码 - 来自 any 包含文件的
<?php标记之前或之后的空格。 -
headers_sent(&$file, &$line) ?
-
如果没有像 html 这样的输出,请删除文件末尾的任何关闭
?>。一个小空格可能会输出,把所有东西都搞砸了。