이 글에서는 주로 PHP에서 비동기 요청을 보내는 방법을 공유합니다. 최근 직장에서 PHP 비동기 요청을 사용해야 하는 문제에 직면하여 인터넷에서 관련 정보를 검색했습니다. 많은 테스트와 수정 후에 일반적으로 실행 가능한 두 가지 솔루션이 요약되었습니다.
1. 솔루션 1: CURL을 사용하지만 CUROPT_TIMEOUT을 1로 설정해야 합니다.
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. 옵션 2: fsockopen을 사용하지만 HTTP 헤더 부분을 직접 입력해야 합니다.
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'));
관련 권장 사항:
JavaScript 구현 Ajax 비동기 요청 예제에 대한 자세한 설명
Native JavaScript가 Ajax 비동기 요청을 구현합니다
위 내용은 PHP는 비동기 요청 방법 전송을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!