在 Mac 上的 XAMPP 上安装 PHP 7.0 国际化扩展 (Intl)

Posted

技术标签:

【中文标题】在 Mac 上的 XAMPP 上安装 PHP 7.0 国际化扩展 (Intl)【英文标题】:Install PHP 7.0 Internationalization extension (Intl) on XAMPP on Mac 【发布时间】:2016-12-25 00:57:39 【问题描述】:

我按照此处列出的说明进行操作:

Install php Internationalization extension (Intl) on XAMPP on Mac

运行 sudo pecl install intl 从地窖中选择了正确的文件

然后发生了这个错误:

/private/tmp/pear/temp/intl/intl_error.h:24:10:致命错误: 'ext/standard/php_smart_str.h' 文件未找到

包括

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

没关系,做了一些研究,发现 PHP 7.0.8 已弃用 php.smart_str.h 为 php.smart_string.h

因此,鉴于我对 C++ 的了解很少,我将 smart_string.h 复制到 smart_str.h 并将所有标题从 STRING 重命名为 string.....

重新运行 pecl -没有运气......更多错误......不知道 .c 文件在哪里并重新制作 php(对走那么远并不真正感兴趣),因为无论如何我正在使用 XAMPP 所以结束了该选项。

我的 Mac 上有 php 5.5,位于 usr/local/bin 文件夹的深处 所以下一步是让 pecl 使用这些文件并生成一个 intl.so 文件....

是这样吗....我有 intl.so 文件,所以把它放在 XAMPP 的“扩展”文件夹中(供参考:/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non- zts-20151012)

运行 php 并出现此错误:

警告:PHP 启动:无法加载动态库 '/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20151012/intl.so' -dlopen(/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20151012/intl.so, 9):未找到符号:_zval_used_for_init 引用自: /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20151012/intl.so 预期在:平面命名空间在 /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20151012/intl.so 在第 0 行的未知中

我想这与不同的版本有关?

在任何情况下,我都无法让 pecl 在 XAMPP 上的 PHP 7.0.8 中安装 intl 而不会出现 make 错误。没有这方面的文档,您认为如果您弃用 header.h 文件,您会更新所有扩展?

在 PHP 7 中安装 intl.so 似乎不可能?

【问题讨论】:

【参考方案1】:

经过大量研究,我终于能够解决这个问题。 Detailed steps here:

开始之前,请检查which php 路径是否已设置。它应该是/Applications/XAMPP/xamppfiles/bin/php。如果没有,您可以通过PATH="/Applications/XAMPP/xamppfiles/bin:$PATH" 更改它。 more detail here

总体思路是自己从 PHP 源代码构建 intl-extension。在开始之前,请确保您已经安装了 Xcode。另外,安装最新版本的 autoconf。这可能会有所帮助:

brew install autoconf

接下来从 php.net 下载您在 XAMPP 中使用的 PHP 版本。我正在使用 7.1.18。这个版本对我有用:php-7.1.31,我猜如果你按照步骤操作它可能也适用于 7.0 或 7.2。如果有或没有,请告诉我,我会更新这篇文章。不要将 PHP 7.3 用于 Magento 2.3.0,它不受支持。

使用解压 tar.gz 文件(我将它解压到 ~/Downloads/ 文件夹中)

tar -xzvf php-7.1.31.tar.gz

cd 到解压后的文件夹

cd php-7.1.31

更改到子文件夹 ext/intl

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 

您现在可以删除所有下载的文件以及提取的文件夹。

打开 /Applications/XAMPP/xamppfiles/etc/php.ini ,添加extension=intl.so

使用 XAMPP GUI 重新启动您的 Apache,它应该可以工作了。

【讨论】:

【参考方案2】:

到目前为止,php 的扩展 intl.so 似乎与 php 捆绑在一起 并且应该用 php (intl --enabled) 编译。 XAMPP 不支持此功能(截至 2016 年 10 月),MAMP 支持。我不知道其他发行版。但是,如果您愿意重新编译 PHP 7,那么这样做并在编译期间启用它是值得的。

所以....我用 MAMP 跑步。然后我决定我会简单地安装 apache 2.4 和 php 7 和 mysql 没有堆栈和 MAMP 或 XAMPP 附带的垃圾,一切都像一个魅力......所以如果你需要使用 CakePHP 或国际支持等......只需删除 XAMPP/MAMP 并进行标准安装即可。我使用自制软件(MacOS),一切正常。

更新:对于 Windows,XAMPP 没有默认设置,但您可以在 php.ini 中添加模块 (dll) 并像魅力一样工作

【讨论】:

【参考方案3】:

该错误表示 XAMPP 没有使用 intl 编译 PHP。你可以试试:

pecl install intl

但可能效果不佳。

请参阅:PHP Bug #72879 Pecl install intl make error with PHP 7.0.8。


至于解决方法,尝试安装memcached 扩展而不是memcache,例如

pecl install memcached

注意:它还需要预先安装libmemcached 包/库。对于 macOS,请通过以下方式安装:brew install libmemcached

【讨论】:

【参考方案4】:

如果您想尝试不使用自制软件,使用原生 apache 和 php,请在此处查看我的回答:https://***.com/a/55131868/3692846

【讨论】:

以上是关于在 Mac 上的 XAMPP 上安装 PHP 7.0 国际化扩展 (Intl)的主要内容,如果未能解决你的问题,请参考以下文章

/Applications/XAMPP/xamppfiles/bin/php - Xampp Mac 上的 Laravel

Mac XAMPP开发服务器上的PHP APC问题

如何从 Windows 7 pc 访问 Mac Osx 上的 localhost XAMPP?

如何在 MAC OS X 10.7 Lion 上安装多个 XAMPP 版本或多个 PHP 版本

如何在 Mac 上的 XAMPP 上运行 PHP 文件

在 mac el capitan 上的 xampp 上的 xdebug