php中session_start()前面输出任何东西,却没有报错的原因

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

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

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

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


     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为单位)

你可能感兴趣的:(php中session_start()前面输出任何东西,却没有报错的原因)