php - Apache、PHP 5.6 或 7.0:未加载库:openssl/lib/libcrypto.1.0.0.dylib 使用 Homebrew
问题描述
我正在尝试在 macOS 10.15 Catalina 上的 Apache httpd.conf 配置文件中加载 PHP 5.6 或 PHP 7.0 模块。但是在终端中使用启动 Apache 服务器时我收到sudo apachectl start
以下错误:
httpd: Syntax error on line 187 of /private/etc/apache2/httpd.conf: Cannot load /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so into server: dlopen(/usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so, 10): Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib\n Referenced from: /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so\n Reason: image not found
由于 PHP 版本 5.6、7.0 和 7.1 已被弃用并从 Homebrew 中删除,按照本指南,我不得不使用旧的弃用水龙头并通过运行安装 PHP 5.6 和 7.0:
brew tap exolnet/homebrew-deprecated
brew install php@5.6
brew install php@7.0
为了获得完整的信息,我尝试了 macOS 附带的 Apache 和通过 Homebrew 安装的最新 Apache 2.4.43,但这应该没什么区别。
所以问题是,如何解决这些错误并使用 Homebrew 在 macOS 上运行 PHP 5.6 和 7.0?
解决方案
解决方案是安装旧版本的 openssl 库。更具体地说,PHP 5.6 和 php 7.0 需要 openssl 1.0.2,您可以通过 Homebrew 在终端中运行以下命令来安装它:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8b9d6d688f483a0f33fcfc93d433de501b9c3513/Formula/openssl.rb
brew switch openssl 1.0.2t
但是,在运行上述之后,当使用 PHP 5.6、php 7.0 或 php 7.1 时,可能会出现另一个“Library not loaded”错误。特别是这个:
httpd: Syntax error on line 183 of /usr/local/etc/httpd/httpd.conf: Cannot load /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so into server: dlopen(/usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so, 10): Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib\n Referenced from: /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so\n Reason: image not found
在这里,需要另一个较旧的库,在这种情况下为 icu4C。解决方案是运行以下命令:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
brew switch icu4c 64.2
切换到 PHP 7.2、PHP 7.3 或 PHP 7.4 的注意事项
由于 PHP 7.2、PHP 7.3 和 PHP 7.4 不能与上面提到的 icu4c 库的旧版本 64.3 一起使用,因此每当您需要切换到这些 PHP 版本时,例如,通过使用这个简单的 brew PHP 切换器脚本,您还拥有通过运行以下命令切换 icu4c 库的版本:
brew switch icu4c 67.1
资源
推荐阅读
- php - 如何使用 Audience Network 系统用户令牌
- python-3.x - django.utils.datastructures.MultiValueDictKeyError REST API 发布请求
- ios - XCode 不构建我的项目
- html - HTML 中的重叠元素
- angular - 来自单例/全局类的 ionic/angular html 模板
- c - 移动数组中的整个块
- java - 有人可以为我提供一些关于 Java 中 OpenLog 的指导吗?
- javascript - 在 Angular 5 (CLI) 中,如何将数据从 index.js 传递到组件?
- android - 程序类型已经存在:com.bumptech.glide.BitmapOptions
- windows - 启动文件夹已删除,但应用程序仍会自动启动