header('Location: ' . $url);
我检查过没有以前的输出:
ob_start();
...
var_dump(ob_get_contents());
ob_flush();
header('Location: ' . $url);
输出:
string '' (length=0)
那为什么重定向会失败?
虽然我在error_log
中看到了很多警告和通知,但只要它不向浏览器输出任何内容就不会影响header()
,对吗?
更新
一些日志(虽然不应该相关):
[Wed May 19 00:26:10 2010] [error] [client 127.0.0.1] PHP Deprecated: Function eregi() is deprecated in D:\\Works\\general
[Wed May 19 00:26:10 2010] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://localhost/cookie_usage.php
[Wed May 19 00:26:10 2010] [error] [client 127.0.0.1] PHP 1. {main}() D:\\Works\\login.php:0, referer: http://localhost/cookie_usage.php
[Wed May 19 00:26:10 2010] [error] [client 127.0.0.1] PHP 2. tep_redirect() D:\\Works\\login.php:33, referer: http://localhost/cookie_usage.php
答案 0 :(得分:3)
ob_flush()发送到输出缓冲区。 (打印OB中的内容) 这被视为输出。 你可能想使用ob_clean()
使用它也是一种好习惯 在标题('location ...')调用之后退出()或die()。
另请注意,文件末尾的空格会执行此操作。
在大多数情况下,我从不使用?>在PHP文件的末尾,只需将其打开
&GT?;无论如何都是可选的。
答案 1 :(得分:0)
我几天前就遇到过类似的问题了。在php包含文件的末尾有额外的空格,我在标题函数之前调用了它。我删除了那个空白区域,它开始为我工作。
答案 2 :(得分:-3)
不会影响header() 因为它没有输出任何东西 浏览器,是吗?
错误。