我使用自制软件在本地主机上安装了多个版本的 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
Run Code Online (Sandbox Code Playgroud)
当我导航到时,/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
Run Code Online (Sandbox Code Playgroud)
确保安装了 OpenSSL 也不是一个坏主意,特别是在 macOS Monterey 上重新开始时:
brew install openssl
Run Code Online (Sandbox Code Playgroud)
那么,让我们开始吧。
首先,更新所有内容,然后升级:
brew update
brew upgrade
brew cleanup
Run Code Online (Sandbox Code Playgroud)
原因是:“这实际上会‘迁移’核心 PHP 包(这是唯一受支持的包),但是使用了一堆符号链接,可能会导致问题出现,因此升级后,我们将删除所有PHP 软件包,提供新的开始”
完成后,检查实际安装的内容:
brew list | grep php
Run Code Online (Sandbox Code Playgroud)
然后删除您找到的所有内容,例如:
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
Run Code Online (Sandbox Code Playgroud)
仔细检查没有剩下什么:
brew list | grep php
Run Code Online (Sandbox Code Playgroud)
并清理所有旧的配置文件:
英特尔:
rm -Rf /usr/local/etc/php/*
Run Code Online (Sandbox Code Playgroud)
苹果芯片:
rm -Rf /opt/homebrew/etc/php/*
Run Code Online (Sandbox Code Playgroud)
如果exolnet/deprecated安装了水龙头,您需要先使用以下方法将其卸下
brew untap exolnet/deprecated
Run Code Online (Sandbox Code Playgroud)
如果你不这样做,你可能会遇到一些奇怪的冲突
然后我们将利用一个不同的存储库。该存储库预构建了许多版本的 PHP,它们可能适合您,也可能不适合您,但是安装应该要快得多,因为我们不必从源代码进行编译。
brew tap shivammathur/php
Run Code Online (Sandbox Code Playgroud)
然后您可以安装您需要的任何 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
Run Code Online (Sandbox Code Playgroud)
在撰写本文时,此存储库有可供安装的版本 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
Run Code Online (Sandbox Code Playgroud)
苹果芯片:
/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
Run Code Online (Sandbox Code Playgroud)
到达此处后,关闭并重新打开已打开的所有终端窗口,以避免出现奇怪的路径问题。
现在,这些版本已安装,但未链接。例如,要切换到 PHP 7.3,请运行以下命令:
brew unlink php && brew link --overwrite --force php@7.3
Run Code Online (Sandbox Code Playgroud)
然后检查我们是否有正确的版本:
php -v
Run Code Online (Sandbox Code Playgroud)
如果我们想切换到 PHP 7.4:
brew unlink php && brew link --overwrite --force php@7.4
Run Code Online (Sandbox Code Playgroud)
然后检查我们是否有正确的版本:
php -v
Run Code Online (Sandbox Code Playgroud)
如果您想要更快地切换 PHP 版本,请查看rhukster的sPHP 脚本
您可以通过运行以下命令来安装它:
英特尔:
curl -L https://raw.githubusercontent.com/rhukster/sphp.sh/main/sphp.sh > /usr/local/bin/sphp chmod +x /usr/local/bin/sphp
Run Code Online (Sandbox Code Playgroud)
苹果芯片:
curl -L https://raw.githubusercontent.com/rhukster/sphp.sh/main/sphp.sh > /opt/homebrew/bin/sphp
chmod +x /opt/homebrew/bin/sphp
Run Code Online (Sandbox Code Playgroud)
并使用以下命令执行它:
sphp 8.0
Run Code Online (Sandbox Code Playgroud)
当然,对于像这样的 YMMV 之类的事情,但这应该是一个很好的起点,并真正帮助你到达你需要的地方并消除一些头痛。
嗯,我很高兴你问了。对于更高版本,pecl 确实可以工作。然而,例如,如果您想安装 5.6 的 xdebug,pecl 就会把它的玩具从婴儿车里扔出来。
brew tap shivammathur/extensions
Run Code Online (Sandbox Code Playgroud)
完成此操作后,就像运行一样简单:
brew install xdebug@5.6
brew install xdebug@8.1
Run Code Online (Sandbox Code Playgroud)
上面的链接详细介绍了可用扩展的列表。我不会将它们包含在这里,因为它是一个动态列表,很快就会过时,但它们中的大多数支持 5.6 到 8.1
我自己遵循了这个过程,这是我尚未找到的在 macOS 上管理多个 PHP 版本的最简单方法。请随意运行brew doctor,brew cleanup在此过程中的任何时候,它毕竟不会造成伤害,而且实际上可能有助于调试您遇到的任何问题。也就是说,我的环境绝对是一团糟,大约十分钟就收拾好了。对我来说,这个过程中最长的一步是更新 Homebrew 本身。
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |