[PHP开发] 关于header setcookie session_start 3个函数的怪问题

使用 header setcookie session_star 这3个函数之前如果有输出都会发生一个警告,但我的就杯具了 代码如下:
<?php
echo 'my name is xiaoan';
setcookie('vb',123456);
echo $_COOKIE['vb'];  // 输出my name is xiaoan123456    为什么没有输出警告? 我已经在PHP.ini文件开启了display_errors = On 错误报告。
?>
<?php
echo "my name si xiaoan";
header("location: http://126.com");  // 直接跳转了页面,也没输出警告?  
?> 

<?php
echo 'my name is xiaoan';
session_start();
$_SESSION['vb'] = 789;
echo $_SESSION['vb']; // 输出my name is xiaoan789 为什么没有输出警告?
?>
 


解答:
你这问题还真顽固哈,我在我这测试了下, 问题原因找到了,我估计是你的php设置了输出缓冲。 在php.ini里搜索output_buffering,如果看到 output_buffering=4096 修改成 output_buffering= off ,就能看到报错了。 不过一般不需要改,就让它不报错吧。前面是我没有考虑到这点啊,不好意思。 你的php应该是5.3以上的版本,给自动开启了。还有就是你的输出比较少,如果输出多的话,超过4096,还是会报错的 ...



扩展:

php中flush()、ob_flush()、ob_end_flush()的区别介绍

首先,说下buffer,它是一个内存地址空间,为4096(1kb)【在php.ini配置文件中找到output_buffering配 置】,php有php output_buffering机制,php代码在执行的时候,并不是立即将内容输出,而是想将echo/print内容输出到buffer,buffer满的时候才会将数据交给系统内核交由tcp传给浏览器显示,当开启php php output_buffering机制(默认是开启的,可以通过ob_start()函数开启)后,只有当php buffer中的数据达到了设置值,才会将buffer中 的数据发送给浏览器。

但是浏览器也是有缓存的,一些版本的浏览当数据达到256字节的时候才输出内容,flush()可以将等待输出的内容立即发送到客户端,而ob_flush()只有等待到buffer满的时候才输出。



首先你找到php 的配置文件php.ini   
1.php.ini中的output_buffering配置
Off: 表示关闭PHP输出缓存
On: 打开无限大的输出缓存
4096: 打开大小为4096Byte的输出缓存

2.php.ini中的implicit_flush配置
On: 表示每次输出(如echo,print)后自动调用flush()函数后,直接输出
Off: 与On相反,每次输出后不会调用flush(),需要等到server buffering满了才会输出,但是我们可以用flush()函数代替它,不开启也没关系,反而更加灵活

3.ob_flush()函数: 取出PHP buffering中的数据,放入server buffering
4.flush()函数: 取出Server buffering的数据,放入browser buffering
5.ob_start()函数:对于这个函数我现在了解的不是很清楚,因为开启后输出就会不受ob_flush()控制,即使使用ob_flush()和flush(),数据也不能立即输出在浏览器上.现在知道的是,如果output_buffering=Off,即使使用了ob_start(),也是无法将输出数据缓存的,而如果output_buffering=On的话,即使不用ob_start(),输出数据也可以被PHP缓存,所以觉得ob_start比较废,暂时不管他


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值