我正在尝试使用Homebrew(运行Mac OS X High Sierra 10.13.3)安装php 7.2.11。在运行install命令之前,我清除了所有以前的Homebrew php目录,运行了医生等。运行brew install php
时,它说“ postinstall php没有成功完成”。然后我跑了
HOMEBREW_DEBUG=1 brew -v postinstall php
输出显示
An exception occurred within a child process:
Errno::EEXIST: File exists @ syserr_fail2_in -/usr/local/Cellar/php/7.2.11/pecl
命名文件实际上是符号链接:
pecl -> /usr/local/lib/php/pecl
但是/ usr / local / lib / php / pecl不存在。 (我并不一定要安装任何PECL扩展。)
谁能告诉我这个错误的含义,更重要的是,如何纠正它?
答案 0 :(得分:2)
使用homebrew
安装php@5.6时遇到了同样的问题。我一直坚持下去,现在放弃了这种方式来安装旧版本的php。下面大致是我所做的。
首先,我删除了悬挂的符号链接。作为备份,我将链接临时存储在其他位置。然后,我重新运行postinstall
。这次输出说
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
实际上,这是因为先前安装了更新版本的openssl v1.1。因此,在该目录中为/usr/local/opt/openssl/lib/libcrypto.1.1.0.dylib。然后我不得不降级openssl
:
brew uninstall --ignore-dependencies openssl@1.1
,并在this之后安装了较旧的版本。 (这不是一件容易的事,因为homebrew
不支持显式安装旧版本。)
然后我再次运行postinstall
,并且悬挂的符号链接再次出现。因此,我认为它是在postinstall
期间创建的。我猜想postinstall
计划首先创建符号链接,然后再创建实际文件。但是实际的创建被不兼容的依赖项打断了。删除它并重新运行postinstall
,我得到了
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
Referenced from: /usr/local/Cellar/php@5.6/5.6.40/bin/php
Reason: image not found
类似地,这是另一个不兼容的较旧的依赖关系。我失去了耐心,然后放弃求助于homebrew
。
实际上,您可以直接在this之后安装其他版本的php。