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


Install PHP 7.0 Internationalization extension (Intl) on XAMPP on Mac

我按照下面的说明做了:

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

执行命令sudo pecl install inl从地窖

中选择正确的文件

那么这个错误发生了:

/private/tmp/pear/temp/intl/intl_error.h:24:10: fatal error:'ext/standard/php_smart_str.h'文件未找到

<标题>包括
     ^ 1 error generated. make: *** [php_intl.lo] Error 1 ERROR: `make' failed

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

因此,鉴于我对c++的了解不多,我将smart_string.h复制到smart_string.h,并将所有的头文件从STRING重命名为STRING .....

re- run pecl -no luck....更多的错误……不知道。c文件在哪里,也不需要重新制作php(我对这么做不感兴趣),因为我使用的是XAMPP,所以结束了那个选项。

我的mac上有php 5.5,在usr/local/bin文件夹的深处下一步是让perl使用这些文件并生成一个intl。所以文件…

做……我有内情。所以把它放在XAMPP的'extensions'文件夹中(参考:/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20151012)

运行php,出现如下错误:

警告:PHP启动:无法加载动态库'/应用程序/XAMPP/xamppfiles/lib/php/扩展/不-调试-非zt型- 20151012/intl.so 'dlopen(/应用程序/XAMPP/xamppfiles/lib/php/扩展/不-调试-非zt型- 20151012/intl.so,9): Symbol not found: _zval_used_for_init/应用程序/XAMPP/xamppfiles/lib/php/扩展/不-调试-非zt型- 20151012/intl.so期望在:平面命名空间中/应用程序/XAMPP/xamppfiles/lib/php/扩展/不-调试-非zt型- 20151012/intl.so

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

在任何情况下,我不能得到pecl安装intl没有一个错误在PHP 7.0.8 XAMPP。没有关于此的文档,您认为如果您弃用header.h文件,您会更新所有扩展名吗?

安装intl。所以在PHP 7中似乎不可能?

经过大量的研究,我终于能够解决这个问题。详细步骤如下:

开始前,检查which php路径是否设置。应该是/Applications/XAMPP/xamppfiles/bin/php。如果不是,你可以通过PATH="/Applications/XAMPP/xamppfiles/bin:${PATH}"来改变它。更多细节在这里

总体思路是自己从PHP源代码构建intl扩展。在开始之前,确保你已经安装了Xcode。同时,安装最新版本的autoconf。这可能有帮助:

brew install autoconf

接下来从php.net下载XAMPP中使用的PHP版本。我用的是7.1.18。这个版本为我工作:php-7.1.31,我猜如果你按照步骤,它可能适用于7.0或7.2。请让我知道是否有,我会更新这篇文章。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,它应该可以工作。

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

所以…我和MAMP一起跑。然后我决定安装apache 2.4和php 7和Mysql,没有堆栈和垃圾,随MAMP或XAMPP而来,一切都像魅力一样工作…所以如果你需要使用CakePHP或intl支持等…只需放弃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包/库。macOS: brew install libmemcached .

如果你想尝试不自制,与本地apache和php,看看我的答案在这里:https://stackoverflow.com/a/55131868/3692846