前面输出任何东西

在http传输文本中,规定必须
header和content顺序必须是:header在前content在后,并且header的格式必须满足“keyword:
value\n”这种格式。
1、在header输出之前有输出内容的话,就会造成对header的错误理解,例如不是满足“keyword:
value\n”的格式还好,直接错误了,但是满足“keyword:
value\n”这个格式以后,客户端是否安装错误理解,还是按照正确理解?
2、session开启是会隐含的触发是否用header(“Set-Cookie:
sid=xxxxxx”),也就是其实还是一个隐式的header调用

在http传输文本中,规定必须
header和content顺序必须是:header在前content在后,并且header的格式必须满足“keyword:
value”这种格式。

    1.
在header输出之前有输出内容的话,就会造成对header的错误理解(尽管现在已经能容错了)

    2.
session开启是会隐性调用header(),因此也不允许之前有content内容输出

但是在下面代码中却没有报错:

“`

    <?php

        echo “hello world”;

        //$test = “hello
world”; 正常情况下不输出,变量赋值放在session_start()前面也会报错

        session_start();

“`

原来是php默认开启了ob缓冲并设置了缓冲区的大小,开启ob缓冲会把echo等输出的内容,
放到ob缓冲区。等php脚本执行完毕,
或者ob_end_flush()才会将缓冲区内容全部输出到浏览器。

解决办法修改php.ini中output buffering=Off,并重启php-fpm.即可看到错误

补充:

 php.ini中output buffering是设置缓冲区的大小的参数,output
buffering可能性值:

  1. On (可以使用缓冲区并且没有大小限制)

  2. Off (缓冲区不可用,为off时候ob_start()也没有作用)

  3. Integer = (可以使用缓冲区并且设置最大值,bytes为单位)