さくらインターネットで違うバージョンのphpを使う方法

2018/01/20

2018/02/24

さくらインターネットで違うバージョンの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	
	

先頭の「/(スラッシュ)」はルートを指すんすね…
てっきり現在いるディレクトリを指すものとご認識してました

反省…

 

終わりに

さくらインターネットは有名どころだから、異なるPHPのバージョンを使う方法としてはたくさんあったけど、何も考えず記事通りやるとどつぼにはまるんだなと思い戒めに記事として作成しました。

いまだに絶対パスと相対パスってどっちがどっちだっけ?と都度調べているレベルなので勉強せねば

 

今回異なるバージョンのphpを使う事になったサイトさん、wordpressが約20+多数のphpファイルが群雄割拠していてこれはサーバーのPHPのバージョンはあげられないわという結論にいたり特定のディレクトリのみバージョンをあげました