无法在MacosX上安装php Intl扩展

Sli*_*nTN 9 php terminal intl macos-high-sierra

我正在关注此链接以安装此PHP扩展,但我陷入了中间.
当我尝试运行此命令时,pecl install intl我收到以下消息:

Specify where ICU libraries and headers can be found [DEFAULT] :
Run Code Online (Sandbox Code Playgroud)

我不知道ICU库的位置.
如果我按Enter键我会收到此错误:

configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.
ERROR: `/private/tmp/pear/install/intl/configure --with-php-config=/usr/bin/php-config --with-icu-dir=DEFAULT' failed
Run Code Online (Sandbox Code Playgroud)

如何找到ICU库的正确路径?我正在使用PHP版本7.1的High Sierra和MAMP

Ced*_*ric 8

ICU 代表ICU - Unicode 的国际组件

用 brew 安装

brew update
brew search icu # returns 'icu4c'
brew install icu4c
Run Code Online (Sandbox Code Playgroud)

或者

用pecl安装

sudo pecl update-channels
sudo pecl install intl
Run Code Online (Sandbox Code Playgroud)

在 osx 上安装 intl 包

  • `sudo pecl install intl` .command 返回 `configure: error: Unable to detection ICU prefix or no failed。请验证 ICU 安装前缀并确保 icu-config 有效。错误:“/private/tmp/pear/install/intl/configure --with-php-config=/usr/local/bin/php-config --with-icu-dir=DEFAULT' 失败”` (3认同)
  • `php 7.3` 的 `sudo pecl install intl` 返回错误:`在 /private/tmp/pear/temp/intl/php_intl.h:34 包含的文件中:/private/tmp/pear/temp/intl/intl_error.h :24:10: 致命错误: 'ext/standard/php_smart_str.h' 文件未找到 #include <ext/standard/php_smart_str.h> ^~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ 生成 1 个错误。make: *** [php_intl.lo] 错误 1 ​​错误: `make' 失败` (3认同)

Céd*_*ric 5

编辑:在 php@5.6 中仔细查看后,它似乎已经使用“intl”进行了编译

php -i | grep intl
... '--enable-intl' ...
Run Code Online (Sandbox Code Playgroud)

所以我的答案通常对 php@5.6 没有用(但我猜在某些情况下可能有用)


今天我在尝试从 php56 切换到 php@5.6 时遇到了同样的问题。

经过大量挖掘后,这是解决方法。

确保全新安装 php@5.6 并使其处于当前版本

php -v
PHP 5.6.35 (cli) (built: Mar 31 2018 20:21:31)
Run Code Online (Sandbox Code Playgroud)

还要确保有 icu4c

brew update
brew install icu4c
Run Code Online (Sandbox Code Playgroud)

接下来我们手动安装编译intl

cd /usr/local/src/
wget https://pecl.php.net/get/intl-3.0.0.tg
tar zxf intl-3.0.0.tgz
cd intl-3.0.0/
phpize --clean
phpize
./configure    
Run Code Online (Sandbox Code Playgroud)

这是技巧,编辑 Makefile

vi Makefile
Run Code Online (Sandbox Code Playgroud)

修改该行CXXFLAGS如下

CXXFLAGS = -g -O2 -std=c++11
Run Code Online (Sandbox Code Playgroud)

和行CPPFLAGS如下

CPPFLAGS = -DHAVE_CONFIG_H -DU_USING_ICU_NAMESPACE=1
Run Code Online (Sandbox Code Playgroud)

接下来,保存并编译

make
make install
Run Code Online (Sandbox Code Playgroud)

Installing shared extensions:     /usr/local/Cellar/php@5.6/5.6.35/pecl/20131226/
Run Code Online (Sandbox Code Playgroud)

不要忘记添加extension="intl.so"到您的 php.ini

vi /usr/local/etc/php/5.6/php.ini
Run Code Online (Sandbox Code Playgroud)

(并重新启动apache)

资料来源: