没有以前的输出,但标头重定向不会';我不能用PHP工作

没有以前的输出,但标头重定向不会';我不能用PHP工作,php,header,Php,Header,我已检查是否没有以前的输出: header('Location: ' . $url); 产出: ob_start(); ... var_dump(ob_get_contents()); ob_flush(); header('Location: ' . $url); 那为什么重定向失败了呢 虽然我在错误日志中看到了很多警告和通知,但只要它不向浏览器输出任何内容,就不会影响header(),对吗 更新 一些日志(但不应相关): ob_flush()发送到输出缓冲区。(打印OB中的内容) 这就

我已检查是否没有以前的输出:

header('Location: ' . $url);
产出:

ob_start();

...
var_dump(ob_get_contents());
ob_flush();
header('Location: ' . $url);
那为什么重定向失败了呢

虽然我在
错误日志
中看到了很多警告和通知,但只要它不向浏览器输出任何内容,就不会影响
header()
,对吗

更新

一些日志(但不应相关):

ob_flush()发送到输出缓冲区。(打印OB中的内容) 这就是产出。 您可能需要使用ob_clean()

这也是一个很好的实践 在头('location…')调用后退出()或死亡()

还请注意,文件末尾的空白将完成此操作

在大多数情况下,我不再使用?>在PHP文件的末尾,只需将其保持打开状态

?>无论如何都是可选的

这不会影响header(),只要 因为它不会向 浏览器,对吗


错。

前几天我也面临类似的问题。我在头函数之前调用的php包含文件末尾有额外的空白。我删除了那个空白,它开始为我工作

视情况而定,也许您可以显示警告?$url为空。注释长度必须至少为15个字符。您确定$url不是空的吗?我确定,事实上,相同的代码可以在生产环境中工作。您只需亲自检查即可。不告诉所有人它在另一台服务器上工作。我将投票结束这个问题,因为它不是一个真实的问题。他在这里只是用ob来测试输出;使用ob捕获输出和ob_clean(),重定向应该可以工作,否则可能会有空格,我在
标题之前也尝试了
ob_clean()
,但没有工作。并且url是有效的。尝试执行标题('location:);退出();相反,看看会发生什么。如果它重定向,则头重定向中的某些内容是错误的,否则您确实会在某个地方进行输出。可能是在包含的或必需的文件中。你能帮我们把整个php文件放到pastie.org(或类似网站)上吗?因为你必须阅读错误信息,而不是整天坐着猜测!如果是报头的问题,应该会有一条错误消息。作为卡丹,什么是错的。使用输出缓冲是错误的。我不是在猜测,我经常检查错误日志,但这次真的没有帮助@用户如果没有标题错误,则没有任何理由使用ob_start。它必须是基于某种原因(错误消息)的合理操作。因此,如果您在没有reasom的情况下检查缓冲,我称之为猜测。因为你猜有一些标题错误,而不知道它。现在您必须检查$url变量和代码逻辑-如果这个头被执行过,我看到它是通过逐步调试执行的,但不知怎么的,响应中没有位置头。@用户,这看起来很奇怪。您必须仔细检查“标头已发送”错误。您可能需要将错误报告降低到警告级别
string '' (length=0)
[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