まったり技術ブログ

Technology is power.

PHPBrewに"intl"拡張をインストール

動作環境

バージョン
macOS 10.12.6
PHPBrew 1.22.6
PHP 7.1.0

ことの始まり

CakePHP3を入れたのだが、起動ができない。
intlを有効にしないといけないらしい。

$ bin/cake server -p 8765

PHP Fatal error:  You must enable the intl extension to use CakePHP.
 in /Users/admin/PhpstormProjects/cake3app/config/requirements.php on line 31

Fatal error: You must enable the intl extension to use CakePHP.
 in /Users/admin/PhpstormProjects/cake3app/config/requirements.php on line 31

問題発生

// インストール有無の確認
$ phpbrew ext | grep intl
 [ ] intl

// 拡張intlをインストール
$ phpbrew ext install intl

//・・・

Error: Command failed: /usr/bin/make -C '/Users/admin/.phpbrew/build/php-7.1.0/ext/intl' 'all'  >> '/Users/admin/.phpbrew/build/php-7.1.0/ext/intl/build.log' 2>&1 returns:
The last 5 lines in the log file:
/usr/local/Cellar/icu4c/59.1/include/unicode/unistr.h:3180:7: error: delegating constructors are permitted only in C++11

      UnicodeString(Char16Ptr(buffer), buffLength, buffCapacity) {}

      ^~~~~~~~~~~~~

2 warnings and 3 errors generated.

make: *** [intl_convertcpp.lo] Error 1

エラー_(:3 」∠ )_

解決方法

下記の記事を参考にした。
Install the PHP INTL extension on a Mac

$ cd /Users/admin/.phpbrew/build/php-7.1.0/ext/intl/
$ vim Makefile
CXXFLAGS = -g -O2
↓に変更(33行目付近:"-std=c++11"を追記)
CXXFLAGS = -g -O2 -std=c++11

// ビルド
$ make
$ make install
Installing shared extensions:     /Users/admin/.phpbrew/php/php-7.1.0/lib/php/extensions/no-debug-non-zts-20160303/

// .soファイル生成の確認
$ ls -l /Users/admin/.phpbrew/php/php-7.1.0/lib/php/extensions/no-debug-non-zts-20160303/ | grep intl
-rwxr-xr-x  1 admin  staff   512764  9 19 01:16 intl.so

// "intl.ini"ファイルの作成と、1行記述
$ vim ~/.phpbrew/php/php-7.1.0/var/db/intl.ini
extension=intl.so

intlインストールの確認

intlが有効になっていることを確認

$ phpbrew ext | grep intl
 [*] intl         1.1.0

動作確認

CakePHP3も動作していることを確認できた。

$ bin/cake server -p 8765
Welcome to CakePHP v3.5.0 Console