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

Xav*_*ver 11 php macos

我想在PHP 5.3上测试我的应用程序,直到PHP 7.0.

在哪里以及如何安装版本以及如何通过运行小脚本来切换它们?

Gok*_*asa 138

如果您安装了两个版本的 PHP,则可以使用linkunlink brew命令在版本之间切换。

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

brew unlink php@7.4
brew link php@7.3
Run Code Online (Sandbox Code Playgroud)

PS:为了让这些命令可以工作,已经安装了两个版本的 PHP。

  • 嘿,戈克,这真的很有帮助。谢谢。 (4认同)
  • 如果(执行此操作后)您的 CLI 的 `php -v` 仍然是以前的 PHP 版本:请确保重新启动您的终端(或启动一个新终端) (2认同)

its*_*zad 34

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

brew unlink php@7.4
brew install php@7.3
brew link php@7.3
Run Code Online (Sandbox Code Playgroud)

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

brew link php@7.3 --force
Run Code Online (Sandbox Code Playgroud)


Yus*_*sef 22

我喜欢切换器的想法,因为我目前正在使用不同的版本,所以你需要的是

   brew install brew-php-switcher
Run Code Online (Sandbox Code Playgroud)

然后brew-php-switcher version

例如brew-php-switcher 7.4

  • 有用的包。我可以确认自 2023 年 1 月起,此功能可以在 5.6、7.3 和 7.4 之间切换。 (2认同)
  • 很酷,brew-php-switcher 仅支持 PHP 版本 `5.6`、`7.0`、`7.1`、`7.2`、`7.3`、`7.4` 和 `8.0`。就我个人而言,我在 MacOS 14 Sonoma 上执行 `brew unlink php` 然后 `brew install shivammathur/php/php@5.6` (2认同)

Xav*_*ver 21

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

我可以切换版本

$ sphp 54 => PHP 5.4
$ sphp 55 => PHP 5.5
$ sphp 56 => PHP 5.6
$ sphp 70 => PHP 7.0
Run Code Online (Sandbox Code Playgroud)

正是我想要的!

  • 该教程已[移至此处](https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions)。 (2认同)

kri*_*ris 17

运用 brew

显示当前版本

$ php -v
Run Code Online (Sandbox Code Playgroud)

更改为不同的版本
(例如,从5.5.x更改为版本7.0.latest):

$ brew unlink php55
$ brew install php70
Run Code Online (Sandbox Code Playgroud)

  • 提示:如果 home brew 不允许您建立新链接,请使用这些标志 `--force` `--overwrite` (3认同)

Shr*_*r26 16

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

在这里,我们切换到7.4

brew unlink php
brew install php@7.4
brew link php@7.4
Run Code Online (Sandbox Code Playgroud)


小智 10

删除 nano ~/.zshrc 中包含“php”的所有行

之后它将起作用:brew unlink php@7.4 &&brew link php@8.0


Mar*_*ell 9

如果您使用自制软件安装PHP ,则可以非常轻松地在版本之间切换.假设您想要php56指向版本5.6.17,您只需:

brew switch php56 5.6.17
Run Code Online (Sandbox Code Playgroud)

  • 错误:未知命令:开关 (7认同)

小智 9

我认为 unlink & link php 版本是不够的,因为我们经常使用 php 和 apache(httpd),所以需要在切换 php 版本后更新 httpd.conf。

我在里面写了php_module自动禁用/启用的 shell 脚本httpd.conf,看看第 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

3)最后,当您收到上述消息时,请httpd.conf在我的笔记本电脑中检查:

vi /usr/local/etc/httpd/httpd.conf
Run Code Online (Sandbox Code Playgroud)

你可以看到附近的 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
Run Code Online (Sandbox Code Playgroud)

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

我希望它有帮助


Sbo*_*nde 8

brew link --overwrite php@7.3
Run Code Online (Sandbox Code Playgroud)

非常适合我:-)


lee*_*ers 8

如何:

\n
    \n
  • 查找已安装的 PHP 版本
  • \n
  • 从默认 PHP 包切换到版本化包
  • \n
\n
% brew search php\nbrew-php-switcher   php-cs-fixer        php@7.3             phplint             phpstan             pup\nphp \xe2\x9c\x94               php-cs-fixer@2      php@7.4 \xe2\x9c\x94           phpmd               phpunit\nphp-code-sniffer    php@7.2             phpbrew             phpmyadmin          pcp\n\n% brew unlink php\n% brew link php@7.4\n
Run Code Online (Sandbox Code Playgroud)\n


Jon*_*n P 5

老问题,但在 2022 年要在 php 版本之间快速切换仍然是一个困难。我使用 Laravel valet,切换 PHP 版本需要重新安装 valet 才能工作。我基本上在 .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
}

Run Code Online (Sandbox Code Playgroud)

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

switchphp8
Run Code Online (Sandbox Code Playgroud)

这对我来说可靠,但是,如果您使用 Valets 虚拟 SSL 证书,命令行将要求您链接的每个 ssl 证书的管理员帐户密码,如果您有大量证书,这可能会很烦人。如果它一直询问,这不是一个错误,如果您继续输入密码/使用触摸 ID,最终您将允许所有。


joe*_*jpa 5

虽然OP特别要求从“PHP 5.3到PHP 7.0”切换,但值得注意的是,由于官方支持结束,brew中的很多内容已被弃用和/或删除。

因此,截至2024 年 1 月:所有版本 <= PHP 8 已被弃用并从 brew 中删除,因为它们已达到生命周期,请参阅php.net 上的官方不支持分支。例如,8.0 于 2023 年 11 月 26 日失去支持。官方列出的支持版本有 8.1(仅安全修复)、8.2 和 8.3。

因此,如果我们要切换版本并安装任何这些不受支持的版本,brew install php@7.3将会失败(请参阅“错误:php@7.3 已被禁用,因为它是版本化公式”的答案)。您需要使用 tap shivammathur/php(赞扬负责此的开发人员),它可用于安装不受支持的甚至较新版本的 PHP(未在brew 中正式安装)。

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
Run Code Online (Sandbox Code Playgroud)

从此以后的切换很简单:

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
Run Code Online (Sandbox Code Playgroud)

笔记: