404 Not Found

404 Not Found


nginx/0.8.53
首页 > 新闻系统 > 编程天地 > 文章正文

fscok实现异步调用PHP

2008-04-18 09:24:43 来源:中国自学编程网 作者:佚名
Web 服务器执行一个脚本,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。

      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.1\r\n";
        $header .= "Host: ". $url_array[’host’] . "\r\n "; //HTTP 1.1 Host域不能省略
        /*

9 7 3 1 2 3 4 4 8 :
404 Not Found

404 Not Found


nginx/0.8.53

精彩推荐
404 Not Found

404 Not Found


nginx/0.8.53
本类热门文章

论坛美图

404 Not Found

404 Not Found


nginx/0.8.53
404 Not Found

404 Not Found


nginx/0.8.53