簡體   English   中英

如何在 Mac OSX 上輕松切換 PHP 版本?

[英]How can I easily switch between PHP versions on Mac OSX?

我想在 PHP 5.3 到 PHP 7.0 上測試我的應用程序。

我在哪里以及如何安裝這些版本以及如何通過運行一個小腳本來切換它們?

如果您安裝了兩個版本的 PHP,您可以使用linkunlink 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

如果你用homebrew安裝 PHP,你可以很容易地在版本之間切換。 假設您希望php56指向版本 5.6.17,您只需執行以下操作:

brew switch php56 5.6.17

我認為 unlink & link 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

我希望它有幫助

我喜歡切換台的想法,因為我目前正在使用不同的版本,所以你需要的是

   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
brew link --overwrite php@7.3

非常適合我:-)

如果您使用的是homebrew ,那么它允許安裝多個版本的公式。 因此,

  1. brew unlink用於從使用中分離公式版本。
  2. brew link用於將公式版本附加到使用中。

例如,如果您同時安裝了 php 7.4 和 8.0,並且假設您當前使用的是 7.4,並且想要在它們之間切換,那么可以這樣做:

brew unlink php@7.4

brew link php@8.0

刪除所有帶有“php”的行:nano ~/.zshrc

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

我更喜歡使用 phpbrew,您可以輕松安裝( $ phpbrew install 8.1.3 +default )和切換( phpbrew switch 8.1.3 )使用的 php 版本。

https://github.com/phpbrew/phpbrew

由於 OP 特別要求從“PHP 5.3 升級到 PHP 7.0”,因此自 2022 年 12 月起,由於對它們的官方支持結束,brew 中的許多內容已被棄用和/或刪除。

因此,如果我們要切換版本並安裝任何這些不受支持的版本brew install php@7.3 ,它將失敗(問題及其答案在這里)。 您需要使用 tap 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 月,官方支持的唯一版本是 brew 支持的 8.0 和 8.1。

隨着更多版本達到 EOL,這最終也會過時,但只要該水龍頭仍在開發中,步驟就應該保持不變。

Xaver 的回答提供的鏈接是一個很好的進一步閱讀。

如果您在本地系統上安裝了最新版本的 php 並使用 homebrew 切換到舊版本,運行以下命令,這里我們切換到 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 證書詢問管理員帳戶密碼,如果您有大量的證書,這可能會很煩人。 如果它一直詢問,這不是一個錯誤,如果您繼續輸入密碼/使用觸摸 ID,最終您將允許所有。

我的目的是將 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"' >> ~/.zshrc echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH "' >> ~/.zshrc

  • 然后你需要通過運行下面的命令來添加你的 PATH

    brew-php-switcher 7.4

不要忘記使用此命令更改您的環境 PATH:

echo 'export PATH="/usr/local/opt/php@8.1/bin:$PATH"' >> ~/.bash_profile

source ~/.bash_profile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM