我如何使用 PHP_CLI_SERVER_WORKERS 在内置开发服务器中使用 php 作为多线程工作?我曾尝试在 docker-composer.yaml 中添加环境变量(使用sail)。但它似乎不适用于php artisan serve
.
最初的问题是如果从 PHP 内置服务器运行,guzzle 无法向 localhost 发出请求。
我如何使用 PHP_CLI_SERVER_WORKERS 在内置开发服务器中使用 php 作为多线程工作?我曾尝试在 docker-composer.yaml 中添加环境变量(使用sail)。但它似乎不适用于php artisan serve
.
最初的问题是如果从 PHP 内置服务器运行,guzzle 无法向 localhost 发出请求。
不知道你是否明白这一点,但是在拉了很多头发之后..基本上你需要覆盖默认的工匠服务命令(这是命令的包装器php -S
):
sail artisan sail:publish
./docker/8.0/supervisord.conf
从改变
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
至
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
directory=/var/www/html/public
command=/usr/bin/php -d variables_order=EGPCS -S 0.0.0.0:80 /var/www/html/server.php
user=sail
environment=LARAVEL_SAIL="1",PHP_CLI_SERVER_WORKERS="10"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
重建 docker 的东西,sail build --no-cache
然后sail up
为了解释一些事情,我们需要将 supervisord 目录设置为根目录,否则将找不到像 css 和 js 这样的资产。然后我们按照ServeCommandartisan serve
以与命令相同的方式运行 server.php 文件。最后,我们将环境设置为具有 PHP_CLI_SERVER_WORKERS 变量并将其设置为 10。
虽然这种方法确实有效,但没有缓存站点资产(css/js 等),结果是页面加载缓慢。我设法使用原始工匠服务命令并在环境中设置 PHP_CLI_SERVER_WORKERS;但是该artisan server
命令只是忽略它,并且仅使用 1 个 PHP 进程的首字母缩写。
因此,经过更多挖掘后,该artisan serve
命令将遍历这些.env
值并将它们作为环境变量传递。但是,除非键是 APP_ENV 或 LARAVEL_SAIL,否则所有值都将为 false。
我已经制作了一个PR,也将其包含PHP_CLI_SERVER_WORKERS
为允许的变量 - 如果接受,这将允许您简单地将变量添加到您的.env
文件中,它应该会按预期工作。
您是否正在尝试创建 cli 命令?像,例如:
php工匠制作:模板
是这样的吗?如果是这种情况,您将需要使用 Artisan Console。这是官方文档的链接:https ://laravel.com/docs/8.x/artisan