Mac OS:未加载国际扩展

2022-08-31 00:34:07
  • macOS 莫哈韦 10.14.3
  • 7.1.23 菲律宾比索
  • 预购店 1.7.5.1

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

我添加到extension=php_intl.soetc/php.ini

当我尝试安装Prestashop时,我得到.Intl extension is not loaded

$ php -m |格雷普国际机场

当我这样做时,我得到:$ 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:使'失败'

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

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


我该如何解决这个问题?


答案 1

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

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

如果你没有使用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. 安装自制的 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. 链接自制的PHP

现在,要“在你的道路上”,有两个选择。php

a) 任何一个自制版本都必须从其安装位置(/usr/local/bin/Cellar/php....)链接到路径中的目录(例如,/usr/local/bin)。为此,请运行:

brew link --force php@7.3

如果无法链接,这通常是由设置的权限或系统完整性保护引起的。在第一种情况下,请尝试 。sudo chown "$USER":admin /usr/local/bin/php

b) 或者,将目录(选择前缀)添加到$PATH变量。例如,对于 Bash/usr/local/opt/php@7.3

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 安装。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"

自制权限

有些人认为,扼杀是个好主意。/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

答案 2

我已经看到很多关于这个问题的答案,任何人都帮助了我,但最后一个(当然)。这是供 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)

删除您下载的所有文件以及解压缩的文件夹。添加到 php.ini xampp/etc 文件夹行中的文件

extension="intl.so"

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


推荐