write ahead log

ロールフォワード用

エックスサーバー(Xserver)で特定ディレクトリ(サブドメイン)を別のPHPバージョンで稼働させる

色々なサイトで書かれていますが、実際試すと微妙にハマりポイントがあったので。

そもそも古いPHPはもうやめたいですけどね。。。

大まかな流れ

  • 使用するPHPバージョンを決める
  • コントロールパネルから「Xアクセラレータ」をOFFにする
  • 配置するファイルを用意する
    • 使用するPHPを呼び出すcgiスクリプト
    • .htaccessファイル
    • .user.ini(php.iniの役割のやつ)
  • ファイルを配置して権限を与える
  • 動作確認する(phpinfoを利用)
  • コントロールパネルから「Xアクセラレータ」をONにする(任意)
  • ハマったら(コントロールパネルから)エラーログを見る

使用するPHPバージョンを決める

エックスサーバーで利用可能なバージョンの一覧があるので確認しておきます。

エックスサーバー| プログラム言語・コマンドパス

コントロールパネルから「Xアクセラレータ」をOFFにする

いくらやってもうまくいかないと思っていたのですが、こいつをOFFにしないと反映されないという記事が見つかりました。

【2022年12月最新】エックスサーバーでサブドメイン・サブディレクトリに異なるバージョンのPHPを動作させる方法

恐らくOFFにしなくてもキャッシュの時間が切れれば反映されると思うのですが、キャッシュされる時間もわからなかったのでOFFにしました。

配置するファイルを用意する

3つのファイルを用意します。

  • 使用するPHPを呼び出すcgiスクリプト
  • .htaccessファイル
  • .user.ini(php.iniの役割のやつ)

ファイルは末尾改行で、改行コードは「LF」で統一しました。
(CRLFがCGIスクリプトファイルに入っていてうまく動かなかった。)

CGIスクリプト

「php.cgi」という名前で用意しました。

#!/usr/bin/sh
exec /usr/bin/php5.6-cgi

.htaccessファイル

Action myphp-script /php.cgi
AddHandler myphp-script .php

.user.iniファイル

とりあえず中身は空っぽにしました。

実際はプロジェクトに合わせて「post_max_size」とか色々設定することになると思います。

.user.iniの設定で気を付けないとならないのが再読み込み頻度が決まっていることです。

php.net| .user.iniファイル

デフォルト5分なので、サーバー上のこのファイルを変更したからといってすぐに反映はされません。

ファイルを配置して権限を与える

用意した上記の3ファイルを別のPHPバージョンで稼働させたいディレクトリに配置します。

こんな感じ。

www.example.com
 |- php.cgi
 |- .htaccess
 |_ .user.ini

そしてphp.cgiのパーミッションを「705」にしておきます。
(書き込み権限があると動かないのがエックスサーバーの仕様みたいです)

エックスサーバー| CGI・SSI・PHP

動作確認する(phpinfoを利用)

phpinfo()を呼び出すだけのスクリプトを上記3ファイルと同じ場所において確認するとよいと思います。

こんな感じ(phpinfo.php)

<?php
phpinfo();
?>

コントロールパネルから「Xアクセラレータ」をONにする(任意)

冒頭でOFFにしたのでONにして動作確認すると良いかと思います。

パフォーマンスが気にならないならOFFのままでもよい気もしますが。

ハマったら(コントロールパネルから)エラーログを見る

ここまでで結構ハマったのでコントロールパネルからエラーログを見ると解決するかもしれません。
(私は改行コードでハマってなかなか気づきませんでしたが。。。)