-1

下面显示的这段代码使用 php 标头重定向在本地工作,但不在我的 Bluehost 服务器上:

if ($_POST['submit']=='No')
{
    $url ='Location: index.php?id='.$id.'&page='.$page;
    header($url);
    exit;
}

当服务器到达这段代码时,绝对没有任何反应。没有错误,没有警告,只是一个空白页。我的表单提交重定向到的页面不应该做任何事情,除了将用户重新路由到相关页面。

我非常肯定它与在重定向之前包含 HTML 的常见问题无关(因为它在本地工作)。因此我怀疑这与我的 php.ini 文件之间的差异有关。我已经为两台服务器提取了 PHPinfo(),我的本地服务器有一个名为 mod_headers 的模块,而我的 Bluehost 服务器没有。我认为这可能是问题所在,尽管通常我的 Bluehost 使用标头重定向没有问题,但在这种情况下除外。

所以我怀疑这个问题与我的ini文件有关,但我不知道到底是什么。

让这个问题更加奇怪的是,还有其他代码块可以正常工作,例如

if(!empty($_POST['id']))
{
    $id = htmlentities(strip_tags($_POST['id']));
    $sql = "UPDATE entries SET title=?, entry=? WHERE id=? LIMIT 1";
    $stmt = $db->prepare($sql);
    $stmt->execute(array($title,$entry,$id));
    $stmt->closeCursor();
    $url= 'Location: ../index.php?id='.$id.'&page='.$page;
    header($url);
    exit;
}   

效果很好。

4

4 回答 4

2

我遇到了同样的问题,它在 XAMPP 上运行良好,但在 bluehost 或 1&1 上运行良好。

PHP 文档说在调用 header 函数之前不应该有输出。 http://php.net/manual/en/function.header.php

在我的情况下,在打开 <?PHP 之前有一个空格,这使得标题功能不起作用。

这应该有助于解决问题。

但是问题仍然存在:为什么它可以在 XAMPP 上运行,而不是在 bluehost、1&1 等服务器上运行?(因为我对这两个测试都使用了 firefox - 这绝对不是浏览器问题)

于 2011-11-26T14:32:24.677 回答
1

我刚遇到这个问题。我意识到我正在使用一个在文件开头插入 BOM 的编辑器。这个 BOM 字符对大多数编辑器几乎是不可见的,但会阻止 PHP 的标头触发,因为它确实算作输出。以下是有关 BOM 字符的更多信息:

http://en.wikipedia.org/wiki/Byte_order_mark

我使用的是记事本++,并且能够通过使用以下说明禁用此 BOM:

  1. 转到设置 > 首选项 > 新建文档/默认目录
  2. 将编码更改为没有 BOM 的 UTF-8
于 2011-12-15T17:39:43.793 回答
0

HTTP 标准要求Location:指令中的 URL 是绝对URL。您不能只index.php用于该重定向。您需要使用:

header("Location: http://example.com/index.php");

一些浏览器忽略标准并允许相对 URL。

于 2011-11-21T17:08:02.990 回答
0

运行将我的Wordpress博客移动到Bluehost.
解决方案是更改Look what at my config 中的output_buffering选项php.ini
以及此选项的说明:

; 输出缓冲甚至允许您发送标题行(包括 cookie)
;在您发送正文内容后,以减慢 PHP 的输出层 a 为代价
;少量。您可以通过调用 output 在运行时启用输出缓冲
;缓冲功能。您还可以通过以下方式为所有文件启用输出缓冲
;将此指令设置为 On。如果你想限制缓冲区的大小
;到一定大小 - 您可以使用最大字节数而不是“开”,如
;该指令的值(例如,output_buffering=4096)。 输出缓冲 = 4096

于 2013-03-17T07:02:06.040 回答