【发布时间】:2014-02-04 07:54:06
【问题描述】:
在 php 手册 (http://php.net/manual/en/function.header.php) 中,我发现以下关于 http 标头的内容:
报价 请记住,header() 必须在发送任何实际输出之前调用,无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。使用 include 或 require 函数或其他文件访问函数读取代码并在调用 header() 之前输出空格或空行是一个非常常见的错误。使用单个 PHP/HTML 文件时也存在同样的问题。
<html>
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
exit;
?>
结束报价
我现在尝试了这个(研究 HTTP 协议),发现这似乎不再是问题了;我想知道发生了什么变化:php 处理解析网页的方式是否发生了变化?我尝试了几种浏览器(Chrome、IE10、IE7)和操作系统(Windows 8.1、XP),但它们似乎都没有问题了(请参阅 informaticaschool.net76.net/httpdemo3.php 以获取包含上述内容的页面代码示例,不报错。
有关在该服务器上运行的 php 版本的详细信息(我也尝试了不同的 apache 服务器),请参阅 informaticaschool.net76.net/phpinfo.php。
我承认问为什么没有发生错误有点奇怪,但正如我所指出的那样,我正在研究 http 的工作原理。现在查看 Wireshark 跟踪以找出在这种情况下到底发生了什么,我以前知道这是一个问题,我现在惊讶地发现没有出现错误(并且在 php 手册中没有找到解释)。
【问题讨论】:
-
不是浏览器问题,而是服务器问题。尝试几个浏览器是没有用的。
-
您是否忽略了错误? ini_set('display_errors',1); ini_set('display_startup_errors',1); error_reporting(-1);
-
@DamianKrawczyk 也许他做到了,但他的例子很有效。
-
@Damian 这也是我的想法。但是然后重定向应该失败,不是吗?示例页面重定向到 example.com
-
看看这个link
标签: php html http-headers