fscok实现异步调用PHP


Web 服务器执行一个脚本,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。

  而有的时候,我们更本不关心这些耗时的脚本的执行结果,但却还要等他执行完返回,才能继续下一步。 

  那么有没有什么办法,只是简单的触发调用这些耗时的脚本然后就继续下一步,让这些耗时的脚本在服务端慢慢执行?

  接下来,我将使用fscokopen来实现这一功能。

  PHP是支持socket编程的,就是fsockopen, 在以前做CMS的时候,我也曾经用过它做过smtp发信。

  fscokopen返回一个到远程主机连接的句柄。你可以像使用fopen返回的句柄一样,对她进行写fwrite,读取fgets, fread等操作。

  我们的异步PHP,主要想要的效果就是,触发一个PHP脚本,然后立即返回,留它在服务器端慢慢执行。前面我也写过一篇文章讨论过这个问题。

  那么,我们就可以使用fsockopen连接到本地服务器,触发脚本执行,然后立即返回,不等待脚本执行完成。

  function triggerRequest($url, $post_data = array(), $cookie = array())...{
    $method = "GET"; //可以通过POST或者GET传递一些参数给要触发的脚本
    $url_array = parse_url($url); //获取URL信息,以便平凑HTTP HEADER
    $port = isset($url_array['port'])? $url_array['port'] : 80;
   
    $fp = fsockopen($url_array['host'], $port, $errno, $errstr, 30);
    if (!$fp) ...{
        return FALSE;
    }
    $getPath = $url_array['path'] ."?". $url_array['query'];
    if(!empty($post_data))...{
        $method = "POST";
    }
    $header = $method . " " . $getPath;
    $header .= " HTTP/1.1rn";
    $header .= "Host: ". $url_array['host'] . "rn "; //HTTP 1.1 Host域不能省略
    /**//*以下头信息域可以省略
    $header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13 rn";
    $header .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,q=0.5 rn";
    $header .= "Accept-Language: en-us,en;q=0.5 ";
    $header .= "Accept-Encoding: gzip,deflatern";
     */
  
    $header .= "Connection:Closern";
    if(!empty($cookie))...{
         fscok实现异步调用PHP - 站长学院

fscok实现异步调用PHP

2008-12-25 14:48:00查看学习心得
{GetProperty(Content)}
« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3