长时间运行的PHP程序解决方案

描述:有时候,PHP程序会面临AJAX过来的调用,但逻辑处理的运行又比较漫长,如外部调用svn checkout某个项目,那么就会导致几个问题:客户端超时,返回数据集超大,服务器端脚本超时,内存占用巨大等

比较了几个解决方案,以下这个能比较好地解决上述问题,对服务器的调整也不会造成太大影响。
伪daemon程序,原理:主php程序执行,并不等结果完成就直接返回,中断与浏览器连接,但是断开后仍能保持执行状态,执行过程中建立log文件以备查询,相当于一个daemon。浏览器端的ajax可设时间轮询执行状态,轮询程序查询log文件并返回结果;

步骤:
1. 设置.htaccess,确保返回的Content-Type encoding不是gzip

<IfModule mod_env.c>
SetEnvIfNoCase Request_URI "\.php$" no-gzip dont-vary
</IfModule>


2.设置中断返回以及长时间运行设置
set_time_limit(0); 
ignore_user_abort
(true);    
// buffer all upcoming output - make sure we care about compression:
if(!ob_start("ob_gzhandler"))
    ob_start
();        
echo $stringToOutput
;    
// get the size of the output
$size
= ob_get_length();    
// send headers to tell the browser to close the connection    
header
("Content-Length: $size");
header
('Connection: close');    
// flush all output
ob_end_flush
();
ob_flush
();
flush
();    
// close current session
if (session_id()) session_write_close(); //close connection

// here, do what you want.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bennybi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值