捕获发出第一个字符的代码行
Trapping line of code that emits first character
突然之间,应用程序不再能够输出 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.
编写的解决方案
https://linux.die.net/man/1/strace 可能是找出输出来源的最可靠工具。假设您在 Linux。其他平台肯定有类似的工具。
虽然它不会给你php代码行,但你可以分析发送冒犯性字符前后系统调用的上下文。通常只要确定问题的根源就足够了。
虽然这是一个非常耗时的过程。应该作为最后的手段使用。
突然之间,应用程序不再能够输出 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.
编写的解决方案https://linux.die.net/man/1/strace 可能是找出输出来源的最可靠工具。假设您在 Linux。其他平台肯定有类似的工具。
虽然它不会给你php代码行,但你可以分析发送冒犯性字符前后系统调用的上下文。通常只要确定问题的根源就足够了。
虽然这是一个非常耗时的过程。应该作为最后的手段使用。