码迷,mamicode.com
首页 > Web开发 > 详细

php异步执行其他程序

时间:2017-06-27 12:21:34      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:代码   inux   nbsp   user   tran   就会   etop   一个   abort   

这里的“其他程序”,可能是linux命令,可能是其他的php文件。

网上说法有四种。分别为:

1、通过加载页面的时候通过ajax技术异步请求服务器

2、通过popen()函数

3、通过curl扩展

4、通过fscokopen()函数

 

说说我的看法!

通过ajax技术

不推荐

若需要异步执行的“程序”太过于耗时,而用户此时若关闭了浏览器的话,一般如果没有做什么特殊配置或者服务器端代码没有做特殊处理的话,服务器端的代码会终止执行。这就导致了这个“程序”执行并不完整,造成数据缺失,会对项目有影响。

当然,如果说在代码中加入ignore_user_abort(true)方法的话,是可以忽略浏览器是否关闭而将该脚本执行完。

通过popen()函数

待验证

我验证过了该方法,怎么弄都不行。在php.ini中已经开启了popen方法,且需要执行的php脚本也是设置权限为777了,但是不知道为什么就是执行不成功

通过curl扩展

验证可行

1 $ch = curl_init();        
2 $curl_opt = array(
3     CURLOPT_URL=>‘hostname/syncStock.php‘,
4     CURLOPT_RETURNTRANSFER=>1,
5     CURLOPT_TIMEOUT=>1,);        
6 curl_setopt_array($ch, $curl_opt);        
7 $out = curl_exec($ch);        
8 curl_close($ch);

原理:通过curl去调用一个php脚本,如果响应时间超过了1秒钟,则断开该连接,程序继续往下走而syncStock.php这个脚本还在继续往下执行。

缺点:必须设置CURLOPT_TIMEOUT=>1这个属性,所以导致客户端必须至少等待1秒。但是这个属性不设置又不行,不设置的话,就会一直等待响应。就没有异步的效果了。

通过fscokopen()函数

待验证

 

php异步执行其他程序

标签:代码   inux   nbsp   user   tran   就会   etop   一个   abort   

原文地址:http://www.cnblogs.com/hf8051/p/7084465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!