Linux Ubuntu 16.04上のPHP 7でIntl Extensionを更新する

プログラマーは2つのタイプに分けられます。保守派。新しいバージョンへの移行は、別の惑星への逃避と同等です(Windows XPからこれを読んだ場合、おめでとうございます)。 そして、ヴィクトル・ツォイは、心と目を変える必要があり、すべてのこと、すべてをできるだけ早く更新します。 2番目のタイプで、Ubuntuの最新のLTSバージョンで既に最新のPHPバージョンを使用しているが、Intl拡張モジュールが古いバージョンのICUライブラリを使用しいるという事実があなたに安らぎを与えない場合、またはAvatarからの写真が気に入った場合-猫へようこそ! (これ以上写真はありません。)



アバター








さて、これはなぜですか?



各リリースのICUライブラリは、さまざまな言語の音訳標準のサポートを追加し、新しい機能と機能を追加し、バグを修正します。 PHPがIntl拡張モジュールのICUを定期的に更新する理由はまだ不明です。 したがって、すべてを自分の手で取り扱わなければなりません。



ソリューションを検索する



Googleで簡単に検索しても、明確な解決策は得られませんでした。 詳細も。 ICU Intlのバージョンが使用しているドラム上のパフェのプログラマーです。 しかし、私たちのものではありません! インターネットの英語圏を検索することを切望しており、偶然、ロシアのブロガーSergei Stoyanovの記録に出会い、Ubuntu 14.04のPHP 5でICUを更新するプロセスを説明しました。 PHP 7では、プロセスは非常に異なりますが、アクションの一般的なシーケンスは同じままです。deleteIntl; ICUの新しいバージョンを収集します。 ICUを探すために鼻を突いてIntlをインストールします。 PHPでIntlを有効にします。 シャンパンを開けて この記事へのコメントも大いに役立ちました(特に、アントンミニンと彼のシェルスクリプトによるコメント)。



ICUバージョン



ICUの最新バージョンは、 公式Webサイトで確認できます 。 現在(2018年2月)、最新リリースは60.2です。



php7.0-intlが使用するICUのバージョンを確認するには、ターミナルに書き込みます
php -i
      
      



インストールされているモジュールのリストまでスクロールします。 「intl」というタイトルのセクションを見つけます。 私はそこにいました:

国際化サポート=>有効

バージョン=> 1.1.0

ICUバージョン=> 55.1

ICUデータバージョン=> 55.1

簡単に言えば、氷ではなく、バージョン55.1は2015年前半にリリースされ、それ以降5回更新することに成功しました。 あなたは何かをする必要があります!



解決策



  1. Intl拡張機能のフルネームを確認します(PHP 7の場合、通常はphp7.0-intlです):
     sudo dpkg --get-selections | grep -v deinstall | grep php
          
          



  2. Intl拡張機能を削除します。
     sudo apt-get remove php7.0-intl
          
          



  3. phpizeをインストールします。
     sudo apt install php7.0-dev
          
          



  4. gitをインストールします(インストールされていない場合):
     sudo apt install git
          
          



  5. icu-install.shをインストールします(元のスクリプトには2つのエラーがあったため、ここではフォークを使用します)。
     git -C /tmp clone https://gist.github.com/siffash/76676186de0ffc6eb6cbf89abc7a5e2f icu-install
          
          



  6. スクリプトを実行します。
     sudo chmod +x /tmp/icu-install/icu-install.sh
          
          



  7. 利用可能なICUバージョンを確認します。
     sudo /tmp/icu-install/icu-install.sh versions
          
          



  8. 最後の(60.2)を選択して、インストールを実行します。
     sudo /tmp/icu-install/icu-install.sh install 60.2
          
          



  9. php.iniにintl.soを含めます。
     sudo touch /etc/php/7.0/cli/conf.d/20-intl.ini sudo bash -c 'echo "extension=intl.so" > /etc/php/7.0/cli/conf.d/20-intl.ini' sudo touch /etc/php/7.0/apache2/conf.d/20-intl.ini sudo bash -c 'echo "extension=intl.so" > /etc/php/7.0/apache2/conf.d/20-intl.ini'
          
          



  10. Apacheを再起動します。
     /etc/init.d/apache2 restart
          
          



  11. phpizeを削除します。
     sudo apt-get purge --auto-remove php7.0-dev
          
          



  12. シェルスクリプトを削除します。
     rm -rf /tmp/icu-install
          
          





次に、ICUバージョンを確認します
 php -i
      
      



そして天井に飛びます:

国際化サポート=>有効

バージョン=> 1.1.0

ICUバージョン=> 60.2

ICUデータバージョン=> 60.2

PS英語を話す友人がいて、彼らと良いニュースを共有するのに急いでいるなら、ここに私の英語のブログからの英語版があります。



All Articles