php-PHP被阻塞情况下输出数据 ob_flush不管用

问题描述

PHP被阻塞情况下输出数据 ob_flush不管用
ob_start();
for($i=0;$i<20;$i++){
    //...耗时的操作 3秒钟
    echo "ABC";
    ob_flush();
}

运行的时候,需要1分钟才能显示ABC,怎样一条条的出来,3秒钟得出来一次呀?
谢谢解答在线等~

解决方案

@ob_flush();
for($i=0;$i<20;$i++){
//...耗时的操作 3秒钟
echo "ABC" . str_repeat(' ', 256); //输出足以使浏览器缓冲区充满的数据(IE必须)
ob_flush(); //推出用户缓存
flush(); //推出系统缓存
}

这是利用系统的瑕疵产生的效果,应避免使用
建议用 ajax 轮询,或 websock 推送(如果你的用户群都支持的话)

解决方案二:

参考 [Calling ob_flush() and flush(), yet browser doesn't show any output until script finishes][1]
<?php
header( 'Content-type: text/html; charset=utf-8' );
for($i=0;$i<20;$i++){
//...耗时的操作 3秒钟
echo 'ABC';
ob_flush();
flush();
}

解决方案三:

参考是 Calling ob_flush() and flush(), yet browser doesn't show any output until script finishes

如果还是不能显示,可以先输出2048 Byte空格,因为有些浏览器内部有些机制

解决方案四:

浏览器一般都是满足多少字节以后才开始显示的,这个其实很简单的

for($i=0;$i<20;$i++){
echo "ABC";
flush();
ob_flush();
sleep(1);
}

解决方案五:

for($i=0;$i<20;$i++){
echo "ABC";
flush();
ob_flush();
sleep(3);//3秒再执行输出
}

时间: 2024-11-17 17:38:42

php-PHP被阻塞情况下输出数据 ob_flush不管用的相关文章

Yii+MYSQL锁表防止并发情况下重复数据的方法_php实例

本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法.分享给大家供大家参考,具体如下: lock table 读锁定 如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作. lock tables user read;//读锁定表 unlock tables;//解锁 lock tables user read local;//本地读锁定表,其他线程的insert未被阻塞,update操作被阻塞 lock table 写锁定 如果一个线

c#-如何用while语句判断用户名及密码 并且在账号错误或者密码错误的情况下输出MessageBox

问题描述 如何用while语句判断用户名及密码 并且在账号错误或者密码错误的情况下输出MessageBox 如何用while语句判断用户名及密码 并且在账号错误或者密码错误的情况下输出MessageBox 代码已经写好了如下 怎么样可以在while循环密码不正确后输出MessageBox 用于区分 对账户的判断 if (sdr.HasRows) { //SqlDataReader 在数据库中为 从第1条数据开始 一条一条往下读 while (sdr.Read()) //如果读取账户成功(文本框中

Yii+MYSQL锁表防止并发情况下重复数据的方法

本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法.分享给大家供大家参考,具体如下: lock table 读锁定 如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作. lock tables user read;//读锁定表 unlock tables;//解锁 lock tables user read local;//本地读锁定表,其他线程的insert未被阻塞,update操作被阻塞 lock table 写锁定 如果一个线

c++-C++在脱离了环境的情况下输出代码执行的源代码

问题描述 C++在脱离了环境的情况下输出代码执行的源代码 不要百度的回答,谢谢,是脱离环境下的输出源代码,怎么把源代码输出出来? 解决方案 首先,你需要一份源代码放在你的程序中,然后你可以用 ___LINE___ 宏来嵌入当前执行的行,然后你可以读取源代码文件,输出这个行的代码. 解决方案二: 包编译后就是二进制文件了怎么输出源代码,你告诉我

技术-在没有PC网站接口的情况下实现数据输入读取并得到返回结果显示在手机网站上,

问题描述 在没有PC网站接口的情况下实现数据输入读取并得到返回结果显示在手机网站上, 我想在手机端输入手机号和其他身份信息就可以连接PC段网站得到返回数据信息并显示在手机网页上,中间需要什么技术和具体步骤,有大神帮忙分析下吗?希望有经验的大神可以帮我解决这个难题,如果方便的话发我邮箱:408150057@qq.com 解决方案 手机上就是一个客户端,然后网站做服务端,提供一个web API 手机发送ajax请求得到返回的数据.一般用json格式

在保证安全的情况下运用数据 可能吗?

本报记者滑明飞上海报道 近日,支付宝与上海付费通信息服务有限公司(下称付费通)的"分手"事件闹得沸沸扬扬.付费通是上海最大公用事业账单平台,其系统直接对接电力.燃气和水务等相关机构.2009年,双方开始合作,支付宝将付费通作为通道实现为用户提供缴费和查询服务. 6月30日,付费通单方面宣布与支付宝停止合作,其中一条理由是支付宝"扒数据".据了解,这一说法是指支付宝2011年推出的用户定制查询缴费功能,如果用户设置了每个月的缴费时间,支付宝会提前从付费通系统提取数据推

Android在不使用数据库的情况下存储数据的方法_Android

本文实例讲述了Android在不使用数据库的情况下存储数据的方法.分享给大家供大家参考.具体分析如下: 在有些情况下我们不需要构建数据库,但是却要将一些数据保存起来,等到程序下次运行时调用,那么我们如何做呢? 1. 引用命名空间 import android.content.SharedPreferences; 2. 定义一个新类PictureGlobalDef,用来存储数据,在该类中定义: public final static String APPSetting = "SettingFile

Android在不使用数据库的情况下存储数据的方法

本文实例讲述了Android在不使用数据库的情况下存储数据的方法.分享给大家供大家参考.具体分析如下: 在有些情况下我们不需要构建数据库,但是却要将一些数据保存起来,等到程序下次运行时调用,那么我们如何做呢? 1. 引用命名空间 import android.content.SharedPreferences; 2. 定义一个新类PictureGlobalDef,用来存储数据,在该类中定义: public final static String APPSetting = "SettingFile

服务器上的Mysql表全丢了情况下恢复数据

任务: web项目是在linux的Tomcat部署,Mysql也在上面,不知明原因下数据库宕机,启动不了,数据库表也突然没了,全空了!!!!!!!! mysql安装目录 惊喜的发现var/目录下有类似丢失数据库的表 接下来就是怎么恢复进去了,首先我们用的是mysql的InnoDb引擎,找了下其资料: 两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用. 我作为使用MySQL的用户角度出发,Innodb和M