【2024年11月】XServerでディレクトリごとにPHPバージョンを変更する方法

XServer(エックスサーバー)みなさん使っていますか?
弊社では複数契約して利用させてもらっています。
最近ブランドロゴが変わったようですが、まだ慣れません。。。

さて今回は、エックスサーバーでディレクトリ(フォルダ)ごとにPHPバージョンを変える方法の紹介です。

目次

ドメインごとのPHPバージョンの変更

エックスサーバーでは、サーバーパネルの「PHP Ver.切り替え」から、ドメインごとのPHPバージョン切り替えができます。

ただ、いま動いているPHPプログラムがあるのでドメイン全体のバージョンは気軽に変えられないけれど、一部ディレクトリだけ別バージョンにしたい!ということがありますよね?

その場合の方法です。

ディレクトリ単位でPHPバージョンを切り替える

1. PerlとPHPパスの確認

サーバーパネルの「サーバー情報」を開き、「コマンドパス一覧」タブに切り替えます。PHPの各バージョンのパスが書かれていますので、

  • Perlのパス
  • 適用したいバージョンの(CGI)とかかれたパス

をメモしておきます。

.htaccessの作成

以下の内容で.htaccessを準備します。

INI
Action myphp-script /適用したいディレクトリまでのパス/php.cgi
AddHandler myphp-script .php

例えばアドレスバーに入力するURLとして「https://ドメイン名/targetdir/」を対象としたい場合は、以下のような形になります。

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

php.cgiの作成

Perlのパス、PHP(CGI)のパスを使って以下のようなファイルを作成します。
この例は、Perlパスが「/usr/bin/sh」、PHPのパスが「/usr/bin/php8.3-cgi」です。

Perl
#!/usr/bin/sh
exec /usr/bin/php8.3-cgi

info.phpの作成

動作確認用に、info.phpというフィルも作成しておきます。

PHP
<?php phpinfo();

3ファイルのアップロードとパーミッション設定

作成した3つのファイルをSFTP等を使って対象のディレクトリにアップロードします。

php.cgiのパーミッションを「705」に設定します。

動作確認

前述の例だと「https://ドメイン名/targetdir/php.info」を開きます。

確かに変更されたことが確認できました!

うまく動かない場合の確認事項

最初、他のサイトを参考に設定してみたところうまくいきませんでした。うまくいかない場合は、以下を確認していただくとよいかと思います。

  • 各ファイル名が正しいか?
  • パスの記述が正しいか?
  • php.cgiのパーミッションを変更したか?

【重要】最後に、必ずinfo.phpは削除してください

info.phpに記述したphpinfo();で出力される情報には、攻撃者にとって知りたい情報が満載ですので、これを見るとサーバーを攻撃リスクにさらすことになります。

そしてinfo.phpという安易なファイル名は、どこからもリンクされていなくても攻撃者が推測してアクセスしてきますので、必ずファイルは削除しましょう。

もしphpinfoの情報を見るために残す必要がある場合は、ランダムな文字列をのファイル名にリネームしておきます。

最終更新日: 2024-11-06