エックスサーバーで特定のディレクトリのみPHPのバージョンを変更する方法をご紹介いたします。
ただし、サーバー番号がsv1999までのサーバーしか対応しておりません。sv2000以降のサーバーでは、後述する方法は使えませんのでご注意ください。サーバー番号は、サーバーパネルの[サーバー情報]で確認できます。
エックスサーバーで特定のディレクトリのみPHPのバージョンを変更する方法
※今回は、「example」というディレクトリのみ、PHPのバージョンを変更すると想定して説明しています。
php.cgiの設置
まずはphp.cgiというファイルを作成します。中身は以下のようにします。
#!/usr/bin/sh
exec /usr/bin/php-fcgi7.3
「/usr/bin/php-fcgi7.3」の部分で使いたいバージョンのパスを指定します。パスについては、サーバーパネルの[サーバー情報] – [コマンドパス一覧]で確認できます。CGIの方のパスを指定してください。
ちなみに、サーバーに設定されているバージョンよりも上位のバージョンへは変更できませんでした。あくまで古いバージョンを使いたい時の手段のようですね。
php.cgiが作成できたら、バージョンを変更したいディレクトリ(今回の場合exampleディレクトリ)にアップロードします。ファイルのパーミッションは「755」に変更しておきましょう。
.htaccessの作成
続いて、.htaccessを作成します。
Action myphp-script /example/php.cgi
AddHandler myphp-script .php .html
上記は、exampleというフォルダのPHPバージョンを変更する場合を想定しています。フォルダ名は、環境に合わせて適宜変更してください。
.htaccessが作成できたらexampleディレクトリにアップロードします。
.user.iniの作成(必要であれば)
.user.iniはphp.iniのように環境設定を行うファイルです。.user.iniは必須ではないので、必要であれば作成してください。
例えば、メモリの上限を変更したい場合は、以下のように記述します。
memory_limit = 128M
.user.iniを作成したら、exampleディレクトリにアップロードしましょう。
PHPのバージョンが切り替わっているか確認
php.cgi/.htaccess/.user.iniをディレクトリに設置したら、PHPのバージョンが変わっているか確認してみましょう。
以下の内容で、info.phpというファイルを作成します。ファイル名は何でも良いです。
<?php
phpinfo();
info.phpをexampleディレクトリに設置して、「example.com/example/info.php」にアクセスします。
すると、以下のようにPHPのバージョンが表示されますので、設定したバージョンになっているか確認しましょう。
エラーになってしまう場合
エラーになって上記画面が表示されない場合は、php.cgiのパーミッションが755になっていないとか、.htaccessの記述が間違っている等の可能性があります。
ファイルの記述内容やパーミッションを今一度ご確認ください。
PHPのバージョンが切り替わっていない場合
上記画面は表示されるけど指定したバージョンに変わっていない場合は、Xアクセラレータが有効になっている可能性があります。特にXアクセラレータのVer.2が有効になっている場合は、一旦オフにすると切り替わると思います。
Xアクセラレータを無効化してもPHPのバージョンが切り替わらない場合は、記述内容が間違えている可能性が高いのでファイルの中身を今一度確認してみましょう。
あとがき
サーバー番号がsv1999以下で、どうしてもディレクトリ単位でPHPのバージョンを変更したい時は、参考にしていただければと思います。
ディレクトリ単位でPHPのバージョンを変えたいって結構レアケースというか、古いシステムを使っている場合がほとんどだと思います。その場合は、予算の都合もありますが、システムのバージョンアップを提案した方が健全ですね。