Heim > Artikel > Backend-Entwicklung > PHP implementiert die Methode zum Senden einer asynchronen Anfrage
In diesem Artikel wird hauptsächlich die Methode zum Senden asynchroner Anfragen in PHP erläutert. In letzter Zeit bin ich bei der Arbeit häufig auf Probleme gestoßen, die die Verwendung asynchroner PHP-Anfragen erforderlich machen, und habe daher im Internet nach relevanten Informationen gesucht. Nach vielen Tests und Modifikationen wurden zwei allgemein durchführbare Lösungen zusammengefasst:
1. Lösung 1: CURL verwenden, aber CUROPT_TIMEOUT muss auf 1 gesetzt sein.
function _curl($url, $data=null, $timeout=0, $isProxy=false){ $curl = curl_init(); if($isProxy){ //是否设置代理 $proxy = "127.0.0.1"; //代理IP $proxyport = "8001"; //代理端口 curl_setopt($curl, CURLOPT_PROXY, $proxy.":".$proxyport); } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if(!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_HTTPHEADER, array( "cache-control: no-cache", "content-type: application/json",) ); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); if ($timeout > 0) { //超时时间秒 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); } $output = curl_exec($curl); $error = curl_errno($curl); curl_close($curl); if($error){ return false; } return $output; } _curl('http://localhost/index.php',null,1);
2. Option 2: Verwenden Sie fsockopen, aber Sie müssen den HTTP-Header-Teil selbst buchstabieren
function _fsockopen($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); //echo fread($fp,1024); usleep(1000); // 这一句也是关键,如果没有这延时,可能在nginx服务器上就无法执行成功 fclose($fp); return true; } _fsockopen('http://localhost/index.php'));
Verwandte Empfehlungen:
Detaillierte Erläuterung des Unterschieds zwischen synchronen und asynchronen Anforderungen
Natives JavaScript implementiert asynchrone Ajax-Anfragen
Das obige ist der detaillierte Inhalt vonPHP implementiert die Methode zum Senden einer asynchronen Anfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!