电脑安全

您当前的位置:主页 > 电脑安全 >

剖析PHP中的输出缓冲 flush之类-网络编程

来源:[db:来源]标题:   代码    编辑:电脑技术全能网 时间:2019-09-22 06:21

原标题:剖析PHP中的输出缓冲 flush之类-网络编程
   咱们先来看一段代码。<?phpfor ($i=10; $i>0; $i--){ echo $i; flush(); sleep(1);}?>依照php手册里的说法 该函数将以后为止顺序的全部输入发送到用户的扫瞄器。下面的这段代码,应当隔一秒钟输入一次$i。然而现实中却纷歧定是如许。有能够是等了10秒钟后,全部的输入同时浮现进去。好,咱们来改一下这段代码,改成<?phpob_end_clean();//修正局部for ($i=10; $i>0; $i--){ echo $i; flush(); sleep(1);}?>嘿,加了这一句ob_end_clean();,竟然就OK了。现实上,咱们把ob_end_clean()换成ob_end_flush()也一样OK。我再来改一改。<?phpfor ($i=10; $i>0; $i--){ echo $i; ob_flush();//修正局部 flush(); sleep(1);}?>运转一下,是不是发觉$i也隔一秒输入一次了?这是为甚么呢?别急,咱们来看看php.ini。翻开php.ini,搜寻output_buffering,咱们会看到相似如许的设置 output_buffering = 4096。正如它的名字output_buffering一样,这个设置的感化就是把输入缓冲一下,缓冲巨细为4096bytes.在咱们的第一段代码里,之以是没有按预期的输入,恰是由于这个output_buffering把那些输入都缓冲了。没到达4096bytes或许剧本停止,输入是不会被发送进来的。而第二段代码中的ob_end_clean()和ob_end_flush()的感化,就是停止缓冲。如许就不必比及有4096bytes的缓冲以后才被发送进来了。第三段代码中,用了一句ob_flush(),它的感化就是把缓冲的数据发送进来,然而并不会停止缓冲,以是它必需在每次flush()前应用。假如不想应用ob_end_clean(),ob_end_flush()和ob_flush(),咱们就必需把php.ini里的 output_buffering设得充足小,比方设为0。须要留神的是,假如你盘算在剧本中应用ini_set(” output_buffering”,”0″)来设置,那末请停上去吧,这类方式是不可的。由于在剧本一开端的时间,缓冲设置就曾经被载入,而后缓冲就开端了。能够你会问了,既然ob_flush()是把缓冲的数据发送进来,那末为甚么还须要用flush()???间接用上面这段代码不可吗??<?phpfor ($i=10; $i>0; $i--){ echo $i; ob_flush(); sleep(1);}?>请留神ob_flush()和flush()的差别。前者是把数据从PHP的缓冲中开释进去,后者是把不在缓冲中的或许说是被开释进去的数据发送到扫瞄器。以是当缓冲存在的时间,咱们必需ob_flush()和flush()同时应用。那是不是flush()在这里就是弗成缺乏的呢?不是的,咱们另有别的一种方式,使切当无数据输入的时间,立刻被发送到扫瞄器。上面这两段代码就是不须要应用flush()了。(当你把output_buffering设为0的时间,连ob_flush()和ob_end_clean()都不须要了)<?phpob_implicit_flush(true);for ($i=10; $i>0; $i--){ echo $i; ob_flush(); sleep(1);}<

上一篇:取得当前得页面URL-网络编程

下一篇:没有了