【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アクセラレータ(エックスアクセラレータ) | レンタルサーバーならエックスサーバー」を参照ください。

About Me

プロフィール画像

ユーキと申します。北海道恵庭市という札幌と新千歳空港の間でフリーランスのWebエンジニアとして活動してます。

当サイトのブログでは、主にWeb制作全般、フリーランス周りの情報など色々なノウハウや知識を載せています。
その他日々気になったこと、思ったことも書いてます。

お仕事の相談など何かありましたら、お問い合わせかツイッターのDMからお気軽にご連絡くださいませ。

お問い合わせはこちら

ツイッターはこちら

ポートフォリオはこちら

Latest Posts

Popular Posts

TOP