我非常希望看到 PHP 警告“无法修改标头信息”。为什么?因为它是明智的。您不应该能够在正文之后发送标头。
但是我可以!!如果我在控制器中调试了一些 var 并且之后没有exit
立即调试,脚本只会重定向到下一页:一切顺利,我看不到我的 var 转储。
我可以在 PHP 的哪里配置(?)它不缓冲输出?或者是什么导致了这种奇怪的行为!
只是要明确一点:我确实想要PHP 警告,我不希望重定向header('Location: ...')
工作。
我很确定在我以前的(本地)服务器(都是 W XP)上它确实抛出了输出/标题警告......
编辑
为了说明,用最基本的代码(我没有真正使用,但间接地它是相同的):
$form->validate($_POST);
var_dump($form->errors); // !!
if ( $form->noErrors ) {
header('Location: '.$form->redirectUrl);
exit;
}
答案
@Heandel 错误报告就是一切(包括通知和弃用等)。不过没关系:无论错误显示如何,都应该不可能发送标头。
@tandu 我正在使用我自己的框架,但这也不重要。
@ceejayoz 我的代码中没有一个 ob_start 。我不使用它。(模板 ngin 使用它,但模板不会在回发中触发。)
@Itay Moav 我不在共享主机中。我正在本地使用 Windows XP SP2 上的 PHP 5.3.0 (WAMP)。在我的网络服务器(VPS)上,这不会发生:我收到了一个不错的 PHP 警告。
更新
感谢盖伦
来自 php.ini:
; Note: Output buffering can also be controlled via Output Buffering Control
; functions.
; Possible Values:
; On = Enabled and buffer is unlimited. (Use with caution)
; Off = Disabled
; Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = On
转动它就Off
成功了。我不想要自动输出缓冲。谢谢!