【Homebrew】请注意PHP的配置!~ 关于Homebrew/php的停用~

不是平常的PHP!

突然,我想检查一下PHP的位置。

$ which php
/usr/bin/php

这个是不是和我们安装的Homebrew不一样的地方?这个应该是Mac的默认版本吧?

由于我的开发环境中的Homebrew和Mac的默认版本都是7.1系列,所以我之前没有注意到。

因为这件事情让我有些担忧,我暂时中断了工作并决定核实一下详细情况。

检查环境变量

如果使用的是Homebrew的PHP,则应该可以通过which命令显示以下位置。至少在2018年2月的情况是这样的。

$ which php
/usr/local/bin/php

我检查了.bash_profile文件,看是否有为此进行了相应的设置。但是,看起来没有问题。

export PATH=$HOME/.nodebrew/current/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/bin:$HOME/.composer/vendor/bin
eval "$(rbenv init -)"

if [ -f ~/.bashrc ]; then
    ~/.bashrc
fi

确认图书馆

错误信息的内容 de

如果不是由于环境变量的原因,我决定直接运行Homebrew的php命令来进行确认。

$ /usr/local/cellar/php71/7.1.16/bin/php -v
$ /usr/local/cellar/php71/7.1.13_24/bin/php -v

这些命令导致了类似的错误消息。造成在Homebrew安装的PHP无法运行,而Mac的默认版本可以运行的原因,就是这个。

当时我原封不动地相信了错误消息的内容,认为是库的加载出了问题。

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-intl/intl.so' - dlopen(/usr/local/opt/php71-intl/intl.so, 9): Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.60.dylib
  Referenced from: /usr/local/opt/php71-intl/intl.so
  Reason: image not found in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-intl/intl.so' - dlopen(/usr/local/opt/php71-intl/intl.so, 9): Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.60.dylib
  Referenced from: /usr/local/opt/php71-intl/intl.so
  Reason: image not found in Unknown on line 0
PHP 7.1.13 (cli) (built: Jan  5 2018 15:31:15) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.16, Copyright (c) 1999-2018, by Zend Technologies

修改php.ini文件

当时我们判断无法加载动态库 ‘/usr/local/opt/php71-intl/intl.so’ 的错误信息,意味着无法正常加载该库。(后来证实是一个错误的判断。)

因此,我們將目錄配置到php.ini文件中,重新啟動了伺服器。

# 省略

extension_dir = "/usr/local/opt/php71-intl"

# 省略
$ sudo apachectl restart

在这里再次尝试了php命令,但是出现了与之前相同的错误消息。看来不行啊…

升级Homebrew

由于我无法想出解决策,我突然执行了Homebrew的升级程序。升级是一个与更新不同的命令。我之前一直都是不加思考地使用它的。

【Mac】升级Homebrew时所需的完整命令。

首先,使用过时的命令来检查需要升级的软件包。哎呀,PHP的情况怎么了?(带着 @ 符号,但是…)

$ brew outdated

# 省略

php@7.1 (7.1.13_24, 7.1.16) < 7.1.17

# 省略
$ brew upgrade

# 省略

进行php@7.1升级的过程中,我发现了这样的消息。

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.bash_profile
  echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.bash_profile

果然是环境变量设置错误了吗?在成功进行升级之后,按照消息的提示,注册并应用了环境变量。

$ echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.bash_profile
$ echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.bash_profile
$ source .bash_profile

然后我执行了PHP命令,但是……仍然没有效果。

真正的原因

冒险将错误消息直接复制到谷歌搜索中后,意外地发现有很多人面临相同的烦恼。最终,问题的原因是这样的。

从Homebrew公式的GitHub仓库中摘录。

Homebrew/php (deprecated)

These formulae were relating to PHP.

As announced on the 19th of January this tap was archived on 31st March 2018.

All formulae were migrated to Homebrew/homebrew-core or deleted.

Homebrew对Homebrew/php停止支持是导致问题的唯一原因。而且,还发现需要进行以下操作。

    • conf.dディレクトリ内のファイルを削除する。

 

    Homebrew/phpをuntap(リポジトリを削除)する。

在这里,我将把我所参考的网站的总结介绍一下。虽然在找到答案之前我一直东奔西跑,但解决方案非常简单。只需执行这两个命令即可。

$ rm /usr/local/etc/php/7.1/conf.d/*
$ brew untap homebrew/php
Untapping homebrew/php... (87 files, 2MB)
Untapped 0 formulae

为了以防万一,服务器也重新启动。

$ sudo apachectl restart

PHP命令成功地执行了!

$ php -v
PHP 7.1.17 (cli) (built: Apr 26 2018 22:04:27) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

密码也没有问题!

$ which php
/usr/local/opt/php@7.1/bin/php

PHP7.1和php@7.1有什么不同,对于细节部分我实际上不太清楚;嗯,不过,有了这个我就可以放心地进行工作了。

请参考以下网站:

如果不是遇到了这个网站,这个问题可能得不到解决。真的非常感谢。 (Zhè , bú huì . de .)

2018年4月,Mac OS Homebrew 的 PHP 相关公式已经更改,导致无法安装 PHP 71-* 系列。

海外无论如何都有相同的困扰。真希望我也能够阅读英文文档。下面的对话是在官方存储库的问题中找到的(已经被关闭了)。

无法加载动态库 ‘/usr/local/opt/php71-intl/intl.so’?

我通过参考以下网站,了解了关于最初的环境变量和库的确认。虽然没有直接解决问题,但我学到了很多关于在错误发生时进行确认工作流程的知识。

将Mac上的PHP更改为php7(通过HomeBrew安装PHP71)
【PHP】当添加的模块无法加载时,需要怀疑的要点

本次到此为止。

广告
将在 10 秒后关闭
bannerAds