php异步执行其他程序

这里的“其他程序”,可能是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()函数

待验证

时间: 2024-08-02 00:39:36

php异步执行其他程序的相关文章

m5-多主机异步执行命令程序

这是一个多主机异步执行命令程序 作者介绍: author:Howard My Blog: http://987774031.blog.51cto.com/ GitHub: https://github.com/wuwuming/python_practice/tree/master/machine_manage 需求: 例子: >>:run "df -h" --hosts 192.168.3.55 10.4.3.4 task id: 45334 >>: chec

简单说下异步执行原理。

计算机程序执行分为同步执行,和异步执行: 所谓的异步执行,是一种特殊的程序的执行方式,常见的异步程序有 定时器(setInterval),延时器(setTimeou),各种事件的绑定(onclick......),ajax请求 异步程序的执行过程 1.从第一行代码开始执行 2.同步程序开始执行 3.遇到异步程序了,暂时不执行,将异步程序暂时存储在“异步池”中 4.所有的同步程序执行完毕 5.开始执行“异步池”中的异步程序 若有设定了时间的程序,就会先执行到点了的程序 若有设定的时间是相同的程序,

Windows 商店应用程序异步执行task和调整task优先级

在制作WP8.1手电筒的时候遇到一个问题,手电筒有时候能够点亮有时候点不亮. 在MSDN论坛上面有人告诉我可能是优先级的问题示意叫我使用CoreDispatcher 将task任务提高权限,但是发现还是不行. 后来发现点亮闪关灯需要在UI线程中触发,不能再异步中实现,感觉和画图有点类似不能在非主线程中绘制图片. 下面我就分享怎么利用CoreDispatcher改变task任务的优先级(不过还没有验证,因为我还没有遇到需要改变优先级的task,但是依据Windows运行时API的说明应该是正确的改

使用spring的@Async异步执行方法

应用场景: 1.某些耗时较长的而用户不需要等待该方法的处理结果 2.某些耗时较长的方法,后面的程序不需要用到这个方法的处理结果时 在spring的配置文件中加入对异步执行的支持 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.spri

PHP中实现异步调用多线程程序代码

本文章详细的介绍了关于PHP中实现异步调用多线程方法,下面我们以给1000个用户发送一封推荐邮件,用户输入或者导入邮件账号了提交服务器执行发送来讲述. 比如现在有一个场景,给1000个用户发送一封推荐邮件,用户输入或者导入邮件账号了提交服务器执行发送 第一种解决方法: 代码如下: <?php $count=count($emailarr); for($i=0;$i<$count;$i ) { sendmail(.....);//发送邮件 } ?>              这段代码用户体

ajax同步、异步执行简单理解与证明

此理解范例代码来自前几篇随笔! 重在实际操作练习一下!!!!! 在$.ajax()中我们可以常常看到async,这就是来指定ajax同步异步的,需要记忆一下: 记忆方法: sync英语中的意思是:“同步”.“同步的”.“同步处理” 前面加个“a”,构成async英文中的意思是:“异步” 再者给他指定true和false那就容易理解了: “async:true” 意思是:“异步” “async:false” 意思是:“同步” 分析async作用: 当“async:true”时,也就是异步执行aja

Delphi中ADO异步执行方式

当ADO开始处理数据后,应用程序必须等到ADO处理完毕之后才可以继续执行.但是除了同步执行方式之外,ADO也提供了异步执行的方式,允许当ADO处理时,应用程序仍然能够先继续执行.而当ADO处理数据完毕之后,ADO会以事件的方式通知应用程序,此时应用程序可以再根据ADO执行的结果来采取相应的动作.使用异步执行方式有许多用途,例如,如果应用程序需要处理花费大量时间的动作,那么ADO可以选择以异步执行方式让ADO在后台执行,而让应用程序继续处理图形用户接口或用户输入的数据.在ADO中使用异步执行方式非

Omnithreadlibary学习(1)-异步执行

program main; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, OtlParallel; begin Parallel.Async(procedure var i: Integer; begin for I := 0 to 100 do Writeln(Format('No.%d', [i])); end); Writeln('执行一'); Sleep(100); Writeln('执行二'); Sleep(100); Writ

Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)

系列文章导航 Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表) Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) Adobe AIR中使用Flex连接Sqlite数据库(3)(查询) Adobe AIR中使用Flex连接Sqlite数据库(4)(事务) Flex,Fms3相关文章索引 Fms3和Flex打造在线多人视频会议和视频聊天(附原代码) 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))