如何在 Mac OSX 上轻松切换 PHP 版本?

我想在 PHP 5.3到 PHP 7.0上测试我的应用程序。

如何安装这些版本以及如何通过运行一个小脚本来切换它们?

276603 次浏览

我找到了关于如何在 OSX 上安装和切换 php 版本的 这个非常好的教程

我可以换个版本

$ sphp 7.0 => PHP 7.0
$ sphp 7.3 => PHP 7.3
$ sphp 7.4 => PHP 7.4

这正是我想要的!

如果使用 自酿的安装 PHP,则可以很容易地在不同版本之间切换。假设你想让 php56指向5.6.17版本,你只需要:

brew switch php56 5.6.17

使用 brew

显示当前版本

$ php -v

换成不同的版本
(例如由5.5.x 更改为7.0最新版本) :

$ brew unlink php55
$ brew install php70

我认为断开和链接 php 版本是不够的,因为我们经常使用 php 与 apache (httpd) ,所以需要更新后切换 php 版本的 httpd.conf。

我已经在 httpd.conf中编写了用于禁用/启用 php_module的 shell 脚本,请看第46行到第54行的 https://github.com/dangquangthai/switch-php-version-on-mac-sierra/blob/master/switch-php#L46

跟着我的脚步走:

1)通过 brew 检查已安装的 php 版本,确保一切正常

> brew list | grep php
#output
php56
php56-intl
php56-mcrypt
php71
php71-intl
php71-mcrypt

2)运行脚本

> switch-php 71 # or switch-php 56
#output
PHP version [71] found
Switching from [php56] to [php71] ...
Unlink php56 ... [OK] and Link php71 ... [OK]
Updating Apache2.4 Configuration /usr/local/etc/httpd/httpd.conf ... [OK]
Restarting Apache2.4 ... [OK]
PHP 7.1.11 (cli) (built: Nov  3 2017 08:48:02) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

3)最后,当你收到以上信息时,在我的笔记本电脑里查看 httpd.conf:

vi /usr/local/etc/httpd/httpd.conf

在 LoadModule 行附近可以看到

LoadModule php7_module /usr/local/Cellar/php71/7.1.11_22/libexec/apache2/libphp7.so
#LoadModule php5_module /usr/local/Cellar/php56/5.6.32_8/libexec/apache2/libphp5.so

4)打开 httpd://localhost/info.php

希望能有帮助

如果安装了两个版本的 PHP,可以使用 linkunlinkbrew命令在不同版本之间切换。

例如,在 PHP 7.4和 PHP 7.3之间切换

brew unlink php@7.4
brew link php@7.3

PS: 这两个版本的 PHP 都已安装,以便这些命令能够正常工作。

示例: 让我们从 php 7.4切换到7.3

brew unlink php@7.4
brew install php@7.3
brew link php@7.3

如果你得到 Warning: php@7.3 is keg-only and must be linked with --force 然后试试:

brew link php@7.3 --force
brew link --overwrite php@7.3

对我来说非常有效: -)

如果您使用的是 自酿的,那么它允许安装多个版本的公式。 因此,

  1. brew unlink用于将公式的一个版本从使用中分离出来。
  2. brew link用于将公式的一个版本附加到使用中。

例如,如果您已经安装了 php 7.4和8.0,并且想要在它们之间切换,假设您当前使用的是7.4,那么可以这样做:

brew unlink php@7.4

brew link php@8.0

我喜欢的 换人的主意,因为我工作的不同版本的时候,所以你需要的是

   brew install brew-php-switcher

然后是 brew-php-switcher version

例如 brew-php-switcher 7.4

如何:

  • 查找已安装的 PHP 版本
  • 从默认的 PHP 包切换到版本化的包
% brew search php
brew-php-switcher   php-cs-fixer        php@7.3             phplint             phpstan             pup
php ✔               php-cs-fixer@2      php@7.4 ✔           phpmd               phpunit
php-code-sniffer    php@7.2             phpbrew             phpmyadmin          pcp


% brew unlink php
% brew link php@7.4

我更喜欢在可以轻松安装($ phpbrew install 8.1.3 +default)和切换(phpbrew switch 8.1.3)所使用的 php 版本的地方使用 phpbrew。

Https://github.com/phpbrew/phpbrew

如果您已经在本地系统上安装了最新版本的 php,并使用自制程序切换到旧版本,请运行以下命令。

这里,我们切换到7.4

brew unlink php
brew install php@7.4
brew link php@7.4

这是个老问题,但是要在2022年快速切换 PHP 版本仍然是一个困难。我使用 Laravel 贴身男仆和切换 PHP 版本需要重新安装的贴身男仆的工作。我基本上有两个自定义函数定义在我的。Zhsrc 文件,但我认为这也适用于 bash:


switchphp7() {
valet stop
brew unlink php@8.1
brew services stop php@8.1
brew link --force --overwrite php@7.4
brew services start php@7.4
composer global update
rm -f ~/.config/valet/valet.sock
valet install
valet start
}




switchphp8() {
valet stop
brew unlink php@7.4
brew services stop php@7.4
brew link --force --overwrite php@8.1
brew services start php@8.1
composer global update
rm -f ~/.config/valet/valet.sock
valet install
valet start
}


然后在命令行中运行它们:

switchphp8

但是,如果您使用 Valets 虚拟 SSL 证书,命令行将为您链接的每个 SSL 证书询问管理员帐户密码,如果您有大量的 SSL 证书,这可能会令人恼火。如果它一直问,那就不是 bug 了。如果你一直输入密码/使用触摸 ID,最终你会允许所有的错误。

删除所有包含“ php”的行: Nano ~/. zhrc

在那之后,它将会奏效: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

我的目的是在 MacOS 上安装 php@7.4.24的旧补丁,我是这样做的:

我发现修订的酿酒,其中包含旧的 PHP 补丁,我需要,并重置 git 到他们

存储库: https://github.com/Homebrew/homebrew-core/commit/3b342c146da0452d71d982324977567960da2979

git -C $(brew --repo)/Library/Taps/homebrew/homebrew-core reset --hard 3b09794


brew reinstall php@7.4

由于 OP 特别要求从“ PHP 5.3转换到 PHP 7.0”,因为官方对它们的支持已经结束了,所以很多内容已经被废弃和/或删除了——截至2022年12月。

因此,如果我们要切换版本和安装任何这些不支持的版本 brew install php@7.3,它将失败(问题及其答案在这里)。您将需要使用轻击 Shivammathur/php(赞扬负责这一点的开发人员) ,这可以用来安装不受支持的 PHP 版本。

brew tap shivammathur/php //need to do only once
brew install shivammathur/php/php@7.0 //or brew install php@7.4 depending on your choice
brew search php //optional, shows all the versions available if you want some other version
brew link php@7.0

从今以后,转变很简单:

brew unlink php@7.0
brew link php@5.6 //OP asked 5.3 but 5.6 is the lowest version supported by the tap

所有版本 < = php@7.4已被弃用,并从 brew 中删除,因为它们达到了 他们生命的终结。到2022年12月为止,只有官方的 支持的版本支持8.0和8.1。

这最终也会变得过时,因为更多的版本达到 EOL,但步骤应保持相同,只要水龙头仍在开发。

泽维尔的回答提供的链接 可作为很好的进一步阅读。