繁体   English   中英

PHP输出发生在Header输出之前。 我可以跟踪PHP中调用echo的位置吗?

[英]PHP output happening before Header output. Can I trace where echo is being called in PHP?

我的PHP代码中有一个奇怪的情况,我想将错误标头发送回客户端。 它已经工作了几个月没有问题。 到现在。

我已经查看了客户端Ajax调用中返回的结果。 在应使用包含错误文本的responseText返回错误标头的情况下,我改为获取status == 200,并且响应文本包含预期的错误消息-带有多个空格。

似乎正在发生的事情是在发送标头之前发生了某种输出,从而破坏了标头。

我的PHP代码不会产生HTML,并且不会在任何时候有条件地执行HTML。 唯一的输出方法是通过echo调用。

因此,我试图找出是否有一种追踪输出来源的方法,包括是否可以追踪回声调用的发生时间。

在我的测试中,一切都陷入异常发生时触发的异常中:

<?php
...
catch (ServiceException $err) {
    ob_end_clean();
    ob_start();
    log_error("Before header, ob contains: '" . ob_get_contents() . "'");
    header("HTTP/1.0 400 Bad Request");
    echo 'Generic error message';
    log_error("After Error, ob contains: '" . ob_get_contents() . "'");
    ob_end_flush();
}

上面的输出向我显示,在调用标头之前,输出缓冲区为空,然后在刷新缓冲区之前,该缓冲区包含错误消息,并且前面没有空格。 我在客户端获得的响应状态为200,响应" Generic error message"" Generic error message"

为了完整起见,这是我的实用程序log_error函数:

function log_error($str) {
    error_log($str . "\n", 0);
}

有什么想法吗? 我也乐意接受任何其他建议来解决我的问题。

谢谢!

感谢所有在评论中提供帮助的人。 事实证明,DarkBee可能与发生的事情最接近。 我发布此信息是因为它对于遇到相同问题的其他人可能是有用的信息。

发生的事情是我在出现问题的文件顶部包含了另一个.php文件。 该文件没有什么特别的,它只包含一些globall define s。

当我使用cPanel的编辑器编辑包含的文件时,问题就开始了。 它以某种方式以生成奇怪输出的方式保存了文件。

当我在本地对该文件进行修改,然后通过FTP上传时,问题就消失了。

为了完成测试,我再次在cPanel中在线编辑了文件,问题又回来了!

因此,请注意cPanel文件编辑。 注意,我只是使用cPanel的“编辑”功能,而不是代码编辑器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM