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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
MYSQL数据库初学者使用指南
Nov 16 PHP
PHP $_SERVER详解
Jan 16 PHP
php 操作excel文件的方法小结
Dec 31 PHP
php检测图片主要颜色的方法
Jul 01 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
Dec 08 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
yii框架使用分页的方法分析
Jul 25 PHP
Laravel框架实现定时Task Scheduling例子
Oct 22 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学习笔记(毕业设计)
2012/02/21 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
JavaScript入门学习书籍推荐
2008/06/12 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
Python实现的矩阵类实例
2017/08/22 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
Python实现FLV视频拼接功能
2020/01/21 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
python实现移动木板小游戏
2020/10/09 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
护理专业优质毕业生自荐书
2014/01/31 职场文书
超市开学活动方案
2014/03/01 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
企业2014年度工作总结
2014/12/10 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
物业接待员岗位职责
2015/04/15 职场文书
横空出世观后感
2015/06/09 职场文书
慰问信(范文3篇)
2019/10/23 职场文书