php打消缓冲区的方法方法1:ob_end_cleanob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲语法:ob_end_clean ( void ) : bool此函数丢弃最顶层输出缓冲区的内容并关闭这个缓冲区。如果想要进一步处理缓冲区的内容,必须在ob_end_clean()之前调用ob_get_contents(),由于当调用ob_end_clean()时缓冲区内容将被丢弃。返回值成功时返回 TRUE, 或者在失落败时返回 FALSE。 缺点的缘故原由首先是,在调用时没有一个起浸染的缓冲区,或者是由于某些缘故原由缓冲区不能被删除(可能对分外缓冲区而言)。方法2:利用ob_clean()ob_clean — 清空(擦掉)输出缓冲区解释ob_clean ( void ) : void此函数用来丢弃输出缓冲区中的内容。此函数不会像 ob_end_clean() 函数那样销毁输出缓冲区。输出缓冲必须已被 ob_start() 以 PHP_OUTPUT_HANDLER_CLEANABLE 标记启动。否则 ob_clean() 不会有效果。返回值没有返回值。扩展知识什么是缓冲区(buffer)?大略而言,缓冲区的浸染便是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网上找下资料.实在缓冲区最实质的浸染便是,折衷高速CPU和相对缓慢的IO设备(磁盘等)的运作.PHP在实行的时候,在什么地方有用到缓冲区?想要理解PHP的缓冲区,就要知道实行PHP的时候,缓冲区被设置到了什么地方.当实行PHP的时候,如果碰到了echo print_r之类的会输出数据的代码,PHP就会将要输出的数据放到PHP自身的缓冲区,等待输出.当PHP自身的缓冲区接到指令,指示要输出缓冲区的内容时,将会把缓冲区内的数据输出到apache上, apache接管到PHP输出的数据,然后再把该数据存在到apache自身的缓冲区内,等到输出当apache接管到指令,只是要输出缓冲区的内容时, 将会把缓冲区的内容输出,返回到浏览器.步骤:实行php---->(碰到echo,print_r之类输出)将输出的数据放到php自身的缓冲区,等待输出---->(吸收输出缓冲区内容)数据输出到apache上,存入apache自身的缓冲区---->(吸收输出指定)缓冲区内容输出,返回到浏览器echo、print => php output_buffering => webServer buffer => browser buff => browser display即:脚本输出 => php的缓冲区设置 => 系统的缓冲区设置(apache、nginx) => 浏览器的缓冲区设置 => 显示给用户由此可见,PHP要输出数据的时候,将会经由两个缓冲区(先是自身的,然后是apache的),再返回到浏览器.缓冲区在PHP中起到什么浸染?1、最常见的便是在利用header函数之前,就已经输出了某些数据,这样会导致某些缺点,例如 Cannot modify header information – headers already sent by;echo "this is test";header("LOCATION http://www.baidu.com");涌现这个缺点的缘故原由是, 在header之前已经输出了某些数据,而输出这些数据的同时, apache将会同时发送一个相应状态到浏览器上(既然有输出,即这个要求是有效的),而其后你又再次利用header函数发送http头,则会返回这个缺点,缺点的意思是:HTTP头已经发送出去了,你不能对他再做修正.为什么利用缓冲区可以避免这个缺点呢?由于header函数是不受缓冲区影响的,当一碰到header函数的时候,PHP立时实行apache发送这一个http头都浏览器.而输出的数据PHP打开输出缓冲区后, 这些数据将会存放在缓冲区,等待输出.这样就可以避免了之前所发生的缺点.2、通过PHP写文件下载程序的时候.((实例篇)PHP实现HTTP断点续传的方法的事理)为了让文件下载更安全,同时提高更多的可控性,很多朋友都喜好用PHP写文件下载页面.其事理很大略,便是通过fwrite把文件内容读出并显示,然后通过header来发送HTTP头,让浏览器知道这是一个附件,这样就可以达到供应下载的效果.如果用上面的办法供应下载页面,会碰到一个效率问题,如果一个文件很大,假设为100M,那么在不开启缓冲区输出的情形下,必须要把100M数据全部读出,然后一次返回到页面上,如果这样做,用户将会在所有数据读完之后才会得到相应,降落了用户体验感.如果开启了输出缓冲区,当PHP程序读完文件的某一段,然后立时输出到apache,然后让apache立时返回到浏览器,这样就可以减少用户等待韶光.那后面的数据怎么办呢?我们可以写一个while循环,一贯一段一段地读取文件每读一段,就立时输出,直到把文件全部输出为止,这样浏览器就可以持续地接管到数据,而不必等到所有文件读取完毕. 其余,该做法还办理了其余一个很严重的问题.例如一个文件是100M,如果不开启缓冲区的情形下,则须要把100M文件全部读入内存,然后再输出.但是,如果PHP程序做了内存限定呢?为了担保做事器的稳定,管理员常日会把PHP的实行内存设一个限定(通过php.ini总的memory_limit, 其默认值是8M), 也便是每个PHP程序利用的内存不能利用超过这个值的内存. 假设该值为8M,而要读入的文件是100M,根本就没有足够的内存来读入该文件.这个时候,我们就须要用到上面的办法来办理这个问题,每次只读某一段,这样就可以避免了内存的限定3、静态文件缓存现在很多公司有这么一个需求, 便是某一个页面在第一次访问的时候,会实行PHP,然后把显示的内容返回到浏览器,同时须要把这次显示的内容保存到做事器上,这样下次访问的时候,就直接把保存在做事器上的文件直接显示,而不须要通过PHP来做操作这便是所谓的”静态页面缓存”.那怎么样才能做到把内容返回到浏览器的同时把数据保存到做事器上呢?这就要用到输出缓冲区了.ob_start();echo 'aaa';$string = ob_get_contents();file_put_contents('a.html', $string);ob_flush();flush();与输出缓冲区有关的配置在PHP.INI中,有两个跟缓冲区紧密干系的配置项1.output_buffering该配置直接影响的是php本身的缓冲区,有3种配置参数.on/off/xK(x为某个整型数值);on - 开启缓冲区off - 关闭缓冲区256k - 开启缓冲区,而且当缓冲区的内容超过256k的时候,自动刷新缓冲区(把数据发送到apache);2.implicit_flush该配置直接影响apache的缓冲区,有2种配置参数. on/offon - 自动刷新apache缓冲区,也便是,当php发送数据到apache的缓冲区的时候,不须要等待其他指令,直接就把输出返回到浏览器off - 不自动刷新apache缓冲区,接管到数据后,等待刷新指令与缓冲区有关的函数1.ob_implicit_flush浸染和implicit_flush一样,是否自动刷新apache的缓冲区2.flush浸染是发送指令到apache,让apache刷新自身的输出缓冲区.3.ob_start打开输出缓冲区,无论php.ini的文件如何配置,如果利用该函数,纵然output_buffering设置成off,也会打开输出缓冲区ob_start函数还接管一个参数,该参数是一个函数的回调,意思是,在输入缓冲区内容之前,须要利用调用通报进来的参数把缓冲区的内容处理一次,再放入缓冲区内4.ob_flush指示php本身刷新自身的缓冲区,把数据发送到apache5.ob_clean打消php缓冲区里面的内容6.ob_end_clean打消php缓冲区内的内容,并且关闭输出缓冲区7.ob_end_flush把php自身的缓冲区里的内容发送到apache,并把打消自身缓冲区内的内容8.ob_get_clean获取缓冲区的内容之后,打消缓冲区.9.ob_get_contents获取输出缓冲区里的内容10.ob_get_flush获取缓冲区里的内容,并且把这些内容发送到apache11.ob_get_length获取缓冲区里内容的长度12.ob_list_handlers获取运行ob_start时,所回调的函数名称, 例如:ob_start(‘ob_gzhandler’);print_r(ob_list_handlers);将打印出ob_gzhandler;13.ob_gzhandler该函数的浸染是作为ob_start的回调参数, 在缓冲区刷新之前,会调用该函数对数据进行到底gzip或者deflate压缩.这个函数须要zlib扩展的支持.