在 Mac XAMPP 安装 PHP 7.0 国际化扩展 (Intl)
Install PHP 7.0 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 deprecated php.smart_str.h to php.smart_string.h
所以鉴于我对 C++ 的了解不足,我将 smart_string.h 复制到 smart_str.h 并将所有 headers 从 STRING 重命名为 string.....
re-ran pecl - 运气不好....更多错误......不知道 .c 文件在哪里并重新制作 php(对走那么远不太感兴趣)因为无论如何我正在使用 XAMPP 所以结束了那个选项。
我的 mac 上有 php 5.5,在 usr/local/bin 文件夹的深处
所以下一步是让 pecl 使用这些文件并生成一个 intl.so 文件....
是吗....我有 intl.so 文件,所以把它放在 XAMPP 的 'extensions' 文件夹中(供参考:/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
我想这与不同的版本有关?
无论如何,在 XAMPP 上的 PHP 7.0.8 中,我无法让 pecl 在没有 make 错误的情况下安装 intl。没有这方面的文档,你会认为如果你弃用 header.h 文件你会更新所有扩展?
在 PHP 中安装 intl.so 7 似乎不可能?
到目前为止,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)并且工作得很好
错误意味着 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
package/library。对于 macOS,通过以下方式安装:brew install libmemcached
.
经过大量研究,我终于能够解决这个问题。 Detailed steps here:
在开始之前,请检查 which php
路径是否已设置。应该是 /Applications/XAMPP/xamppfiles/bin/php
。如果不是,您可以通过 PATH="/Applications/XAMPP/xamppfiles/bin:${PATH}"
更改它。
总体思路是根据 PHP 源代码自行构建国际扩展。在开始之前,请确保您已经安装了 Xcode。另外,安装最新版本的 autoconf。这可能有帮助:
brew install autoconf
接下来从 php.net 下载您在 XAMPP 中使用的 PHP 版本。我正在使用 7.1.18。这个版本对我有用:php-7.1.31,我猜如果你按照这些步骤操作它可能也适用于 7.0 或 7.2。如果有或没有,请告诉我,我会更新这个 post。不要为 Magento 2.3.0 使用 PHP 7.3,它不受支持。
提取 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,它应该可以工作。
如果你想尝试不使用自制软件,使用本机 apache 和 php,看看我的回答:
我按照此处列出的说明进行操作:
运行 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 deprecated php.smart_str.h to php.smart_string.h
所以鉴于我对 C++ 的了解不足,我将 smart_string.h 复制到 smart_str.h 并将所有 headers 从 STRING 重命名为 string.....
re-ran pecl - 运气不好....更多错误......不知道 .c 文件在哪里并重新制作 php(对走那么远不太感兴趣)因为无论如何我正在使用 XAMPP 所以结束了那个选项。
我的 mac 上有 php 5.5,在 usr/local/bin 文件夹的深处 所以下一步是让 pecl 使用这些文件并生成一个 intl.so 文件....
是吗....我有 intl.so 文件,所以把它放在 XAMPP 的 'extensions' 文件夹中(供参考:/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
我想这与不同的版本有关?
无论如何,在 XAMPP 上的 PHP 7.0.8 中,我无法让 pecl 在没有 make 错误的情况下安装 intl。没有这方面的文档,你会认为如果你弃用 header.h 文件你会更新所有扩展?
在 PHP 中安装 intl.so 7 似乎不可能?
到目前为止,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)并且工作得很好
错误意味着 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
package/library。对于 macOS,通过以下方式安装:brew install libmemcached
.
经过大量研究,我终于能够解决这个问题。 Detailed steps here:
在开始之前,请检查 which php
路径是否已设置。应该是 /Applications/XAMPP/xamppfiles/bin/php
。如果不是,您可以通过 PATH="/Applications/XAMPP/xamppfiles/bin:${PATH}"
更改它。
总体思路是根据 PHP 源代码自行构建国际扩展。在开始之前,请确保您已经安装了 Xcode。另外,安装最新版本的 autoconf。这可能有帮助:
brew install autoconf
接下来从 php.net 下载您在 XAMPP 中使用的 PHP 版本。我正在使用 7.1.18。这个版本对我有用:php-7.1.31,我猜如果你按照这些步骤操作它可能也适用于 7.0 或 7.2。如果有或没有,请告诉我,我会更新这个 post。不要为 Magento 2.3.0 使用 PHP 7.3,它不受支持。
提取 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,它应该可以工作。
如果你想尝试不使用自制软件,使用本机 apache 和 php,看看我的回答: