Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

さくらのレンタルサーバーの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++かなんかが古いのかも)ので結構きびしいかも

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした