さくらのレンタルサーバでCakePHP3を使うためにintl extensionを導入する方法

[PR]

大人しく
・EC2とか、さくらのVPS使う!
・Vagrantとかローカル環境で生成する!
とかすればたぶん必要のない話ですが、それでも興味があれば!

あと、もし今後、さくらのレンタルサーバにデフォルトでintl extensionが導入されれば必要のない話です。
まずはphpファイルに <?php phpinfo() ?> って書いたものをアップしてPHPの情報を確認。
「intl」って検索してヒットしたらこの記事の内容は無視で大丈夫です。
ヒットしなければ続きをどうぞ。

まずは手順。

以下サイトの1〜3を実行してください。
http://qiita.com/yositani2002/items/76e81a43822f5e29fded

これでphpinfo()にintlが出現するはず。

次に /home/[user name]/.cshrc に以下を追記。
※[user name]はログイン時のユーザーネームが入ります

alias php php -c /home/[user name]/www/php.ini

似たような文が並んでるところがあるので、その最後に追記するといいと思う。

これで公式のInstallationを元にプロジェクトの作成ができるかと思います。
http://book.cakephp.org/3.0/en/installation.html

以上です!

以下、細かい説明

CakePHP3は「Requirements(要求!)」に「intl extension」というものがあります。
でも、現在はphpinfo()を見る限り、初期状態では入っていない模様。

なので、composerをインストール後、プロジェクトを生成する次のコマンドを実行しても注意されてしまいます。

php composer.phar create-project --prefer-dist cakephp/app [app_name]

…

Created project in app
Loading composer repositories with package information
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp 3.X.x-dev requires ext-intl * -> the requested PHP extension intl is missing from your system.

…

みたいな。

一応、指定のapp名でディレクトリはできるけど、アクセスしてもエラー。

Warning: require(/home/[user_name]/www/[dir]/[app_name]/vendor/autoload.php): failed to open stream: No such file or directory in /home/[user_name]/www/[dir]/[app_name]/config/bootstrap.php on line 23

ということで、intl extensionを導入しましょう。

先の手順でも書いた、ここの1〜3について。
http://qiita.com/yositani2002/items/76e81a43822f5e29fded

レンタルサーバでも、自分の操作できる領域にextensionを展開しちゃって、php.iniで読み込みましょうってことですね。

これでphpinfo()にも表示されるし、オッケーやん!って思ってsshでプロジェクト生成を実行したものですが、これじゃダメ。

コマンドから php -i でphpinfo()と同じ情報を確認できるのですが、intlさんがいない…
置いたphpファイルとsshから実行するものって別物なんですね。

phpinfo()の Loaded Configuration Fileの欄は
/home/[user name]/www/php.ini

sshの php -i だと
Loaded Configuration File => /usr/local/php/5.4/lib/php.ini

sshの方のphp.iniは、さっきintlを指定したものじゃないですね。
当然、 php -i | grep intl とかで一致する行を探してもヒットせず。

そこで、phpの実行時に、ロードするiniファイルを指定するオプションを追加します。

php -c /home/[user name]/www/php.ini

こんな感じ。

php -c /home/[user name]/www/php.ini -i | grep intl

ってやると

intl
intl.default_locale => no value => no value
intl.error_level => 0 => 0
intl.use_exceptions => 0 => 0

ってな感じで、phpinfo()で確認したintlと同じ情報が表示されます。

ということは

php -c /home/[user name]/www/php.ini composer.phar create-project --prefer-dist cakephp/app [app_name]

これでintlのエラーなしでCakePHP3のプロジェクト作成ができます。

これだと毎度の入力が大変なことになるので、省略できるようにします。

echo $SHELL で /bin/csh って出るんですが、この場合はログイン時にHOMEの.cshrcファイルを確認してくれるみたいで。
そこにphpって書いたら、php -c /home/[user name]/www/php.ini のことだからな!覚えとけよ!ってことを書いてあげます。

これでsshでphpって打ったら、www配下のphp.iniを読んだ上で実行するようになってくれます。

あとは、

chsh -s /usr/local/bin/bash

とかすると、 echo $SELL が /usr/local/bin/bash に変わります。
この場合はHOME直下の.bashrcを読んでくれます。
こっちのが馴染みありますね。

その場合は、.bashrcファイルを作って

alias php='php -c /home/gorotsuki/www/php.ini'

って感じで記述すればいいみたい。

そもそも

以下は、完全な蛇足ですが。
冒頭に書いたように、今時、こんな風に作業するの変じゃね?って話ですが。

自分の年齢やら、現在の技術レベルやら、金銭的なレベルやら、仕事のバランスやらを考えると、もっとジャンルを狭めてみたいなとなりまして。

サーバの完璧なカスタマイズとか、最新のサーバ事情や開発環境とか、新しい言語とか追い切るのは厳しいなぁと思い、それなら金銭的にもレンサバに色々突っ込んで管理するほうがいいやって気持ちになって、こんなことをやってます。

なので、推奨するなら、もっと他のやりかた(そもそもCakePHP3じゃないかも)なのですが、似たようなテンションの人が居れば参考にしていただければと思う次第。

まず、自分が忘れちゃうからメモってのがありますが。