[英]homebrew - upgrade php broke php 5.6 dependency
我使用自制軟件在我的本地主機上安裝了多個版本的 PHP:
exolnet/homebrew-deprecated
現在,當我最近將 php 升級到 7.3.12 時,它升級了 php@5.6 所需的依賴項,現在我收到此錯誤:
dyld: Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
Referenced from: /usr/local/Cellar/php@5.6/5.6.40/bin/./php
Reason: image not found
[1] 83775 abort ./php
當我導航到/usr/local/opt/openssl/lib/
我看到我現在已經安裝了升級的libcrypto.1.1.dylib
。
我試過brew upgrade
並重新安裝 php@5.6 但沒有任何樂趣。
有人有建議嗎? 我真的需要在我的本地主機上運行兩個版本的 php 才能繼續開發。
根據我的經驗,嘗試通過自制軟件管理多個 PHP 版本是絕對的 PITA,而且我認為我還沒有達到可以輕松並排使用兩個版本的地步(直到現在!)。 還支持擴展,稍后在本答案中提供了擴展的詳細信息。
也就是說, 我找到了一個指南,其中提供了一些有關如何使其工作的說明,並且它絕對有效:
鏈接指南在 Apache 中運行 PHP 的上下文中引用了此方法,因此如果這是您的用例,那對您來說也是一個不錯的小獎勵。
現在,因為僅僅在 StackOverflow 上發布鏈接作為答案還不是完成的事情,我已經按照下面的順序詳細介紹了您需要遵循的主要步驟。 Homebrew 在 Apple Silicon 硬件和 Intel 上使用不同的路徑,因為它當然可以,所以如果我錯過了任何路徑更改,請告訴我,以便我可以更新我的答案。
對於遵循本指南但尚未安裝先決條件的任何人,請確保您已安裝 Xcode 命令行工具和 Homebrew 並且是最新的。
如果你想檢查 Homebrew 是否有任何問題,你可以運行
brew doctor
確保您已安裝 OpenSSL 也絕不是一個壞主意,尤其是在 macOS Monterey 上重新開始時:
brew install openssl
那么,讓我們開始吧。
首先,更新所有內容然后升級:
brew update
brew upgrade
brew cleanup
這樣做的原因是:“這實際上會‘遷移’核心 PHP 包(這是唯一受支持的包),但是使用了一堆符號鏈接可能會導致問題,因此升級后,我們將刪除所有PHP 包,提供一個全新的開始”
完成后,檢查實際安裝的內容:
brew list | grep php
然后刪除您找到的任何內容,例如:
brew uninstall --force php56 php56-apcu php56-opcache php56-xdebug
brew uninstall --force php70 php70-apcu php70-opcache php70-xdebug
brew uninstall --force php71 php71-apcu php71-opcache php71-xdebug
brew uninstall --force php72 php72-apcu php72-opcache php72-xdebug
brew cleanup
仔細檢查沒有什么剩下的:
brew list | grep php
並清理所有舊的配置文件:
英特爾:
rm -Rf /usr/local/etc/php/*
蘋果硅:
rm -Rf /opt/homebrew/etc/php/*
如果安裝了exolnet/deprecated
tap,您需要先使用
brew untap exolnet/deprecated
如果你不這樣做,你會得到一些奇怪的沖突
然后我們將點擊一個不同的存儲庫。 這個存儲庫有許多預先構建的 PHP 版本,它們可能適合你,也可能不適合你,但是安裝應該快得多,因為我們不必從源代碼編譯。
brew tap shivammathur/php
然后,您可以安裝所需的任何 PHP 版本:
brew install shivammathur/php/php@7.0
brew install shivammathur/php/php@7.1
brew install shivammathur/php/php@7.2
brew install shivammathur/php/php@7.3
brew install shivammathur/php/php@7.4
brew install shivammathur/php/php@8.0
在撰寫本文時,此存儲庫有 5.6 到 8.1 版本可供安裝
php.ini
文件位於以下目錄中:
英特爾:
/usr/local/etc/php/7.0/php.ini
/usr/local/etc/php/7.1/php.ini
/usr/local/etc/php/7.2/php.ini
/usr/local/etc/php/7.3/php.ini
/usr/local/etc/php/7.4/php.ini
/usr/local/etc/php/8.0/php.ini
蘋果硅:
/opt/homebrew/etc/php/7.0/php.ini
/opt/homebrew/etc/php/7.1/php.ini
/opt/homebrew/etc/php/7.2/php.ini
/opt/homebrew/etc/php/7.3/php.ini
/opt/homebrew/etc/php/7.4/php.ini
/opt/homebrew/etc/php/8.0/php.ini
到達此處后,關閉並重新打開您打開的所有終端窗口,以避免出現奇怪的路徑問題。
現在,這些版本的安裝位置,但沒有聯系。 例如,要切換到 PHP 7.3,請運行以下命令:
brew unlink php && brew link --overwrite --force php@7.3
然后檢查我們有正確的版本:
php -v
如果我們想切換到 PHP 7.4:
brew unlink php && brew link --overwrite --force php@7.4
然后檢查我們有正確的版本:
php -v
如果你想切換PHP版本更快的方法, 檢查出sPHP腳本從rhukster
您可以通過運行來安裝它:
英特爾:
curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw/791fda77946ab2dbd053d7f27e9237aaf7392c4b/sphp.sh > /usr/local/bin/sphp
chmod +x /usr/local/bin/sphp
蘋果硅:
curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw/791fda77946ab2dbd053d7f27e9237aaf7392c4b/sphp.sh > /opt/homebrew/bin/sphp
chmod +x /opt/homebrew/bin/sphp
並使用以下命令執行它:
sphp 8.0
當然,像這樣的 YMMV,但這應該是一個很好的起點,實際上可以讓你到達你需要去的地方並消除一些麻煩。
我很高興你問。 對於更高版本, pecl 確實有效。 但是,例如,如果您想為 5.6 安裝 xdebug,pecl 會將其玩具扔出嬰兒車。
您可以點擊另一個存儲庫,專門用於擴展:
brew tap shivammathur/php
完成此操作后,就像運行一樣簡單:
brew install xdebug@5.6
brew install xdebug@8.1
可用擴展列表在上面的鏈接中有詳細說明。 我不會在這里包括它們,因為它是一個動態列表,很快就會過時,但它們中的大多數都支持 5.6 到 8.1
我自己遵循了這個過程,這是我在 macOS 上管理多個 PHP 版本的最簡單的方法。 在此過程中的任何時候都可以隨意運行brew doctor
和brew cleanup
,畢竟它不會受到傷害,實際上可能有助於調試您遇到的任何問題。 也就是說,我的環境絕對是一團糟,這在大約十分鍾內就整理好了。 對我來說,這個過程中最長的一步是更新 Homebrew 本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.