<?php namespace Index\Controller; use Core\Controller; class test extends Controller { public function test11() { sleep(5); file_put_contents( './123.log', "123\r\n" , FILE_APPEND ); } public function test12() { $url = 'http://127.0.0.1:1001/index/test/test11'; $res = self::asyncRequest($url); echo "我沒有等a站點返回值,我就執行了"; } /** * php異步請求 * * @param $host string 主機地址 * @param $path string 路徑 * @param $param array 請求參數 * @return string */ public static function asyncRequest($url,$post_data=array(),$cookie=array()) { $url_arr = parse_url($url); $port = isset($url_arr['port'])?$url_arr['port']:80; if($url_arr['scheme'] == 'https'){ $url_arr['host'] = 'ssl://'.$url_arr['host']; } $fp = fsockopen($url_arr['host'],$port,$errno,$errstr,30); if(!$fp) return false; $getPath = isset($url_arr['path'])?$url_arr['path']:'/index.php'; $getPath .= isset($url_arr['query'])?'?'.$url_arr['query']:''; $method = 'GET'; //默認get方式 if(!empty($post_data)) $method = 'POST'; $header = "$method $getPath HTTP/1.1\r\n"; $header .= "Host: ".$url_arr['host']."\r\n"; if(!empty($cookie)){ //傳遞cookie信息 $_cookie = strval(NULL); foreach($cookie AS $k=>$v){ $_cookie .= $k."=".$v.";"; } $cookie_str = "Cookie:".base64_encode($_cookie)."\r\n"; $header .= $cookie_str; } if(!empty($post_data)){ //傳遞post數據 $_post = array(); foreach($post_data AS $_k=>$_v){ $_post[] = $_k."=".urlencode($_v); } $_post = implode('&', $_post); $post_str = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8\r\n"; $post_str .= "Content-Length: ".strlen($_post)."\r\n"; //數據長度 $post_str .= "Connection:Close\r\n\r\n"; $post_str .= $_post; //傳遞post數據 $header .= $post_str; }else{ $header .= "Connection:Close\r\n\r\n"; } fwrite($fp, $header); usleep(1000); // 這一句也是關鍵,若是沒有這延時,可能在nginx服務器上就沒法執行成功 fclose($fp); return true; } }
轉 : https://www.cnblogs.com/xin-jun/p/10594625.htmlphp