自制软件后安装php异常

时间:2018-11-09 01:45:31

标签: php homebrew

我正在尝试使用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扩展。)

谁能告诉我这个错误的含义,更重要的是,如何纠正它?

1 个答案:

答案 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。