在OSX High Sierra上安装intl PHP扩展

33

我该如何在自带osx high sierra的PHP 7.1.7中安装intl PHP扩展?

11个回答

61

我遇到了完全相同的问题。正如其他在这里发表评论的人指出的那样,High Sierra自带PHP 7.1,并且该PHP版本已经安装了intl。

在我的情况中,我按照Neodork评论中的部分步骤进行操作,链接在以下Valet+问题中:

"安装" PHP 7.1(因此它是从brew本身而不是由High Sierra安装的版本)

brew install php@7.1

将其升级到最新版本

brew upgrade php@7.1

Cellar中引用的符号链接:

brew link --overwrite --force php@7.1

更改我的bash配置文件中的PHP路径

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

重新加载你的bash配置文件(你可以关闭终端并再次打开)

. ~/.bash_profile

检查是否安装了Intl扩展

php -m | grep intl

注意:如果遇到如下警告:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-intl/intl.so'

那么你需要禁用之前的Intl扩展:

mv /usr/local/etc/php/7.1/conf.d/ext-intl.ini /usr/local/etc/php/7.1/conf.d/ext-intl.ini.disabled

希望对你有所帮助!


非常有帮助!谢谢! - Reverse Engineered
brew link --overwrite --force php@7.1 // 链接 /usr/local/Cellar/php@7.1/7.1.25... // 错误: 无法创建符号链接 sbin/php-fpm // /usr/local/sbin 不可写。 - Nathan J.B.
@NathanJ.Brauer 这个不错。似乎人们也遇到了这个问题。检查目录是否存在。如果 ls -la /usr/local/sbin/ 弹出了什么,请检查其权限。否则,您将不得不创建它并使用以下命令调整正确的权限: sudo mkdir /usr/local/sbin && sudo chown -R \whoami`:admin /usr/local/sbin` 该信息来源于此处:https://github.com/Homebrew/homebrew-php/issues/4527 - MadHatter365
1
@NathanJ.Brauer 我也遇到了同样的错误。不过我还是导出了新路径,打开了一个新终端,然后 which php 指向了 /usr/local/opt/php@7.1/bin/php。你可以试试看是否可行。 - DerpyNerd
2
对于像我一样的麦芽啤酒爱好者,上面提到的7.1应该更新为您所需的版本。目前,Brew无法找到7.1的引用,因为我需要的是7.4。在继续之前,请仔细检查您所需的版本,不要像我在过去的一个小时里那样疏忽大意... ;) - Spookytheboy
显示剩余2条评论

19

在从brew/phpbrew/core的整合后,默认安装了intl扩展。 我也遇到了intl扩展不起作用的问题。我的问题是命令行环境未使用安装的PHP版本,而是macOS系统的默认版本。

要启用安装的PHP版本,您需要执行以下操作:

brew install php@7.1 之后

您需要链接已安装的PHP版本: brew link php@7.1

然后,您需要打开一个新的终端窗口以使其生效。
接着,双重检查PHP二进制文件路径, which php

确保它是 /usr/local/bin/php 而不是 /usr/bin/php

然后检查intl扩展是否已启用, php -m | grep intl

对我而言这起作用了。


3
我尝试了很多解决方案,但这个对我有效,非常感谢。 - Dev_meno

11

打开终端,然后输入:

brew search intl

您应该能够看到 php71-intl,然后运行

brew install homebrew/php/php71-intl

然后重新启动Apache

sudo apachectl restart

然后输入:

php -i | grep intl

你应该能够看到类似这样的东西:

Additional .ini files parsed => /usr/local/etc/php/7.1/conf.d/ext-intl.ini
intl
intl.default_locale => no value => no value
intl.error_level => 0 => 0
intl.use_exceptions => 0 => 0

享受!


5
自2018年4月1日起,homebrew/php选项卡已被弃用。PHP及其扩展现在的交付方式是一团糟。有些扩展被捆绑在一起,而有些则没有。 - sebastien.b
10
否定 PHP tap 的人是一个彻头彻尾的傻瓜。 最新的 Sierra 更新和 brew 升级后出现了各种问题。如果你要废弃某个东西并采用其他替代品,请确认替代品是否可行...如果有人成功重新安装 intl,请回复一下。我尝试通过 pecl 安装,但只会产生更多的错误。 - Sam
4
请运行以下命令:先输入 $ brew uninstall php71 再输入 brew install php71 --with-pear。这将卸载 php71 并重新安装带有 PEAR 扩展的 php71 版本。 - miguelr
3
PHP已经移动到 homebrew/core ,配方已被重命名为 php@7.1。默认情况下包括 intl 扩展,无需手动加载或安装。 - webmaster777
3
它能够工作,但是我收到许多有关“PHP警告”的警告:PHP启动:无法加载动态库'/usr/local/opt/php71-intl/intl.so' - dlopen(/usr/local/opt/php71-intl/intl.so,9):库未加载:/usr/local/opt/icu4c/lib/libicui18n.60.dylib。你有什么想法吗? - Caio
显示剩余2条评论

7

我正在运行安装在OS High Sierra上的brew 1.6.2。目前,在brew 的软件包中无法使用intl扩展。

