PHP头文件(“位置:…”)在一台计算机上工作,而不是在另一台计算机上工作

PHP头文件(“位置:…”)在一台计算机上工作,而不是在另一台计算机上工作,php,configuration,redirect,header,apache2,Php,Configuration,Redirect,Header,Apache2,所以,当我部署一些我认为已经测试过的代码时,我得到了一个严重的惊喜。看来我的测试机和服务器之间一定有一些区别。完全相同的代码,具有头重定向功能,在我的测试机器上工作得很好,而在服务器上则完全没有。服务器上的重定向根本没有发生,结果留下了一个空白页 标题被称为脚本中间的某个地方,但是还没有输出任何东西。直到脚本的最后,它才输出任何内容。在其他一切都运行很久之后。它缓冲了一切 服务器和测试机器都运行相同的PhP版本,相同的Apache版本。配置文件中是否存在允许其中一个发生头而不允许另一个发生头的情

所以,当我部署一些我认为已经测试过的代码时,我得到了一个严重的惊喜。看来我的测试机和服务器之间一定有一些区别。完全相同的代码,具有头重定向功能,在我的测试机器上工作得很好,而在服务器上则完全没有。服务器上的重定向根本没有发生,结果留下了一个空白页

标题被称为脚本中间的某个地方,但是还没有输出任何东西。直到脚本的最后,它才输出任何内容。在其他一切都运行很久之后。它缓冲了一切

服务器和测试机器都运行相同的PhP版本,相同的Apache版本。配置文件中是否存在允许其中一个发生头而不允许另一个发生头的情况?是否还有其他事情会导致它失败

编辑:

下面是设置标题的行:

public function setRedirect($url) {
    header('Location: '.$url);
}
下面是调用该函数的代码:

$url = new URL('index');
$this->layout->setRedirect($url->toString());
其中
URL::toString()
始终生成完全限定的域名,在本例中:
http://domain/index.php?action=index


我检查了Php和Apache错误日志。Nada。

使用Fiddler或其他客户端工具检查标题。确定Location:标头是否实际被发送。另外,有些浏览器在发送标题的顺序上很挑剔。

使用Fiddler或其他客户端工具来检查标题。确定Location:标头是否实际被发送。另外,一些浏览器在发送标题的顺序上也很挑剔。

在调用
标题之前,可能有一些空白或其他形式的输出

只有当ini设置打开时(或者如果显式启动输出缓冲,但在这种情况下,重定向应该在两台计算机上都起作用),这才有效


您可以通过打开错误报告来确认这一点。

在调用
标题之前,可能有一些空白或其他形式的输出

只有当ini设置打开时(或者如果显式启动输出缓冲,但在这种情况下,重定向应该在两台计算机上都起作用),这才有效


您可以通过打开错误报告来确认这一点。

我认为您的服务器会在您的页面中添加一些脚本,以跟踪访问者,并为您提供流量统计或类似用途。理想情况下,您应该得到一个错误,但可能是您的服务器已禁用错误报告,这会给您一个空白页


我建议您运行一个语法错误的脚本,并检查您的服务器是否禁用了错误报告。

我认为您的服务器在页面中放置了一些脚本来跟踪访问者,并为您提供流量统计或类似用途。理想情况下,您应该得到一个错误,但可能是您的服务器已禁用错误报告,这会给您一个空白页


我建议你运行一个语法错误的脚本,检查你的服务器是否有错误报告被禁用。

< P>我认为最有可能的解释是一个错误导致脚本退出你的服务器,并且你的显示错误被关闭(因此是空白屏幕)。我建议您在服务器上长时间地检查Apache错误,看看PHP是否在其中添加了内容


否则,您可以使用LiveHTTPHeaders(适用于Firefox)之类的浏览器扩展来查看是否发送了位置标头,或者尝试调试脚本以查看它是否达到了标头调用的程度。

我认为最有可能的解释是,一个错误导致脚本在服务器上退出,并且显示错误被关闭(因此是空白屏幕)。我建议您在服务器上长时间地检查Apache错误,看看PHP是否在其中添加了内容


否则,您可以使用LiveHTTPHeaders(适用于Firefox)等浏览器扩展来查看是否发送了位置标头,或者尝试调试脚本以查看它是否达到了标头调用的程度。

是否重定向到绝对(完全限定)位置URL?为了完整起见:您可以包括包含
标题()调用的行吗?@Peter Bailey@Tomalak Done(yes)和Done。请参阅编辑。您是否重定向到绝对(完全限定)URL?只是为了完整性:您是否可以包括包含
标题()
调用的行?@Peter Bailey@Tomalak Done(yes)和Done。请参阅编辑。如果是这种情况,为什么它会在测试机器上工作而不是在服务器上工作?输出和脚本是相同的。此外,错误报告没有显示任何内容。@Daniel,因为服务器可能已打开输出缓冲,而测试机器已关闭。太棒了!对不起,我第一次误解了你的答案,现在我明白了。事实上,测试服务器打开了输出缓冲,而服务器关闭了输出缓冲。让我们看看这是否解决了它…很漂亮:)它像一个魅力。哇,这是个好主意,我在一百万年内都找不到。仍然有点好奇为什么错误从未出现,但正如他们在泰国所说的——mai-bpen-rai。谢谢如果是这样的话,为什么它会在测试机器上工作而不是在服务器上?输出和脚本是相同的。此外,错误报告没有显示任何内容。@Daniel,因为服务器可能已打开输出缓冲,而测试机器已关闭。太棒了!对不起,我第一次误解了你的答案,现在我明白了。事实上,测试服务器打开了输出缓冲,而服务器关闭了输出缓冲。让我们看看这是否解决了它…很漂亮:)它像一个魅力。哇,这是个好主意,我在一百万年内都找不到。仍然有点好奇为什么错误从未出现,但正如他们在泰国所说的——mai-bpen-rai。谢谢