【PHP基础之输出缓冲区基本概念、原理分析】教程文章相关的互联网学习教程文章

php flush类输出缓冲剖析

<?php for ($i=10; $i>0; $i--) { echo $i; flush(); sleep(1); } ?> 按照php手册里的说法 该函数将当前为止程序的所有输出发送到用户的浏览器。 上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来。 好,我们来改一下这段代码,改成 <?php ob_end_clean();//修改部分 for ($i=10; $i>0; $i--) { echo $i; flush(); sleep(1); } ?> 嘿,加了这一句ob_end_clean();...

PHP 输出缓冲控制(Output Control)详解

php 缓冲简介 其实我对php ob 系列印象还是很模糊,具体怎么玩的,还不是很了解,平时curd,确实对这些内容没有深入。作为phper 甚是惭愧。网上搜了一通,互相copy,代码运行不能出现作者所描述现象,本文良心出品,代码都是作者运行过。   当执行输出的时候,比如 echo,print。输出并没有立即送给 web server, 而是将数据写入 php buffer。php output_buffering 机制好处当然提升性能。其实 php 文件最终在浏览器上显示,...

PHP输出缓冲控制Output Control系列函数详解

概述 以前研究过PHP的输入输出缓冲,不过博客搬家以后,原来文章找不到了,今天看到一篇好文,顺便转载过来。 简介 说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西。举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会向磁盘写入的,而是写到buffer中,当buffer写满或者执行了保存操作,才会将数据写入磁盘。对于PHP来说,每一次像 echo 这样的输出操作,同样是先写入到了 php buffer 里...

PHP嵌套输出缓冲代码实例【图】

PHP的输出缓存是可以嵌套的。用ob_get_level()就可以输出嵌套级别。 测试发现在cli和浏览器下输出结果不一样(PHP5.4)。手册说明如下: ob_get_level() will always return 0 inside a destructor. This happens because the garbage collection for output buffers has already done before the destructor is called 想要正确输出也很简单:代码如下: ob_end_clean(); echo ob_get_level(); //0回到正题:代码如下: ob_end_cle...

如何在PHPUnit测试中使用输出缓冲?【代码】

我正在使用PHPUnit来测试下载文件的功能.我想测试是否下载了正确的文件,所以我的想法是检查函数的输出.我正在尝试使用输出缓冲:ob_start(); $viewer->downloadById($fileId); $output = ob_get_flush(); $this->assertEquals($expectedFileContents,$output);测试应该通过/失败,这很好.我的问题是输出缓冲区的内容也被打印到控制台.我该如何隐藏呢?解决方法:使用ob_get_clean()代替ob_get_flush().前者将删除缓冲区而不打印它并返...

如何阻止PHP输出缓冲吃掉错误消息?【代码】

好吧,既然我已经进一步了解它,我意识到这是一个愚蠢的问题,而且是错误的.事实证明,我维护的遗留代码的作者用错误日志将php_init语句置于不同的文件中. hi-jacking在输出缓冲打开的同时发生,使得看起来好像输出缓冲丢失了我的错误消息. 所以,主持人,随便删除这个.感谢那些善意回答的人. 给出以下PHP脚本:<?php error_log('test'); ob_start();error_log('test2');ob_end_flush(); ?>我得到以下错误日志输出:[04-Feb-2010 11:30:3...

PHP输出缓冲?什么是最佳做法?【代码】

继previous question之后,当我想要缓存PHP输出直到我执行所有处理时,最好的方法是什么?我想缓冲以留给自己重定向到错误页面的选项,这是我在输出之后无法做到的. 那么,最佳做法是什么?使用变量$output并继续追加它,然后在结尾输出它?或者使用ob_str()等? 是否存在选择代码可维护性原因而不是另一个的性能?还是仅仅是个人的优先选择?解决方法:对我来说,我这样做了:<?phpob_start();//do your process hereif($error) {ob_end_...

PHP输出缓冲到文本文件【代码】

我遇到了更新脚本的问题.它运行了几个小时,所以我希望它输出到文本文件. 我用这个文件开始ob_start();然后在while循环中(因为它遍历数据库的记录)我有这个$size=ob_get_length(); if ($size > 0) {$content = ob_get_contents();logit($contents);ob_clean(); }最后是logit功能function logit($data) {file_put_contents('log.txt', $data, FILE_APPEND); }但是,日志文件仍为空.我究竟做错了什么?解决方法:尝试logit($content); /...

使用Apache和MySQL进行php输出缓冲的性能影响

我对php缓冲如何工作有点困惑. 假设你在php.ini中有一个php页面foo.php和output_buffering = 4096,Apache收到foo.php的get请求. foo.php开始执行,一旦准备好4096个字节,它们就会被发送到Apache. Apache开始向客户端发送这4096个字节. 这是我不明白的:当有一些讨厌的跟踪器标注,javascript或发送到浏览器的图像时会发生什么.浏览器被挂断了,并且暂时没有回到Apache,并坚持下去. Apache没有发布MySQL线程,它正在显示为“睡眠者”.这...

缓冲区 - 相关标签