【PHP】异步请求实现方式
<?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\r\n"; $out .= "HOST: ".$host."\r\n"; if ($method == "POST") { $out .= "Content-Length:".strlen($query)."\r\n"; } $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "Connection: Close\r\n\r\n"; //$out .= "Cookie: ".$cookie."\r\n\r\n"; 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');
?>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通