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

标签 php macos php-extension pecl intl

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

Install PHP Internationalization extension (Intl) on XAMPP on Mac

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

然后这个错误发生了:

/private/tmp/pear/temp/intl/intl_error.h:24:10: fatal error: 'ext/standard/php_smart_str.h' file not found

include

     ^ 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 并将所有 header 从 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 并出现此错误:

Warning: PHP Startup: Unable to load dynamic library '/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): Symbol not found: _zval_used_for_init Referenced from: /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20151012/intl.so Expected in: flat namespace in /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20151012/intl.so in Unknown on line 0

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

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

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

最佳答案

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

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

总体思路是根据您自己的 PHP 源代码构建 intl 扩展。在开始之前确保您已经安装了 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,它不受支持。

使用(我将其解压缩到 ~/Downloads/文件夹中)提取 tar.gz 文件

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,它应该可以工作。

关于php - 在 Mac 上的 XAMPP 上安装 PHP 7.0 国际化扩展 (Intl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39012363/

相关文章:

php - Laravel/Blade 表单添加 'required' 来选择元素

excel - 使用范围公式时缺少下拉值

php - 将 Zval 转换为 char*

javascript - 播放数据库中的多个音频文件

Javascript JSON解析对象,一个对象属性未定义,不抛出任何错误

objective-c - 使用 Cocoa App 中嵌入的 AppleScript-ObjC 处理错误的最佳方法?

command-line-interface - 从命令行检查动态加载的 PHP 扩展

c++ - 如何在 PHP 扩展中实例化全局 C++ 类?

php - 散列 css 和 js 文件以打破缓存。慢吗?

java - Mac 上的硬件 UUID 是否适合用于许可