<?php /** * 异步 执行程序 * @param string $path 异步url 地址 * @param array $postData 传递的参数 * @param string $method 请求方式 * @param string $url 请求地址 * @return bool */ function request_asynchronous($path, $method = "POST", $postData = array(), $url = ''){ set_time_limit(0); //设置不限执行时间 ignore_user_abort(true); //忽略客户端中断 if(empty($path)){ return false; } if(!$url){ $host = $_SERVER['HTTP_HOST']; }else{ $arr = parse_url($url); $host = $arr['host']; } $port = 443;//80 $host = $port == 443 ? 'ssl://'.$host : $host; $errNo = 0; $errStr = ''; $timeout = 120; $fp = ''; if(function_exists('fsockopen')) { $fp = fsockopen($host, $port, $errNo, $errStr, $timeout); } elseif(function_exists('pfsockopen')) { $fp = pfsockopen($host, $port, $errNo, $errStr, $timeout); } elseif(function_exists('stream_socket_client')) { $fp = stream_socket_client($host.':'.$port, $errNo, $errStr, $timeout); } if (!$fp) { return false; } stream_set_blocking($fp, 0); //开启非阻塞模式 stream_set_timeout($fp, 3); //设置超时时间(s) $date = []; if($postData) { //处理参数 foreach ($postData as $key => $value) { if(is_array($value)){ $date[$key] = serialize($value); }else{ $date[$key] = $value; } } } $query = $date ? http_build_query($date) : ''; if ($method == "GET") { $path .= "?".$query; } //http消息头 $out = $method." ".$path." HTTP/1.1 "; $out .= "HOST: ".$host." "; if ($method == "POST") { $out .= "Content-Length:".strlen($query)." "; } $out .= "Content-Type: application/x-www-form-urlencoded "; $out .= "Connection: Close "; //$out .= "Cookie: ".$cookie." "; if ($method == "POST") { $out .= $query; } fputs($fp, $out); //忽略执行结果 /*while (!feof($fp)) { echo fgets($fp, 128); }*/ usleep(5000); fclose($fp); return true; } //调用方式
request_asynchronous("/api/files/index",'GET');
?>