LoginSignup
16
8

More than 5 years have passed since last update.

さくらのレンタルサーバPHP7環境でintlモジュール有効化

Last updated at Posted at 2017-08-21

概要

さくらのレンタルサーバーのPHP7では、intlモジュールが有効になってません。外部のライブラリを設置して有効化する手順をまとめてます。

動作環境
OS FreeBSD 9.1-RELEASE-p24 (SAKURA__) #0: Thu Feb 5 10:03:29 JST 2015
PHP PHP 7.1.7 (cgi-fcgi) (built: Jul 27 2017 19:46:53)

手順

PHP7の選択

さくらのコントロールパネル( https://secure.sakura.ad.jp/rscontrol/ )にログインして、左側メニュー「■ PHPのバージョン選択」を選ぶ。

PHP_version_menu.PNG

右側のフォームで、PHP7.xを選択して「変更」実施

php_version_select.PNG

SSHで作業

SSHでログイン後、ビルドと公開用のフォルダ作成

% mkdir -p ~/usr/local/src
% mkdir -p ~/usr/local/php/extension

ICUのビルド

% cd ~/usr/local/src
% wget http://download.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.tgz
% tar zxvf icu4c-58_1-src.tgz
% cd icu/source
% ./configure --prefix=$HOME/usr/local
% gmake
% gmake install

php-7.1.7に同梱されているintlをビルド

% cd ~/usr/local/src
% wget https://github.com/php/php-src/archive/php-7.1.7.zip
% unzip php-7.1.7.zip
% mv php-src-php-7.1.7/ext/intl ./intl-php-7.1.7
% rm -rf php-src-php-7.1.7
% cd intl-php-7.1.7
% phpize
% ./configure --with-icu-dir=$HOME/usr/local --with-php-config=/usr/local/php/7.1/bin/php-config
% make

modulesフォルダにできたintl.soを、拡張モジュール指定用のフォルダへコピー

% cp ~/usr/local/src/intl-php-7.1.7/modules/intl.so ~/usr/local/php/extension/

php.iniの設定

さくらのコントロールパネル( https://secure.sakura.ad.jp/rscontrol/ )にログインして、左側メニュー「■ PHP設定の編集」を選ぶ。

PHP_version_menu.PNG

設定フォームに拡張フォルダと、ファイル名を指定して更新。

extension_dir = /home/さくらのユーザー名/usr/local/php/extension
extension=intl.so

php_ini.PNG

(参考)phpinfo() で確認

intl.png


参考サイト

さくらのレンタルサーバPHP5.x環境でのintl導入手法

さくらのレンタルサーバに Symfony2 を入れようとして嵌った件
http://qiita.com/yositani/items/76e81a43822f5e29fded
さくらのレンタルサーバにCakePHP3を導入
https://moshimore.jp/knowledge/2016/08/09/sakura_server_cakephp3/

ICUの脆弱性

ICU4C のライブラリに脆弱性
https://jvn.jp/vu/JVNVU97322697/
Locale クラスにおけるスタックベースのバッファオーバーフローの脆弱性
http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-004810.html
※上記情報より、一応58_1を使っておいた


経緯、所感など

下記urlの方と同じ状況になっておりました

さくらのレンタルサーバー PHP7.1でのintl extensionについて
https://teratail.com/questions/84206

上記の回答で紹介されているintl使わないプラグイン

intlless
https://github.com/chinpei215/cakephp-intlless/blob/master/README.ja.md

は、日本語/英語切り替えるサイト構築の予定だったので使えませんでした。(でもこのプラグインすごい)

で、いろいろ調査

PHP 5.3.0 以降にはintlは同梱されている
http://php.net/manual/ja/intl.installation.php

PHP 5.5までで使えるintl
https://pecl.php.net/package/intl

They may be preferrable to those bundled with PHP 5.5 due to being compiled against a more recent version of ICU.
・・・同梱されているもののほうが、新しいICUに対してコンパイルされているので、それを使ったほうがいいよ

そうでしたか。

対応方針

  • さくらインターネットさんあてに、 「php7でintl有効化したのにしてほしいです」 という要望を一応出してみた。

これやってもらえれば一番いいので、期待する。

  • なんとか、php7に同梱されたソースをコンパイルして、intl.soをつくる

上記紹介した作業でなんとかできた。

一応できたのだが、メンテナンスは面倒

  • PHPのバージョンに関して、今回はPHP7.1.7だったので、それにあわせたソースを持ってきた。
    さくらさんが提供するPHPのバージョンにあわせたintlを作り直して置くようにしたほうがいいような気がする
    (同梱しているので、整合が取れているはず)なので、PHPのバージョンを気にしておく必要がある。

  • ICUのバージョンアップは、59が現状でコンパイルできなかった(g++かなんかが古いのかも)ので結構きびしいかも

16
8
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
16
8