2015-02-11 56 views
2

对于我所知道的是它不能发送HTTP标头后,你的输出已发送,只要解决的办法是使用输出缓冲头被发送,虽然产量已发送

但我的PHP脚本能够甚至在发送输出之后发送头文件。 这里是我的代码

Text output already sent 
<?php 
header('Location: test2.php'); 
die(); 
?> 

为什么这个代码不给错误“HTTP标头已经发送” 有另一种方式把输出缓冲吗?

编辑:

我使用WAMP

没有文件运行它在我的本地包括在上面的代码

我只注意到outbut_buffering中的phpinfo)指令(被设置为1 但是,当我检查它在php.ini文件它被设置为关

+2

您是否启用了输出错误?是否执行了重定向? (我怀疑它) – 2015-02-11 08:32:21

+1

错误未被显示的事实并不意味着没有任何错误;) – 2015-02-11 08:33:26

+0

是display_errors设置为On并且正在执行重定向 – 2015-02-11 09:30:35

回答

2

你是对的,这不应该工作。

首先,你确定头文件是否写入,或者你是否想知道为什么没有显示错误信息?也许错误报告被关闭了?在这种情况下,尽量加大错误报告级别:

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

从您的代码,当你完成调试删除此。应该将错误记录到日志文件中,永远不会显示在生产环境中!

此外,检查头是否真的发送。你可以做到这一点与wget例如:

wget -S http://example.com/ 

curl

curl -v http://example.com/ 

您可以也看到在铬合金开发者控制台的HTTP标头。在其他浏览器中可能也是如此。

如果标题确实发送了,那么可能有一些关于输出缓冲的魔法。你是在本地运行还是在远程主机上运行?如果这不是你的主机,它可能是提供商已经设置好了。 PHP具有自动添加和附加自定义代码的功能。检查php.ini设置auto_prepend_fileauto_append_file。可能有一些ob_start()等隐藏。您可以拨打phpinfo()ini_get()查看所有PHP设置。

+0

auto_prepend_file和auto_append_file在phpinfo中都没有设置值...请检查问题的编辑 – 2015-02-11 09:27:55

1

您看不到错误,因为启用了输出缓冲。试试这个代码:

<?php 
ob_end_clean(); 
?> 
Text output already sent 
<?php 
header('Location: test2.php'); 
die(); 
?> 

它返回错误:

Text output already sent Warning: Cannot modify header information - headers already sent by

+0

不起作用...标题仍然发送。 – 2015-02-11 09:28:33

+0

@AbhishekAgarwal尝试添加'error_reporting(E_ALL); ini_set(“display_errors”,1);'此文件的开头 – stepozer 2015-02-11 09:31:44

+0

已按照Daniel Schroeder的建议完成 – 2015-02-11 09:35:31

1

您可以检查和其中头已与headers_sent发送功能:

if (!headers_sent($filename, $linenum)) { 
    header('Location: test2.php'); 
    exit; 
} else { 
    echo 'Headers sent from '. $filename; 
} 

然后检查$filename

相关问题