3

我非常希望看到 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成功了。我不想要自动输出缓冲。谢谢!

4

2 回答 2

5

在 php.ini 文件中找到output_buffering并确保它设置为 0

http://us.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering

于 2011-04-26T19:04:13.723 回答
2

放在flush()后面var_dump

于 2011-04-26T19:04:36.330 回答