【2022年12月最新】エックスサーバーでサブドメイン・サブディレクトリに異なるバージョンのPHPを動作させる方法
サブドメイン以下のみPHPのバージョンを別のものにしたかった(8系を入れたかった)んですが、いろんな記事を見ても全然動かずにハマったので備忘録として残しておきます。
まずは結論
早速結論からいうと、
Xアクセラレータという機能を1度OFFにするだけで解消しました。
エックスサーバーにログインし、サーバー管理を開く。
サイドメニューの「高速化>Xアクセラレータ」を開き、ドメインを選択し、OFFに設定する。
Xアクセラレータは、.htaccessをキャッシュするため、変更してもうまく実行されないことがあります。
PHPのバージョン設定方法ですが、
エックスサーバーはドメインごとでしかPHPのバージョンを指定できません。
.htaccessとcgi(fcgi)ファイルを用意することで、サブドメインやサブディレクトリでPHPのバージョンを指定することが可能になります。
今回、サブドメインを「a.tnyk.jp」とします。
(1) cgi(fcgi)ファイルを作成する
管理画面「アカウント>サーバー設定」を開き、タブの「コマンドパス一覧」を開いてください。
PHPなどのコマンドパスがあるので、自分の指定したいバージョンを選びましょう。
今回は「PHP8.1」を指定します。
サブドメインのディレクトリ直下に、php.cgiを以下の内容で作成してください。
/tnyk.jp/public_html/a.tnyk.jp/php.cgi
#!/usr/bin/sh
exec /usr/bin/php8.1-cgi
そして、パーミッションを705にしましょう!
これでcgiファイルはOKです。
(2) .htaccessでの設定を追加
ここで、PHPのバージョンを指定する記述を追加します。
サブドメインのディレクトリ直下に.htaccessを作成します。すでにある場合は追記してください。
/tnyk.jp/public_html/a.tnyk.jp/.htaccess
Action myphp-script /php.cgi
# AddHandlerを使う場合
AddHandler myphp-script .php
# SetHandlerを使う場合
<FilesMatch "\.php$">
SetHandler myphp-script
</FilesMatch>
これで設定は完了です!
ちなみに私の環境では、AddHandler、SetHandler どちらも動作確認できました。
サブディレクトリに設置する場合
/test/ に設置する場合は以下のようにします。
- /tnyk.jp/public_html/a.tnyk.jp/test/php.cgi(内容は一緒でOK!)
- /tnyk.jp/public_html/a.tnyk.jp/test/.htaccess
.htaccessのActionだけ変更
Action myphp-script /test/php.cgi
これだけです!
まとめ
.htaccessを変更しても反映されない場合、まずは、Xアクセラレータを一旦OFFにしてみましょう!
またOFFにしたあと、設定なりが終わったら、元のバージョンに戻すのを忘れないようにしましょう!
Xアクセラレータについては、「Xアクセラレータ(エックスアクセラレータ) | レンタルサーバーならエックスサーバー」を参照ください。