LoginSignup
1
1

More than 5 years have passed since last update.

Magento2.1のintl問題@CentOS7に対処する

Posted at

このエントリーはMagento Advent Calendar 2016の16日目です。

<= 15日目 Satisを使って自作Magentoエクステンションを管理する
=> 17日目 Google Cloud PlatformでMagento2 〜 RedisとCloud SQLまで

決済ページへのフォーム追加の手順を書こうかと思っておりましたが、2016年12月16日リリースのMagento2.1.3においても既知の「intl問題」が解決していなかったので対処方法を書きます。

※ちなみにintlは「Internationalization」の省略名らしい。つまりi18n。

intl問題とは

投入リソース世界最強!のオープンソースECソフトウェアであるMagento2ですが、残念なことにRedHat系Linuxでは日本語と韓国語利用で動作不良が判明しています。これは各種yumリポジトリで提供されているPHP拡張intlが利用するlibICUのバージョンが古く、日本語月名の省略形が含まれていないことが原因です。なお、libICUのバージョンが比較的新しいUbuntuでは発生しません。

Magento公式開発でも「MAGETWO-60828」として対応してくれていますが、2016年12月にリリースされた2.1.3においてもまだ解決していません。

動作不良の内容は「日本語入力内容が消える」「管理画面に入れなくなる」(2.1.2での内容)など様々で、動作不良対象はCentOS7系であればPHP5.6でもPHP7でも発生します。(調査内容はベリテワークスさんの記事も参照)

Ubuntuなら動くとはいえどAmazonLinuxをはじめRedhat系が使えないというのも困ったものですので、公式が対応するまでの凌ぎ方をこのエントリでは共有します。

libICUが古くてダメなのであれば用意する

ポイントは3点、
1. libICUとintlを自前でコンパイルする
2. PHP5.6を利用する
3. PHP7系を使わない
です。

PHP7系についてはpecl/intlが対応していないので以下の方法でコンパイルできません。ここでは無難にPHP5.6を使う方法を紹介しています。

動作確認環境

Magento 2.1.2, 2.1.3
CentOS 7.2
Apache 2.4.6
PHP 5.6.29(ius)
libICU 55.1

作業内容

~/
# libICU,intlのコンパイル

yum remove libicu*
wget http://download.icu-project.org/files/icu4c/55.1/icu4c-55_1-src.tgz
tar zxf icu4c-55_1-src.tgz
cd icu/source/
./configure
make
make install
pecl install pecl/intl

以下新規作成(PHP拡張読み込み)

/etc/php.d/intl.ini
extension=intl.so

そしてhttpd再起動。

intlの動作確認

intlの動作確認はベリテワークス西さん@hirokazu1225が作ってくれたシンプルなスクリプトで確認できます。

HirokazuNishi/check.php

まとめ

以上でintl問題は一応解決しますが、このままだとPHP7が使えませんので、pecl/intlとMAGETWO-60828のリリースをチェックしておきましょう。

参考

issues:「PHP message: PHP Fatal error: Uncaught TypeError: Argument 1 passed to iterator_to_array() must implement interface Traversable」
HirokazuNishi/check.php

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1