同时多个php请求,第二个请求直到第一次完成才开始

Ken*_*and 7 php session php-7.2

我有一个长期运行的 php 7.2 脚本,它正在生成一个 zip 文件。我想使用循环 ajax 调用来检查构建 zip 文件的进度。第二个脚本似乎被锁定,并且在第一个脚本完成之前不会开始处理。

事实上,在第一个脚本完全完成之前,第二个脚本甚至不会在我的 index.php 路由脚本的第 1 行打印 error_log() 。

我的index.php路由器脚本的顶部:

<?
error_log('top of index '.$_SERVER['REQUEST_URI']);
Run Code Online (Sandbox Code Playgroud)

即使我只是请求静态图像资源也是如此。在长时间运行的脚本完全完成之前,第 1 行的 error_log() 甚至不会打印。

起初,我相信我遇到了此处描述的会话锁定,但他们提供的解决方案似乎不起作用(调用session_write_close()),我想知道是否还有其他事情发生,因为第二个脚本在第 1 行之前锁定为反对在我尝试开始会话时锁定。第二个脚本似乎根本没有开始。我想也许服务器在第 1 行之前自动启动了会话,但我检查了一下,我的服务器有 session.auto_start=0。

我需要设置一些服务器配置吗?

我错过了什么?我究竟做错了什么?

我使用内置的 PHP 服务器在本地主机(Mac)上运行它。

php -c /usr/local/etc/php/7.2/php.ini -S 127.0.0.1:8080 index.php
Run Code Online (Sandbox Code Playgroud)

Pet*_*ete 6

这是因为 PHP 服务器默认只使用一个进程,这会阻止它同时执行多个请求。

内置服务器从 PHP 7.4 开始支持多个 worker(在 fork() 可用的平台上)。看到这个提交:https : //github.com/php/php-src/commit/82effb3fc7bcab0efcc343b3e03355f5f2f663c9

要使用它,请在启动服务器之前添加 PHP_CLI_SERVER_WORKERS 环境变量。例如:

PHP_CLI_SERVER_WORKERS=10 php7.4 -S 127.0.0.1:7080 index.php
Run Code Online (Sandbox Code Playgroud)

如果您想使用此功能,我建议升级您的 PHP 7.2 安装。