下面使用php header redirect显示的代码块在本地工作,但不在我的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;
}
效果很好。
答案 0 :(得分:2)
我遇到了同样的问题,它在XAMPP上工作正常但在bluehost或1& 1上没有。
PHP文档说在调用头函数之前应该没有输出。 http://php.net/manual/en/function.header.php
在我的情况下,在打开<?PHP之前有一个空格,这使得标题功能不起作用。
这应该有助于解决问题。
问题仍然存在:为什么它可以在XAMPP上运行而不在bluehost,1& 1等服务器上运行? (因为我在两个测试中使用firefox - 它绝对不是浏览器问题)
答案 1 :(得分:1)
我刚遇到这个问题。我意识到我正在使用一个在文件开头插入BOM的编辑器。对于大多数编辑者来说,这个BOM字符实际上是不可见的,但会阻止PHP的标题被触发,因为它确实被视为输出。以下是有关BOM字符的更多信息:
http://en.wikipedia.org/wiki/Byte_order_mark
我使用的是notepad ++,并且能够通过以下方向禁用此BOM:
答案 2 :(得分:0)
HTTP standard要求Location:
指令中的网址为绝对网址。您不能只使用index.php
进行重定向。你需要使用:
header("Location: http://example.com/index.php");
某些浏览器会忽略该标准并允许相对网址。
答案 3 :(得分:0)
在将Wordpress
博客移至Bluehost
时,我遇到了同样的问题。
解决方案是更改php.ini
中的 output_buffering 选项
查看我的配置以及该选项的说明:
输出缓冲允许您甚至发送标题行(包括cookie)
;在发送正文内容之后,以降低PHP的输出层a为代价
;位。您可以通过调用输出在运行时启用输出缓冲
;缓冲功能。您还可以为所有文件启用输出缓冲
;将此指令设置为On。如果您希望限制缓冲区的大小
;到一定的大小 - 您可以使用最大字节数而不是' On',as
;该指令的值(例如,output_buffering = 4096)。 output_buffering = 4096