for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep( 1);
}
?>
According to the PHP manual
This function sends all the output of the program so far to the user's browser.
The above code should output $i every one second. But this is not necessarily the case in practice. It is possible that after waiting for 10 seconds, all output is presented at the same time.
Okay, let’s change this code to
ob_end_clean();//Modify part
for ($i=10; $i>0; $i --)
{
echo $i;
flush();
sleep(1);
}
?>
Hey, added this sentence ob_end_clean( );, it’s actually OK. In fact, it is also OK if we replace ob_end_clean() with ob_end_flush().
I will change it again.
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();//Modify part
flush();
sleep(1);
}
?>
Run it, do you find that $i is also output every second? Why is this?
Don’t worry, let’s take a look at php.ini.
Open php.ini, search for output_buffering, we will see a setting like this output_buffering = 4096. Just like its name output_buffering, the function of this setting is to buffer the output. The buffer size is 4096 bytes.
In our first piece of code, the reason why the output is not as expected is precisely because this output_buffering buffers the output. All buffered. The output will not be sent before 4096 bytes is reached or the script ends.
The function of ob_end_clean() and ob_end_flush() in the second piece of code is to terminate the buffering. In this way, there is no need to wait until there is a buffer of 4096 bytes before being sent out.
In the third piece of code, ob_flush() is used. Its function is to send the buffered data, but it does not terminate the buffering, so it must be used before each flush().
If we don’t want to use ob_end_clean(), ob_end_flush() and ob_flush(), we must set output_buffering in php.ini small enough, for example, set to 0. It should be noted that if you plan to use ini_set("output_buffering","0") to set it in a script, then please stop, this method will not work. Because at the beginning of the script, the buffering settings have been loaded, and then buffering starts.
You may ask, since ob_flush() sends the buffered data, why do you need to use flush()??? Can't you just use the following code? ?
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
sleep( 1);
}
?>
Please note the difference between ob_flush() and flush(). The former is to release data from PHP's buffer, and the latter is to send data that is not in the buffer or has been released to the browser. So when the buffer exists, we must use ob_flush() and flush() at the same time.
Is flush() indispensable here? No, we have another method so that when data is output, it is immediately sent to the browser. The following two pieces of code do not need to use flush(). (When you set output_buffering to 0, you don’t even need ob_flush() and ob_end_clean())
ob_implicit_flush(true);
for ($i=10; $ i>0; $i--)
{
echo $i;
ob_flush();
sleep(1);
}
?>
ob_end_clean();
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
echo $i;
sleep(1);
}
?>
Please note ob_implicit_flush(true) above. This function forces the output to be sent to the browser immediately whenever there is output. In this way, there is no need to use flush() to send it to the browser after each output (echo).
The above complaint may not be true in some browsers. Because browsers also have their own rules. I used Firefox1.5, IE6, opera8.5 to test. Among them, opera cannot output normally because it has a rule that if it does not encounter an HTML tag, it will never output unless the script ends. FireFox and IE are relatively normal.
Finally, a very interesting piece of code is attached, written by PuTTYshell. In a script cycle, each output will overwrite the previous output.
The following code is only available under firefox. Other browsers do not support the Content-Type of multipart/x-mixed-replace.
header('Content-type: multipart/x- mixed-replace;boundary=endofsection');
print "n--endofsectionn";
$pmt = array("-", "\", "|", "/" );
for ( $i = 0; $i sleep(1);
print "Content-type: text/plainnn";
print "Part $it". $pmt[$i % 4];
print "--endofsectionn";
ob_flush();
flush();
}
print "Content-type: text/plainnn" ;
print "The endn";
print "--endofsection--n";
?>

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

SublimeText3 Chinese version
Chinese version, very easy to use

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver Mac version
Visual web development tools
