4种PHP异步执行的常用方式


Posted in PHP onDecember 24, 2015

本文为大家讲述了php异步调用方法,分享给大家供大家参考,具体内容如下
客户端与服务器端是通过HTTP协议进行连接通讯,客户端发起请求,服务器端接收到请求后执行处理,并返回处理结果。
有时服务器需要执行很耗时的操作,这个操作的结果并不需要返回给客户端。但因为php是同步执行的,所以客户端需要等待服务处理完才可以进行下一步。
因此对于耗时的操作适合异步执行,服务器接收到请求后,处理完客户端需要的数据就返回,再异步在服务器执行耗时的操作。
1.使用Ajax 与 img 标记
原理,服务器返回的html中插入Ajax 代码或 img 标记,img的src为需要执行的程序。
优点:实现简单,服务端无需执行任何调用
缺点:在执行期间,浏览器会一直处于loading状态,因此这种方法并不算真正的异步调用。

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php?name=fdipzone">

2.使用popen
使用popen执行命令,语法:

// popen — 打开进程文件指针  
resource popen ( string $command , string $mode )
pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));

优点:执行速度快
缺点:

  • 1).只能在本机执行
  • 2).不能传递大量参数
  • 3).访问量高时会创建很多进程

3.使用curl
设置curl的超时时间 CURLOPT_TIMEOUT 为1 (最小为1),因此客户端需要等待1秒

<?php 
$ch = curl_init(); 
$curl_opt = array( 
  CURLOPT_URL, 'http://www.example.com/doRequest.php'
  CURLOPT_RETURNTRANSFER,1, 
  CURLOPT_TIMEOUT,1 
); 
curl_setopt_array($ch, $curl_opt); 
curl_exec($ch); 
curl_close($ch); 
?>

4.使用fsockopen
fsockopen是最好的,缺点是需要自己拼接header部分。

<?php 
   
$url = 'http://www.example.com/doRequest.php'; 
$param = array( 
  'name'=>'fdipzone', 
  'gender'=>'male', 
  'age'=>30 
); 
   
doRequest($url, $param); 
   
function doRequest($url, $param=array()){ 
   
  $urlinfo = parse_url($url); 
   
  $host = $urlinfo['host']; 
  $path = $urlinfo['path']; 
  $query = isset($param)? http_build_query($param) : ''; 
   
  $port = 80; 
  $errno = 0; 
  $errstr = ''; 
  $timeout = 10; 
   
  $fp = fsockopen($host, $port, $errno, $errstr, $timeout); 
   
  $out = "POST ".$path." HTTP/1.1\r\n"; 
  $out .= "host:".$host."\r\n"; 
  $out .= "content-length:".strlen($query)."\r\n"; 
  $out .= "content-type:application/x-www-form-urlencoded\r\n"; 
  $out .= "connection:close\r\n\r\n"; 
  $out .= $query; 
   
  fputs($fp, $out); 
  fclose($fp); 
} 
   
?>

注意:当执行过程中,客户端连接断开或连接超时,都会有可能造成执行不完整,因此需要加上

ignore_user_abort(true); // 忽略客户端断开 
set_time_limit(0);    // 设置执行不超时

以上就是php异步调用方法的详细介绍,希望对大家的学习有所帮助。

PHP 相关文章推荐
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
php返回json数据函数实例
Oct 09 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
Smarty保留变量用法分析
May 23 PHP
微信支付PHP SDK ―― 公众号支付代码详解
Sep 13 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 PHP
PHP sdk实现在线打包代码示例
Dec 09 PHP
php实现异步数据调用的方法
Dec 24 #PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 #PHP
深入浅析php json 格式控制
Dec 24 #PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 #PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 #PHP
php采用session实现防止页面重复刷新
Dec 24 #PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 #PHP
You might like
PHP中date()日期函数有关参数整理
2011/07/19 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
javascript之ESC(第二类混淆)
2007/05/06 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
小学生防溺水广播稿
2014/01/12 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
分公司经理任命书
2014/06/05 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
行政诉讼答辩状
2015/05/21 职场文书