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

时间:2016-08-18 07:33:39

标签: php macos php-extension pecl intl

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

Install PHP Internationalization extension (Intl) on XAMPP on Mac

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

然后发生了这个错误:

  

/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重命名为字符串......

重新运行pecl -no运气....更多错误......不知道.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并想出了这个错误:

  

警告: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行的未知中

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

在任何情况下,我都无法在XAMPP上的PHP 7.0.8中使用pecl来安装intl而没有make错误。没有关于此的文档,您认为如果弃用header.h文件,您将更新所有扩展名吗?

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

4 个答案:

答案 0 :(得分:1)

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

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

更新:关于Windows,XAMPP不默认它,但你可以在php.ini中添加模块(dll)并像魅力一样工作

答案 1 :(得分: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。让我知道它是否有用,我将更新这篇文章。不要将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,它应该可以工作。

答案 2 :(得分:0)

该错误表示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安装。

答案 3 :(得分:0)

如果您想尝试使用本机apache和php而不进行自制程序,请在此处查看我的问题:https://stackoverflow.com/a/55131868/3692846