我想在 PHP 5.3 到 PHP 7.0 上测试我的应用程序。
在哪里以及如何安装版本,以及如何通过运行小脚本来切换它们?
如果同时安装了两个版本的 PHP,则可以使用 link
和 unlink
brew
命令在版本之间切换。
例如,在 PHP 7.4 和 PHP 7.3 之间切换
brew unlink php@7.4
brew link php@7.3
PS:已经安装了两个版本的PHP才能使这些命令正常工作。
我找到了这个非常好的教程,介绍如何在OSX上安装和切换php版本。
我可以像这样切换版本
$ sphp 7.0 => PHP 7.0
$ sphp 7.3 => PHP 7.3
$ sphp 7.4 => PHP 7.4
正是我想要的!
示例:让我们从 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
显示当前版本
$ php -v
更改为其他版本
(例如,从 5.5.x 更改为版本 7.0.latest):
$ brew unlink php55
$ brew install php70
切换器的想法,因为我目前正在使用不同的版本,所以你需要的是
brew install brew-php-switcher
然后brew-php-switcher version
例如brew-php-switcher 7.4
如果您在本地系统上安装了最新版本的 php 并使用自制软件,然后切换到旧版本,请运行以下命令。
在这里,我们将切换到 7.4
brew unlink php
brew install php@7.4
brew link php@7.4
我认为取消链接和链接 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 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,你可以非常轻松地在版本之间切换。假设您希望php56
指向版本 5.6.17,您只需执行以下操作:
brew switch php56 5.6.17
删除所有带有"php"的行:纳米 ~/.zshrc
之后它将工作:brew unlink php@7.4 && brew link php@8.0
brew link --overwrite php@7.3
非常适合我:-)
如何:
- 查找已安装的 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
使用的是自制软件,那么它允许安装多个版本的公式。因此
-
brew unlink
用于将公式版本与用法分离。 -
brew link
用于将公式的一个版本附加到使用情况。
例如,如果您同时安装了 PHP 7.4 和 8.0,并且假设您当前使用的是 7.4,则希望在它们之间切换,则可以按以下方式完成:
brew unlink php@7.4
brew link php@8.0
老问题,但在 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
这对我来说很可靠,但是,如果您使用 Valet 虚拟 SSL 证书,命令行将要求您链接的每个 SSL 证书输入管理员帐户密码,如果您有大量证书,这可能会很烦人。如果它不断询问,这不是一个错误,如果您继续输入密码/使用触摸ID,最终您将允许所有错误。
我更喜欢使用phpbrew,在那里你可以很容易地安装($ phpbrew install 8.1.3 +default
)和切换(phpbrew switch 8.1.3
)使用的php版本。
https://github.com/phpbrew/phpbrew
不要忘记使用以下命令更改环境 PATH:
echo 'export PATH="/usr/local/opt/php@8.1/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
由于 OP 特别要求从"PHP 5.3 切换到 PHP 7.0",由于官方支持结束,很多内容已被弃用和/或删除 - 截至 2023 年 8 月。
所有版本 <= php@7.4 都已弃用并从 brew 中删除,因为它们已达到生命周期的终点,请参阅 php.net 的官方不受支持的分支。例如,7.4 在 2022 年 11 月 28 日失去了支持。截至 2023 年 8 月,列出的官方支持版本有 8.0(仅限安全修复)、8.1、8.2 - brew 支持。
因此,如果我们要切换版本并安装任何这些不受支持的版本,brew install php@7.3
将失败(请参阅"错误:php@7.3 已被禁用,因为它是版本控制公式"的答案)。你需要使用tapshivammathur/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
随着更多版本达到 EOL,这些最终也会过时,但只要该水龙头仍在开发中,步骤就应该保持不变。
Xaver的回答提供的文章"macOS 13.0 Ventura Apache Setup:多个PHP版本"(getgrav.org)提供了更多可能有用的次要信息。请参阅其"PHP 安装"部分。
如果需要定期切换,我赞同Yuseferi使用Brew PHP Switcher的建议。在过去的几个月里,我一直在使用它。
如果你不需要玩 apache,那么有一个非常简单的方法,只需将其添加到你的 ~/.bash_profile 或 ~/.zshrc 中(取决于你的终端)
function php-toggle() {
currentVersion=$(php -v | tail -r | tail -n 1 | cut -d " " -f 2 | cut -c 1-3)
switchTo='7.4'
[[ $currentVersion == '7.4' ]] && switchTo='8.1'
brew unlink php@"$currentVersion"
brew services stop php@"$currentVersion"
brew link php@"$switchTo"
brew services start php@"$switchTo"
exportString="export PATH='"/opt/homebrew/opt/php@${switchTo}/bin:'$PATH'""
echo $exportString > ~/.php_version
source ~/.php_version
}
source ~/.php_version
打开新终端并运行php-toggle
。
我的目的是将 php@7.4.24 的旧补丁安装到 MacOS,我这样做了:
我找到了brew的修订版,其中包含我需要的旧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
-
首先安装或重新安装所需的版本
brew 重新安装 php@7.4
-
其次,您需要切换到所需的版本
echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"'>> ~/.zshrcecho 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"'>> ~/.zshrc
-
然后,您需要通过运行以下命令来添加路径
brew-php-switcher 7.4