Mac OS:未加载国际扩展

Posted

技术标签:

【中文标题】Mac OS:未加载国际扩展【英文标题】:Mac OS: Intl extension is not loaded 【发布时间】:2019-08-13 12:57:13 【问题描述】: macOS Mojave 10.14.3 php 7.1.23 Prestashop 1.7.5.1

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

我将extension=php_intl.so 添加到etc/php.ini

当我尝试安装 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'失败`

$ 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 文件。


我该如何解决这个问题?

【问题讨论】:

***.com/a/47968488/2693543 Install intl PHP extension OSX High Sierra的可能重复 你看到这个帖子了吗:***.com/questions/54206286/… 这些解决方案都不适合我,因为brew install php71-intl 不再可用并且curl -s http://php-osx.liip.ch/install.sh | bash -s 7.1 不会创建intl.so 文件 您在sudo pecl install intl 之前尝试过brew install icu4c 吗? 【参考方案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

意味着我的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 抱怨找不到公式,那么您可能弄乱了水龙头。您可以尝试提供current php formula 的完整路径,而不是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 的版本必须从其安装位置(/usr/local/bin/Cellar/php... .) 到您路径中的目录(例如,/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 链接到/usr/local/bin/Cellar 中的Homebrew PHP 安装。

php -v

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

php -i | grep -i intl

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

如果您正在使用网络服务器和/或 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")。注释掉那些找不到的。

自制权限

Some argue chown /usr/local 是个好主意。

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

这将使在这里手动和通过 Homebrew 安装东西变得更加容易,但也不太安全,因为现在也允许非 root 进程在这里编写。

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

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

This explains steps for Apache.

另一种让网络服务器 + 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 @Volodymyr,这确实是让 PHP 进入你的路径的一个选项,另一个是 brew link --force php@7.3。不过我会提到它! 非常详细。谢谢。 我已经尝试了几个小时来调试这个问题。没有任何工作,没有任何意义。尝试了多个堆栈答案,这些答案都是空的,直到我降落在这里。非常感谢您的回答,您是我的新英雄。非常非常详细,涵盖所有基础! 在 brew install php@7.3 步骤中,我得到“在brew link 步骤中发生意外错误...”这个答案解决了这个问题:github.com/httpie/httpie/issues/645#issuecomment-456902997【参考方案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)

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

extension="intl.so"

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

【讨论】:

你救了我的命。谢谢...!【参考方案3】:

由于 php 7 不需要加载扩展名php_intl.so,你需要做什么?,编辑你的php.ini 并删除或注释加载扩展名php_intl.so 的行,然后重新加载你的 apache 和再试一次。

【讨论】:

我试图这样做,但 Prestashop 没有检测到 intl 并且您确定 prestashop 正在使用您配置的 php.ini 吗?在 prestashop 安装的同一路径中创建一个 phpinfo() 并检查加载的信息,此屏幕截图显示了如何intl 已启用:i.postimg.cc/B4xNQ5VL/image.png【参考方案4】:

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:点击中的语法无效!”【参考方案5】:

我尝试了所有方法,但 intl 在 mac 中不起作用,所以请卸载 xampp 并安装 mamp 它会起作用

【讨论】:

【参考方案6】:

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

但是,在 Mac OS Mojave 上本地安装 PHP 7.1.24 时缺少它。

如果您只想使用预装的原生 apache 和 php 而不是使用自制软件,请执行以下操作:

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

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

【讨论】:

以上是关于Mac OS:未加载国际扩展的主要内容,如果未能解决你的问题,请参考以下文章

使用应用程序加载器将 Mac OS X 二进制文件上传到 itunesconnect?

升级MAC OS到10.13, 10.14系统后UNITY工程无法加载资源的解决办法

Mac OS X常识集锦

PHP Mac OS X上的PHP系统加载

Mac OS 桌面音频主机应用程序无法加载某些 AVAudioUnit 插件

使用 Mac OS X 加载 rgl 包时出错