关于
ob_start
的作用在此不做过多描述,网上很多。
请看下面的小程序
(
在看之前,说明一下,在
php.ini
中设置
output_buffering=on)
<?php
ob_start();
echo str_repeat(' ', 1000); //Chrome和FF缓存1000Bytes,这里用来先将浏览器缓存用掉,但是很疑惑这一行输出为什么没有被output_buffering存起来,而是直接输出了
for ($i = 0; $i < 5; $i++) {
echo $i . '<br />';
ob_flush();
flush();
sleep(1);
}
?>
如果对
ob_start
很熟悉的话,应该会判断出结果:直接输出了
0
、
1
、
2
、
3
、
4
;有人很奇怪为什么会出现这个情况,而不是
sleep 1s
后输出一个。这个暂不解释,在看一下下面这个程序:
<?php
ob_start();
echo str_repeat(' ', 1000); //Chrome和FF缓存1000Bytes,这里用来先将浏览器缓存用掉,但是很疑惑这一行输出为什么没有被output_buffering存起来,而是直接输出了
for ($i = 0; $i < 5; $i++) {
echo $i . '<br />';
ob_flush();
flush();
sleep(1);
}
ob_end_flush();
for ($i = 0; $i < 5; $i++) {
echo $i . '<br />';
ob_flush();
flush();
sleep(1);
}
?>
结果是先输出了
0
、
1
、
2
、
3
、
4
然后每
sleep 1s
输出一个数字。
因为,
ob_start
函数是有堆叠性的,也就是说,
ob_start
一般要和
ob_end_flush
配合使用。
先说一下第一个程序,在
php
配置文件内已经开启了
output_buffering
暂且编号
1
,在程序中又因为
ob_start
的原因开启了另一缓冲区暂且编号
2
(请明白是缓冲区
buffering
,而不是
cache
),因为
ob_flush
是刷新
php
缓冲区,而不是关闭,所以,每
sleep
1s
只是刷新了缓冲区
2
,所以会等待输出结束或者超过
buffering
的值时才会输出。而第
2
个程序因为关闭了一个
cache
所以先输出了
0
、
1
、
2
、
3
、
4
然后每
sleep 1s
输出一个数字。
这个算是迎接
2013
的第一篇博客,以后会多多经营,请码友们多指教。
分享到:
相关推荐
`ob_start()`是PHP中用于开启输出缓冲区的函数,它会将程序生成的所有输出存储在内存中,而不是立即发送到浏览器。这使得我们可以在程序执行完毕后再一次性处理这些内容,例如将它们写入文件或进行其他处理。 `ob...
必须使用`ob_end_flush()`或`flush()`等函数显式输出缓冲区内容。 3. **ob_get_contents** - **函数格式**:`ob_get_contents();` - **说明**:获取当前输出缓冲区的内容。如果输出缓冲未开启,则返回`FALSE`。 ...
在使用ob_start()或者ob_start('ob_gzhandler')进行输出控制时,也要注意避免过多的嵌套或者错误地使用这些函数,这可能会导致不可预料的错误和性能问题。正确的使用方法是在输出之前调用ob_start(),在所有输出完成...
在这个例子中,`ob_start()`开启缓冲,然后输出的内容会被保存,直到`ob_end_flush()`被调用,这时才将缓冲区的内容发送到浏览器。在这两者之间,可以设置HTTP头信息,例如`header()`函数,它必须在任何输出之前调用...
例如,在生成图片并下载的情况下,可以使用ob_start()开始缓冲输出,然后将图片数据写入输出缓冲区,使用ob_get_contents()获取缓冲区的内容,然后可以进行进一步操作,比如删除临时文件或发送到客户端。在客户端,...
我想将PHP脚本中输出的东西收集在一起,于是使用了ob_start和ob_end_flush这两个函数,确实有达到收集输出内容的作用,但同时也将这些打印到了控制台界面中。我想问的是有没有办法,阻止PHP像控制台输出信息。该软件...
`ob_start()` 是PHP的输出控制函数,它开启了一个输出缓冲区,允许脚本在实际发送到浏览器之前处理输出。当`ob_start()`被调用时,PHP会开始在内存中存储所有输出的内容,直到`ob_end_flush()` 或其他 `ob_end_XXX()...
在PHP编程中,`ob_start()` 是一个非常实用的内置函数,它用于启动输出缓冲。输出缓冲允许程序临时存储输出,而不是直接发送到浏览器。它通常用于处理HTML代码,例如,可以在输出前对其进行修改或清洗,以及用于页面...
这是因为`ob_start`会将所有输出的数据暂存起来,直到你显式地调用`ob_end_flush()`或`flush()`来发送缓冲区的内容到浏览器。 下面我们将详细讨论`ob_start`函数以及与之相关的其他输出控制函数: 1. **`ob_start`...
`ob_start()`函数在这种场景下就显得尤为重要,它可以帮助我们将输出缓冲区开启,以便于捕获图片的二进制数据。下面将详细阐述如何使用`ob_start()`配合其他函数来实现这个功能。 `ob_start()`是PHP的输出控制函数...
`ob_start()`可以在`header()`之前调用,确保所有的输出都进入缓冲区,从而避免该错误。例如: ```php ob_start(); // 开启缓冲区 echo "Hello\n"; // 输出会被暂存 header("Location: index.php"); // 重定向到...
当调用ob_start()时,PHP会开始将输出保存到缓冲区,直到脚本执行完毕或者调用ob_end_flush()后才发送到客户端。ob_start()还可以配合ob_get_contents()使用,将输出保存到变量中,这在需要对输出内容进行处理或修改...
有些信息比方经常不变的,但是还是能变的信息放在缓存中以加快显示速度,这是很有价值的,所谓的缓存,通俗的理解就是一些保存在服务器端的共用信 息.它是于服务器同生死的,我们在保存缓存的时候可以指定下次更新的时间...
`ob_start()` 函数开启输出缓冲区,这意味着在PHP脚本运行过程中产生的任何输出(例如HTML、CSS或JavaScript)都不会立即发送到浏览器,而是被存储在内存中的缓冲区。这使得我们有机会在所有输出完成后再一次性处理...
在PHP编程中,`ob_start()`函数是一个非常重要的功能,它用于开启输出缓冲区,允许开发者在发送数据到浏览器之前对其进行处理。这在处理页面重定向、设置HTTP头信息(如`header()`函数)以及生成HTML静态文件时尤为...
通过使用ob_start函数,开发者可以暂时性地将脚本的输出存储到一个内部缓冲区中,而不是直接发送到浏览器。这一功能在生成HTML页面时尤为有用。 首先,ob_start函数本身并不复杂。它主要用于打开输出缓冲区,并可选...