さくらインターネットで違うバージョンのphpを使う方法
さくらインターネットを使用しているお客さんのサイトのリニューアルをすることになったのだが、既存サイトがwordpressやらphpやらゴミゴミしていてPHP5.2からあげるのが億劫だったので特定のディレクトリのみPHPのバージョンをあげました。
必要なファイル
- php.cgi
- .htaccess
さくらインターネットではこの2つのファイルが必要になります
php.cgi
下記コードを記述したファイルを作成します
#!/bin/sh
exec /usr/local/php/7.1/bin/php-cgi
さくらが用意していれば数字(7.1)の部分を変えるだけで任意のPHPを利用できる
パーミッションは705
(←重要)に設定します
何も設定していないと「604」になっていると思いますが、パーミッションを変更しておかないと「Internal Server Error」出るので気をつけます。
.htaccess
「.htaccess」も同じく下記コードを記述したファイルを作成する
Action myphp-script /php.cgi
AddHandler myphp-script .php .html
このとき/php.cgi
のファイルパスは注意
ルート直下に××××ディレクトリを作っていてそのデイレクトリのPHPのバージョンを変える場合はパスが/××××/php.cgi
となる
/php.cgi
だけだとルートディレクトリ(一番上の階層)を見に行ってしまう(1敗)
404エラー(not found)が出た場合
~was not found on this server.
という「404エラー(not found)」画面が表示された場合は、サーバコントロールパネルにアクセスして頂き「アクセスログの設定」→「エラーログ」をクリックしてエラーを確認してみると早いです。
実際にあったエラー
script not found or unable to stat
僕はこのようなエラーが発生していて調べてみたら
「ファイルが見つからないよー」というエラーみたいで、よくよく見てみたら.htaccess
のところのAction myphp-script /php.cgi
のファイルパスが違いました…(例の1敗)
// ルートディレクトリ直下にディレクトリ「phptest」を立ててた
Action myphp-script /phptest/php.cgi
AddHandler myphp-script .php .html
先頭の「/(スラッシュ)」はルートを指すんすね…
てっきり現在いるディレクトリを指すものとご認識してました
反省…
追記:500エラー(Internal Server Error)が出た場合
この記事作った後に、さくらのデモ環境で別バージョンのphpを使おうとしたらやらかした。
戒めに追記しておきます。
実際にあったエラー
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at support@sakura.ad.jp to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
日本語訳:サーバーで内部エラーまたは構成ミスが発生し、要求を完了できませんでした。
php.cgi
のパーミッションを604→705
にしたら見れるようになりました。
終わりに
さくらインターネットは有名どころだから、異なるPHPのバージョンを使う方法としてはたくさんあったけど、何も考えず記事通りやるとどつぼにはまるんだなと思い戒めに記事として作成しました。
いまだに絶対パスと相対パスってどっちがどっちだっけ?と都度調べているレベルなので勉強せねば