CakePHP内置于Web服务器:你能指定使用的PHP二进制文件吗

weylhg0b  于 2023-04-21  发布在  PHP
关注(0)|答案(1)|浏览(136)

在CakePHP中有一个内置的Web服务器,可用于开发。
这可以从bin/cake server开始,然后它默认为http://localhost:8765上的应用程序提供服务
在我的例子中,我有一个旧的CakePHP 3.8.13应用程序。在我的MacBook上,全局php可执行文件是PHP版本8:

% php -v
PHP 8.0.27 (cli) (built: Jan 12 2023 15:36:37) ( NTS )

这是有问题的,因为CakePHP 3.8.13不是为在PHP 8上运行而设计的,它可以在PHP 7上运行。
在我的MacBook上,我在/usr/local/opt/中安装了PHP版本7.1,7.2,7.3和8.0。这些都是用brew安装的。所以如果我想执行PHP版本7.2,我可以这样做:

% /usr/local/opt/php@7.2/bin/php -v
PHP 7.2.34 (cli) (built: Jan 21 2023 06:18:05) ( NTS )

我的问题是如何使bin/cake server使用PHP 7.2之类的二进制文件,而不是全局安装的PHP 8版本?
我尝试了alias php=/usr/local/opt/php@7.2/bin/php,最初似乎可以工作,因为在随后执行php时,它使用了适当的版本:

% alias php=/usr/local/opt/php@7.2/bin/php
% php -v
PHP 7.2.34 (cli) (built: Jan 21 2023 06:18:05) ( NTS )

但是,如果我停止并重新启动内置的CakePHP Web服务器,它会在日志中显示以下内容:

% bin/cake server
built-in server is running in http://localhost:8765/
You can exit with `CTRL-C`
[Wed Apr 19 09:35:19 2023] PHP 8.0.27 Development Server (http://localhost:8765) started

请注意,这里使用的是PHP 8.0.27,这不是我想要的。

gdx19jrr

gdx19jrr1#

server命令通过PHP的system()调用创建一个新的shell,并且别名不会传播到子shell中。
从CakePHP 4.1.6开始,server命令识别PHP环境变量,这样你就可以做如下操作:

export PHP=/path/to/php ; bin/cake server

对于早期版本,您可以创建自己的CakePHP命令,使用环境变量,手动启动PHP内置服务器(/path/to/php -S localhost:8765 -t /path/to/webroot/),或者使用@Cbroe在评论中提到的Homebrew管理PHP版本。

相关问题