PHP/Apache - 如何在重定向头之前查看脚本警告?

3
我经常使用头文件重定向,但由于此原因,我错过了一些由于重定向而未显示的PHP警告。是否有一些PHP / Apache配置选项,如果发出任何警告,则停止标题重定向?
实际上,我希望任何警告在我的开发机器上停止脚本执行(就像错误一样),但在其他服务器上不可见 - 这意味着需要进行某些配置设置而不是更改脚本。这可能吗? 我正在使用Apache 2.2和PHP 5.2。
所有警告在我的开发服务器上都正常显示,但当它们被头部重定向所跟随时,我无法看到它们。例如:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
unset($undef);
echo $undef; // generates warning, should stop redirect.
//exit; 
//when previous line is uncommented, I see the warning
header("Location: http://www.google.com"); // still happens, but shouldn't
exit;
?>

在这样的环境中,我的建议是要大量依赖于错误日志。 - Chris Henry
2个回答

1

在你的开发服务器上放置:

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
ob_start();
...

if(ob_get_length() > 0){
    ob_flush();
    exit();
}
header(...);

在进行头部重定向之前(如所示),请始终清空缓冲区。如果有任何内容在缓冲区中,它将被显示出来,这将导致您的头部重定向失败,因为如果已经向浏览器呈现了某些内容,则无法执行头部重定向。如果您在生产服务器上将 display_errors 设置为 Off,则这些消息将不会显示。


在脚本的顶部,我放置了这个代码并生成警告后重定向仍然发生。在header()调用之前,我echo了一些$undefinedvariable,并生成一个警告,但header()仍然会重定向。 - A-OK
在你的问题中发布你遇到问题的代码。如果你认为正在生成一个警告,请在你的header()之前执行exit()来确认你的理论。 - afuzzyllama
如果我在header()之前放置exit;,则会出现警告。如果没有exit;,则重定向会发生,就好像没有显示警告一样。这就是我通常在重定向之前检查警告的方式,通过在header()调用之前加上exit;,但这太麻烦了,每次都要更改和恢复。 - A-OK
请将您所看到的内容发布到您的问题中。我无法调试我看不到的东西。 - afuzzyllama
这真是奇怪的行为。我以前遇到过头部重定向错误的问题...不明白为什么这个特定的例子不起作用,但有时候就是这样! - afuzzyllama
显示剩余2条评论

0
像这样做:
//header("location: such-and-such");

哈哈,但是真的;它并不比那更简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接