Php 发出第一个字符的代码的补漏白行

Php 发出第一个字符的代码的补漏白行,php,ob-start,Php,Ob Start,突然,应用程序不再能够输出ZIP文件。检查发现了原因:ZIP的第一个字符是空白的,这违反了ZIP格式规范 为了追踪这个问题,我启用了CStatementTracer,它将执行的每一行代码打印到一个日志文件中。没有帮助。[备注:declare(ticks=1);似乎不会捕获每一行执行的代码] 然后我设置了一个输出处理程序,如下所示: function callback( $buffer ) { $deb = print_r( debug_backtrace(), TRUE );

突然,应用程序不再能够输出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 );
不幸的是,根本没有调用这个处理程序

Q:是否存在一个通用/规范解决方案,用于标识发出第一个字符的PHP代码的文件/行。

一个解决方案,无论执行什么代码,都可以找到loc

备注:

  • 使用
    ?>
与此同时,我发现了一个可疑的类似代码:一个开始前的空白 尽管如此,我还是希望得到有关编程解决方案的提示。最好是用纯PHP编写的解决方案。

可能是找到输出来源的最可靠工具。假设您在Linux上。其他平台必须有类似的工具

虽然它不会给出php代码行,但您可以分析在发送攻击性字符之前和之后进行的系统调用的上下文。通常,确定问题的根源就足够了


这是一个相当耗时的过程。应作为最后手段。

如果突然停止工作,首先要检查的是发生了什么变化。首先-检查问题是否在新环境中重现,以确认它是应用程序,而不是第三方,然后检查VCS并找到它停止工作的提交。一个空白字符可能来自php周围的代码-在发送的
标题之前或之后的空格(&$file,&$line)?如果没有像html这样的输出,请删除文件末尾的任何结尾
?>
。一点空白就可以输出,把一切都搞砸了。谢谢。但它可能输出了太多的信息。不幸的是,我现在在windows上。不过这是一个很好的暗示!