多数大学生出来选择的工作和专业无关
首页 > 专业知识

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

时间:2018-11-23 19:47:46 [来源]:郑州PHP培训学校

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

  本文为大家讲述了php异步调用方法,分享给大家供大家参考,具体内容如下客户端与服务器端是通过HTTP协议进行连接通讯,客户端发起请求,服务器端接收到请求后执行处理,并返回处理结果。
  有时服务器需要执行很耗时的操作,这个操作的结果并不需要返回给客户端。但因为php是同步执行的,所以客户端需要等待服务处理完才可以进行下一步。
  因此对于耗时的操作适合异步执行,服务器接收到请求后,处理完客户端需要的数据就返回,再异步在服务器执行耗时的操作。
  1.使用Ajax 与 img 标记
  原理,服务器返回的html中插入Ajax 代码或 img 标记,img的src为需要执行的程序。
  优点:实现简单,服务端无需执行任何调用
  缺点:在执行期间,浏览器会一直处于loading状态,因此这种方法并不算真正的异步调用。
  $.get("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
  PHP在这方面应该说是比较弱,如果只用php去实现可以如下:
  <?php
  ignore_user_abort();//关闭浏览器后,继续执行php代码set_time_limit(0);//程序执行时间无限制
  $sleep_time = 1;//多长时间执行一次
  do{
  $fp = fopen('test.txt','a+');
  fwrite($fp,"这是一个php博客:phpddt.com \n");fclose($fp);
  sleep($sleep_time);
  }while(true);
  ?>
  但是当我执行脚本的时候,即使我关闭了浏览器,我根本就没法去停止这段程序了,所以你需要一个执行脚本的开关,你可以用外部文件引入的方法来实现,在while循环的时候,include开关变量即可。那么就可以这样实现:
  建立外部引入变量文件 switch.php 内容如下:
  <?php
  return 1;//1执行脚本 0退出执行脚本
  ?>
  改良脚本如下:
  <?php
  ignore_user_abort();//关闭浏览器后,继续执行php代码set_time_limit(0);//程序执行时间无限制
  $sleep_time = 5;//多长时间执行一次
  $switch = include 'switch.php';
  while($switch){
  $switch = include 'switch.php';
  $fp = fopen('test.txt','a+');
  fwrite($fp,"这是一个php博客:phpddt.com $switch \n");fclose($fp);
  sleep($sleep_time);
  }
  exit();
  ?>
  这个脚本只是测试可行,具体效率应该不高,对于lamp,你完全可以使用crontab 来实现。
  再补充一段小代码:
  ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
  set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去$interval=60*30;// 每隔半小时运行
  do{
  //这里是你要执行的代码
  sleep($interval);// 等待5分钟
  }while(true);
  关于PHP定时执行任务的实现就为大家介绍这么多,之后还有相关文章为大家分享,不要错过。
  PHP定时执行任务的3种方法详解_PHP
  PHP定时执行的三种方式实现
  1、windows 的计划任务
  2、linux的脚本程序
  3、让web浏览器定时刷新
  具体实现
  1、windows计划任务
  PHP很少在win服务器上跑,具体实现也不再深究,看网上实现的原理大概是写bat脚本,然后让window任务添加执行这个bat脚本。
  2、linux 的脚本实现
  这里主要使用到crontab这个命令,
  使用方式 :
  代码如下:
  crontab filecrontab [ -u user ] [ -u user ] { -l | -r | -e }
  说明 :
  crontab是用来让使用者在固定时间或固定间隔执行程式之用使用crontab写shell脚本,然后让PHP调用shell,这个是利用linux的特性,应该还不算PHP自身语言的特性3、PHP实现定时执行计划任务
  使用php让浏览器刷新需要解决几个问题
  PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设置max_execution_time时间(不推荐)如果客户端浏览器关闭,程序可能就被迫终止,解决办法:ignore_user_abort即使关闭页面依然正常执行如果程序一直执行很有可能会消耗大量的资源,解决办法使用sleep使用程序休眠一会,然后在执行PHP定时执行的代码:
  ';
  sleep($interval);// 等待5s
  }while(true);
  //方法2---sleep 定时执行
  require_once './curlClass.php';//引入文件$curl = new httpCurl();//实例化
  $stime = $curl->getmicrotime();
  for($i=0;$i<=10;$i++){
  echo '测试'.time().'
  ';
  sleep($interval);// 等待5s
  }
  ob_flush();
  flush();
  $etime = $curl->getmicrotime();
  echo '
  ';
  echo round(($etime-stime),4);//程序执行时间

上一篇:php用户注册信息验证正则表达式_PHP

下一篇:国外优秀开源PHP建站程序一览