PHP内置测试服务器发起请求后冻结问题求助
问题根源
PHP内置测试服务器是单线程的——当你通过浏览器访问test.php时,服务器正忙着处理这个请求;此时test.php再发起HTTP请求到同一服务器,服务器根本腾不出手响应新请求,两边互相等待,最后就卡死了,不管请求的是PHP脚本还是静态TXT文件都会触发这个问题。
解决办法
1. 开启多进程模式启动内置服务器(PHP 7.4及以上可用)
PHP 7.4之后给内置服务器添加了多进程支持,启动时设置环境变量指定工作进程数即可:
PHP_CLI_SERVER_WORKERS=4 php -S localhost:8000
4是进程数量,可按需调整,多进程能同时处理多个请求,自然不会堵死。
2. 直接包含文件,不走HTTP请求
如果只是要执行其他PHP文件的逻辑、获取输出结果,没必要绕HTTP请求,直接用include配合输出缓冲区就能实现,效果和浏览器访问一致,还不会有阻塞问题:
// 替代HTTP请求index.php的写法 ob_start(); // 开启输出缓冲区 include 'index.php'; // 执行目标文件 $result = ob_get_clean(); // 捕获输出内容 echo $result;
3. 换用正式Web服务器
要是需要更贴近生产环境的测试,直接用Nginx+PHP-FPM或者Apache,这类服务器本身就是多进程/多线程架构,从根源上不会出现单线程阻塞的问题。
内容的提问来源于stack exchange,提问作者Ood
相关产品推荐
相关产品推荐

