簡體   English   中英

自制軟件 - 升級 php 破壞了 php 5.6 依賴

[英]homebrew - upgrade php broke php 5.6 dependency

我使用自制軟件在我的本地主機上安裝了多個版本的 PHP:

  • 標准核心 php 包 (v7.3.12)
  • php 5.6 from 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 版本是絕對的 PI​​TA,而且我認為我還沒有達到可以輕松並排使用兩個版本的地步(直到現在!)。 還支持擴展,稍后在本答案中提供了擴展的詳細信息。

也就是說, 我找到了一個指南,其中提供了一些有關如何使其工作的說明,並且它絕對有效:

鏈接指南在 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

如果你不這樣做,你會得到一些奇怪的沖突

添加新的 Tap and Install

然后我們將點擊一個不同的存儲庫 這個存儲庫有許多預先構建的 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 doctorbrew cleanup ,畢竟它不會受到傷害,實際上可能有助於調試您遇到的任何問題。 也就是說,我的環境絕對是一團糟,這在大約十分鍾內就整理好了。 對我來說,這個過程中最長的一步是更新 Homebrew 本身。

暫無
暫無

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

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