猿问

如何在PHP中发出异步HTTP请求

如何在PHP中发出异步HTTP请求

PHP中是否有一种进行异步HTTP调用的方法?我不在乎你的反应,我只想做点什么file_get_contents(),但不要等到请求完成后才执行其余的代码。这对于启动应用程序中的“事件”或触发长进程非常有用。

有什么想法吗?


慕森王
浏览 1608回答 3
3回答

元芳怎么了

我以前接受的答案行不通。它仍在等待回应。不过,这确实有效,从如何在PHP中发出异步GET请求?function post_without_wait($url, $params){     foreach ($params as $key => &$val) {       if (is_array($val)) $val = implode(',', $val);         $post_params[] = $key.'='.urlencode($val);     }     $post_string = implode('&', $post_params);     $parts=parse_url($url);     $fp = fsockopen($parts['host'],         isset($parts['port'])?$parts['port']:80,         $errno, $errstr, 30);     $out = "POST ".$parts['path']." HTTP/1.1\r\n";     $out.= "Host: ".$parts['host']."\r\n";     $out.= "Content-Type: application/x-www-form-urlencoded\r\n";     $out.= "Content-Length: ".strlen($post_string)."\r\n";     $out.= "Connection: Close\r\n\r\n";     if (isset($post_string)) $out.= $post_string;     fwrite($fp, $out);     fclose($fp);}

九州编程

如果您控制要异步调用的目标(例如您自己的“long task.php”),则可以从该端关闭连接,两个脚本将并行运行。它的工作方式如下:php通过curl打开long task.php(这里没有魔法)php关闭连接并继续(魔术!)当连接关闭时,curl返回到Quick.php这两个任务同时进行。我试过了,效果很好。但是,除非您在进程之间创建一些通信方式,否则Quick.php将不知道有多长的task.php正在执行。在执行任何其他操作之前,先尝试使用long task.php中的代码。它将关闭连接,但仍然继续运行(并禁止任何输出):while(ob_get_level()) ob_end_clean();header('Connection: close');ignore_user_abort();ob_start(); echo('Connection Closed');$size = ob_get_length();header("Content-Length: $size");ob_end_flush();flush();代码是从PHP手册的用户提供的注释并有所改善。
随时随地看视频慕课网APP
我要回答