Mac OS:Intl扩展未加载

16
  • macOS Mojave 10.14.3
  • PHP 7.1.23
  • Prestashop 1.7.5.1
{{需要翻译的内容已经完成。}}

我尝试在本地服务器上安装PHP intl扩展,以便使用Prestashop。

我在etc/php.ini中添加了extension=php_intl.so

当我尝试安装Prestashop时,出现Intl extension is not loaded

$ php -m | grep intl

当我执行$ php -m | grep intl时,我得到:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20160303/php_intl.so' - d lopen(/usr/local/lib/php/pecl/20160303/php_intl.so, 9): image not found in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20160303/php_intl.so' - dlopen (/usr/local/lib/php/pecl/20160303/php_intl.so, 9): image not found in Unknown on line 0 intl

看起来文件php_intl.so不存在。

$ sudo pecl install intl

我还尝试了$ sudo pecl install intl,但是我得到:

make: *** [php_intl.lo] Error 1 ERROR:make' failed`

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

我也尝试了$ curl -s http://php-osx.liip.ch/install.sh | bash -s 7.1,但它没有创建intl.so文件。


我该如何解决这个问题?


https://dev59.com/e1YN5IYBdhLWcg3w7cJn#47968488 - Shobi
可能是在OSX High Sierra上安装intl PHP扩展的重复问题。 - Girish
你看到这个帖子了吗:https://dev59.com/CbHma4cB1Zd3GeqPGyXE - devseo
由于brew install php71-intl不再可用,而curl -s http://php-osx.liip.ch/install.sh | bash -s 7.1无法创建intl.so文件,因此这些解决方案都对我无效。 - Aliz
在执行 sudo pecl install intl 命令之前,你尝试过执行 brew install icu4c 吗? - Siad Ardroumli
@SiadArdroumli 确认了一下,使用 sudo pecl install intl 命令后问题仍未解决,因为仍然会出现以下错误信息:2 warnings and 1 error generated. make: *** [php_intl.lo] Error 1 ERROR: `make' failed。 - Volod
6个回答

33

Brew的PHP 7.1、7.2和7.3默认启用INTL。


很可能你只是使用了Mac OS捆绑版本的PHP。

运行

ls -l $(which php)

查找当前PHP二进制文件的位置以及它是否被符号链接到Brew安装中。例如,在我的情况下:

lrwxr-xr-x 1 27 May 23 16:30 /usr/local/bin/php -> ../Cellar/php/7.3.5/bin/php

这意味着我的php链接到了Brew的7.3.5版本。

如果您没有使用Brew的PHP,您将会看到类似以下的内容:

-rwxr-xr-x 1 11169664 Mar 21 07:09 /usr/bin/php

通过Brew安装PHP

查看您是否已经安装了PHP:

brew list | grep php

如果有任何输出,并且您的PHP版本存在,请执行步骤2,或使用步骤1更新到最新版本的PHP。

1. 安装Homebrew的PHP

brew install php@7.3

(或者 7.2、7.1)。如果 Brew 抱怨找不到公式,那么你可能已经处理了水龙头。你可以尝试提供完整路径到当前 php 公式,而不是使用 php@7.3

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/php.rb

如果还是不行,请检查您是否运行了最新版本的Homebrew brew --version

Homebrew 2.1.3-31-geaf2370
Homebrew/homebrew-core (git revision fd1ef; last commit 2019-05-25)
Homebrew/homebrew-cask (git revision 16d50; last commit 2019-05-26)

2. 链接Homebrew的PHP

现在,要让php“在您的路径中”,有两个选项。

a) 要么将Homebrew版的PHP从其安装位置(/usr/local/bin/Cellar/php....)链接到您的路径中的目录(例如/usr/local/bin)。为此,请运行:

brew link --force php@7.3
如果你无法链接,通常是由于设置权限或系统完整性保护引起的。在第一种情况下,请尝试sudo chown "$USER":admin /usr/local/bin/php。或者,在Bash中为例,请将/usr/local/opt/php@7.3目录(opt-prefix)添加到你的$PATH变量中。
echo 'export PATH="/usr/local/opt/php@7.3/bin:/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

3. 验证安装

ls -l $(which php)

应该显示php链接到Homebrew PHP安装的路径为/usr/local/bin/Cellar

php -v

应该显示最近安装的PHP版本。如果不是,请尝试重新启动终端。

php -i | grep -i intl

应该显示有关当前安装的intl的一些信息。

如果您正在使用Web服务器和/或PHP FPM,则现在是重启这些服务的时候。(如果您不知道如何做或无法弄清楚,请重启系统)。

可能出现的问题

如果仍然收到有关缺少扩展名(无法加载动态库等)的警告,则您的php.ini存在问题。

查找php ini的当前位置。

$ php -i | grep \.ini

Configuration File (php.ini) Path => /usr/local/etc/php/7.3
Loaded Configuration File => /usr/local/etc/php/7.3/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php/7.3/conf.d
Additional .ini files parsed => /usr/local/etc/php/7.3/conf.d/ext-opcache.ini
....

编辑 /usr/local/etc/php/7.3/php.ini 并找到有问题的扩展加载 (例如,extension="myext.so")。将那些找不到的注释掉。

Homebrew 权限

有人认为 chown /usr/local 是个好主意。

sudo chown -R "$USER":admin /usr/local

这将使得手动和通过 Homebrew 安装东西变得更加容易,但也会稍微降低一点安全性,因为非 root 进程现在也被允许在这里写入。

您的 Web 应用程序正在使用不同版本的 PHP。

确保它不是... 这取决于所使用的 Web 服务器的配置。第一步是在您的 Web 应用程序中输出当前的 PHP 配置,使用 <?php phpinfo();

这解释了 Apache 的步骤。

另一个快速获得 Web 服务器 + PHP 堆栈的方法是使用 Laravel Valet

安装额外扩展

要安装额外的 PHP 扩展,请使用 PEAR。

pear -V 应输出当前的 PEAR 和 PHP 版本。

PEAR Version: 1.10.9
PHP Version: 7.3.5
Zend Engine Version: 3.3.5

现在,例如安装PHP的yaml扩展程序:

pear install yaml

谢谢!请将以下内容添加到您的答案中。在安装brew php之后,我的问题是我还应该重写我的PATH变量以指向新的php。echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.bash_profile source ~/.bash_profile - Volod
@Volodymyr,确实有一种方法可以将PHP添加到您的路径中,另一种方法是brew link --force php@7.3。我会提一下它! - Tom
1
非常详细。谢谢。 - neobie
我已经花了几个小时来调试这个问题。什么都不起作用,也没有任何意义。尝试了多个堆栈答案,但都无济于事,直到我来到了这里。非常感谢您的答案,您是我的新英雄。非常详细,涵盖了所有方面! - dylzee
在执行“brew install php@7.3”步骤时,我遇到了“在brew link步骤中发生了意外错误...” 的问题。这个答案解决了这个问题:https://github.com/httpie/httpie/issues/645#issuecomment-456902997 - webhead

1
我看到了很多关于这个问题的答案,但最后一个(当然)帮了我。这是为了XAMPP的使用。
需要Xcode。 从php.net下载您在xampp中使用的php版本。 解压它并使用cd在终端中打开提取的文件夹。 切换到子文件夹ext/intl。 运行以下命令构建扩展:
/Applications/XAMPP/bin/phpize
./configure --enable-intl --with-php-config=/Applications/XAMPP/bin/php-config --with-icu-dir=/Applications/XAMPP/xamppfiles/
make
sudo make install (password required)

删除您下载的所有文件以及提取的文件夹。 在xampp / etc文件夹中的php.ini文件中添加行。
extension="intl.so"

原链接:https://community.apachefriends.org/viewtopic.php?p=255061&sid=27afc55649dfe6ea7b0824cb0bb8486b


0

在 Pecl 官方网站上(https://pecl.php.net/package/intl),明确表示 Intl 包已不再维护并已被取代。自 PHP 5.3.0 起,您无需使用 Pecl 安装 intl 扩展,它已与 PHP 捆绑在一起。

但是,在 Mac OS Mojave 上本地安装的 PHP 7.1.24 中缺少此扩展。

如果您想仅使用预安装的本机 Apache 和 PHP 而不使用 Homebrew,请执行以下操作:

从 php.net 下载 PHP 7.1,安装 XCode 命令行工具、ICU(http://site.icu-project.org/)、Autoconf,重新安装开发人员工具头文件,最后使用 phpize 安装 Intl 扩展。

重要提示:您必须禁用 SIP。


0

可能存在 brew 的问题

您可以尝试按照以下方式使用:

brew tap kyslik/homebrew-php

brew install kyslik/php/php71-intl


在macOS Mojave 10.14.3上已经没有brew php这样的东西了。相反,有一个没有intl.so扩展的“本地”PHP 7.1.23。你建议我的唯一输出是“错误:无效的公式:/usr/local/Homebrew/Library/Taps/kyslik/homebrew-php/Formula/php54-intl.rb php54-intl:“cxx11”不是一个被认可的标准 错误:无法敲击kyslik / php:敲击中的无效语法! - Volod

0

我尝试了所有方法,但在Mac上intl无法工作,所以请卸载xampp并安装mamp,它会正常工作。


0

自从 PHP 7 版本以后,不再需要加载扩展 php_intl.so,那么你需要做什么呢?编辑你的 php.ini 文件并删除或注释掉加载扩展 php_intl.so 的那一行,然后重新加载 Apache 并重试。


我尝试过这样做,但是Prestashop无法检测到intl。 - Aliz
你确定 Prestashop 使用的是你配置的相同 php.ini 文件吗?在 Prestashop 安装路径下创建一个 phpinfo() 并检查加载的信息,这张截图展示了 intl 已启用:https://i.postimg.cc/B4xNQ5VL/image.png - Rolige

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