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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • PHP的输出缓冲区 什么是缓冲区?简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至...
    桖辶殇阅读 6,107评论 3 12
  • 1、介绍 (1)缓存介绍 1)浏览器缓存: 是保存在浏览器端的缓存,这个缓存我们没有办法控制。在360等卫士的清理...
    宠辱不惊丶岁月静好阅读 3,401评论 0 1
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 5,931评论 0 3
  • buffer是一个内存地址空间,linux系统默认大小一般为4096(4kb)。主要用于存储速度不同步的设备或优先...
    金星show阅读 11,173评论 0 1
  • 一、php过滤器 PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。测试、验证和过滤用户输入或自定...
    空谷悠阅读 3,073评论 0 5

友情链接更多精彩内容