Mac OS:Intl 扩展未加载。
Mac OS:Intl 扩展未加载。
- 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
文件。
我该如何解决这个问题?
我看到了很多关于这个问题的答案,但没有一个能帮到我,直到最后一个(当然了)。这是为了 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
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) 或从其安装位置(/usr/local/bin/Cellar/php....)将 Homebrew 的版本链接到您路径的一个目录中(例如 /usr/local/bin)。要执行此操作,请运行:
brew link --force php@7.3
如果您无法进行链接,通常是由于设置权限或系统完整性保护引起的。对于第一种情况,尝试sudo chown "$USER":admin /usr/local/bin/php
。
b) 或者,将/usr/local/opt/php@7.3
目录(opt-prefix)添加到您的$PATH变量中。例如,对于Bash:
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配置。
另一种快速启动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