开发者社区> 问答> 正文

有关php header函数的问题,比如说header之前不能有实际的输出

搜到了一篇文章,开头就说了三个关于PHP header()的注意事项,

location和“:”号间不能有空格,否则会出错。
在用header前不能有任何的输出。
header后的PHP代码还会被执行。

第3点测试结果无误。

第1点,测试大概是指的 header('Location: http://segmentfault.com/'); 中 Location 和 : 不能有空格吧,但其实是可以有的。

主要是第2点,header前不能有任何的输出有疑问,我测试了下面的代码,能成功跳转啊:

<html>asdf</html>
<?php
header('Location : http://segmentfault.com/');

到底要怎样测试才能报错呢?php手册上的“Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP”到底是啥意思?

展开
收起
落地花开啦 2016-06-16 15:50:52 3044 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    header函数内的String原则上会被直接加到HTTP头里面去。所以说,如果发送

    Location : http://with.blank.com

    这种并不符合HTTP规范的HTTP头,很可能整个HTTP Response都无法解析。
    幸运的是,PHP貌似为你修复了这个HTTP头格式问题。

    关于HTTP头先发的问题,的确不应该在HTTP内容输出之后输出HTTP头。但是服务器会缓存输出,虽然你使用了echo或者print,但在那个时刻服务器还没有将这些内容作为HTTP报文输出,这个时候你仍然有机会修改HTTP头。

    如果你只是单纯想要引发一个错误的话,很简单,在header()之前输出一个绝对超过缓存大小的HTTP内容就可以了。以下是不良示范。

    <?php
      for($i = 0; $i < 1e5; $i++) echo $i;
      header("ABCABC: BCDBCD");
    2019-07-17 19:41:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载