在 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/[email protected]/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/[email protected]/bin/php
,这最初似乎是有效的,因为随后执行php
它使用适当的版本:
% alias php=/usr/local/opt/[email protected]/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。
服务器命令通过 PHP 的
system()
调用创建一个新的 shell,并且别名不会传播到子 shell。
从 CakePHP 4.1.6 开始,服务器命令可以识别
PHP
环境变量,因此您可以执行以下操作:
export PHP=/path/to/php ; bin/cake server
对于早期版本,您可以创建自己的使用环境变量的 CakePHP 命令,手动启动 PHP 内置服务器(
/path/to/php -S localhost:8765 -t /path/to/webroot/
),或者使用例如 Homebrew 管理 PHP 版本,如@Cbroe 在评论。