对我来说,@Mondy的解决方案很有效。运行后:

curl -s http://php-osx.liip.ch/install.sh | bash -s 7.1

这些软件包将会在 /usr/local/php5 或 /usr/local/php5-7.0.27-20180201-135220 中可用。

因此,在您的 /usr/local/etc/php/7.0/php.ini 文件中,您可以添加以下行以启用intl扩展:

[intl]
extension="/usr/local/php5/lib/php/extensions/no-debug-non-zts-20151012/intl.so"

在我的情况下,我更喜欢在 /usr/local/etc/php/7.0/conf.d/ 创建一个名为 'ext-intl.ini' 的文件,这样更有条理。

intl.so在哪里? - RichardMiracles
我能够在macOS High Sierra上安装它。但是一开始遇到了问题,出现了以下警告信息:PHP Warning: PHP Startup: intl: Unable to initialize module Module compiled with module API=20170718 PHP compiled with module API=20160303 These options need to match in Unknown on line 0 - Juliano Vargas
这对我有用!我使用了extension="/usr/local/php5-7.1.21-20180903-114446/lib/php/extensions/no-debug-non-zts-20160303/intl.so"。您将在安装的输出中找到确切的路径。 - ChrisB
这对我也有用,我只是直接从https://s3-eu-west-1.amazonaws.com/php-osx.liip.ch/install/5.6-10.10/frontenddev/5.6-10.10-frontenddev-5.6.36-20180703-123509.tar.bz2(对于我的php 5.6)下载所需的文件,并将“intl.so”复制到 xamppfiles/lib,并在 php.ini中更新相应的链接。 - Ibrahim.H

7

在Mac上尝试这个。

php -v
sudo port install php7*-intl

更多信息

您可以通过此页面找到端口包:https://www.macports.org/ports.php?by=name&substr=intl

您可以按照以下步骤安装porthttps://guide.macports.org/chunked/installing.macports.html

curl -O https://distfiles.macports.org/MacPorts/MacPorts-2.5.4.tar.bz2
tar xf MacPorts-2.5.4.tar.bz2
cd MacPorts-2.5.4/
./configure
make
sudo make install

并更改 ~/.bash_profile 文件

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

如果出现错误,请检查以下步骤:

检查端口

sudo port list
sudo port selfupdate
sudo port search --name --glob 'php*'
sudo port install php**-intl

这个页面有更多关于端口使用的信息:https://guide.macports.org/chunked/using.html


有趣的概念,但MacPorts项目是一团糟,甚至没有适用于macOS Catalina的工作版本,而这个版本已经过去了1年,安装在全世界几乎每台Mac电脑上。 - Sliq

4

除了L. Grolleau提到的(运行 brew install php71-intl ),还需将 int.so 路径粘贴到文件结尾处的/php.ini中:

extension=/usr/local/Cellar/php71-intl/7.1.11_20/intl.so

3
我找到了一个解决方案。
curl -s http://php-osx.liip.ch/install.sh | bash -s 7.1

然后,我将intl.so从安装目录复制到我的扩展目录中,该目录在我的php.ini文件中定义。

你能再详细一些吗?执行上述命令后,intl.so位于哪里? - Andreas Daoutis
php -i | grep extension - Daniel
实际上,当尝试执行sudo cp /usr/local/php5-7.1.13-20180201-134129/lib/php/extensions/no-debug-non-zts-20160303/intl.so /usr/lib/php/extensions/no-debug-non-zts-20160303/intl.so时,我遇到了“操作不允许”的错误 - 我将尝试切换php版本而不仅仅是扩展。更多信息请参考https://php-osx.liip.ch和https://websitebeaver.com/set-up-localhost-on-macos-high-sierra-apache-mysql-and-php-7-with-sslhttps - Daniel

1
我已经解决了这个问题。
首先,使用brew将您完全安装的任何php软件包卸载,然后运行 brew update brew doctor 命令。
现在使用 brew install php@7.1 (根据需要更改版本),intl已包含在所有php公式中。
要确认它是否工作,请运行 php -m | grep intl 。您将看到intl扩展被包含在内。如果没有,请检查php.ini文件并确保正在加载扩展程序。

你不需要检查php.ini,因为扩展已经内置了。 - webmaster777

0

使用以下命令移除文件:

rm /usr/local/etc/php/7.1/conf.d/ext-intl.ini

对我有用,感谢homebrew-core问题


0
我在Mac上使用brew安装了php7.2,并链接到该版本,但是在phpinfo()中无法看到版本号7.2。 即使使用brew卸载了最后一个版本(7.1),也是如此,因此intl扩展程序也是如此。 我发现我们必须修改httpd.conf文件(在我的情况下是在/ etc / apache2 / httpd.conf中),在该文件中,您可以找到
LoadModule php7_module libexec/apache2/libphp7.so

在那一行中,您必须使用您的新的php72路径进行覆盖:在我的情况下,它是

 LoadModule php7_module /usr/local/Cellar/php@7.2/7.2.31_1/lib/httpd/modules/libphp7.so

重启Apache,它就能正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接