0

我如何使用 PHP_CLI_SERVER_WORKERS 在内置开发服务器中使用 php 作为多线程工作?我曾尝试在 docker-composer.yaml 中添加环境变量(使用sail)。但它似乎不适用于php artisan serve.

最初的问题是如果从 PHP 内置服务器运行,guzzle 无法向 localhost 发出请求。

4

2 回答 2

1

不知道你是否明白这一点,但是在拉了很多头发之后..基本上你需要覆盖默认的工匠服务命令(这是命令的包装器php -S):

  • 发布sai docker文件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 进程的首字母缩写。

编辑2:

因此,经过更多挖掘后,该artisan serve命令将遍历这些.env值并将它们作为环境变量传递。但是,除非键是 APP_ENV 或 LARAVEL_SAIL,否则所有值都将为 false。

我已经制作了一个PR,也将其包含PHP_CLI_SERVER_WORKERS为允许的变量 - 如果接受,这将允许您简单地将变量添加到您的.env文件中,它应该会按预期工作。

于 2021-08-02T13:29:06.150 回答
0

您是否正在尝试创建 cli 命令?像,例如:

php工匠制作:模板

是这样的吗?如果是这种情况,您将需要使用 Artisan Console。这是官方文档的链接:https ://laravel.com/docs/8.x/artisan

于 2021-05-30T02:07:37.510 回答