XSERVERレンタルサーバーでサブドメインのPHPのバージョンを変更する方法
お断り
この記事の内容はXSERVERが公式にサポートするものではありません。
非公式な方法ですので、設定する際には自己責任でお願いします。
設定方法
php.fcgiファイルを作成する
PHPバージョンを変更したいサブドメインのディレクトリ内に、以下のphp.fcgi
ファイルを作成します。
例) (各ユーザーのフォルダ)/example.com/public_html/subdomain.example.com/php.fcgi
-
php-fcgi8.3
の部分は使用するPHPバージョンに合わせて変更してください。一覧はXserverサーバーパネルのサーバー情報 > コマンドパス一覧 にあります。 -
username
とexample.com
をご自身のFTPユーザー名(サーバーID)、適用するドメイン名に置き換えてください。このパラメーターが重要です。 - パーミッションは705に設定します。
#!/bin/sh
exec /usr/bin/php-fcgi8.3 -c /home/username/example.com/xserver_php/php.ini
.htaccessに設定追加
PHPバージョンを変更したいサブドメインのディレクトリ内に.htaccess
ファイルに設定を追加します。
例) (各ユーザーのフォルダ)/example.com/public_html/subdomain.example.com/.htaccess
Action myphp-script /php.fcgi
AddHandler myphp-script .php
phpinfo()で設定確認
phpinfo()
を実行して、PHPのバージョンが変わっていることと、session.save_path
が/home/username/example.com/xserver_php/session
である事を確認してください。
(username
とexample.com
は適宜読み替えてください)
何故-cオプションが必要なのか
execコマンドのパラメーターに-c
オプションをつけないで上記と同様のことを行うと、PHPがCLI用の設定になってしまいます。
大きな違いとしては以下があります。
- sessionの保存先がサーバー内ユーザーで共通のディレクトリ
- opcacheが無い
- max_execution_timeが20分で過大
他のユーザーがsessionファイルを読めるわけではなさそうですが、-c
オプションで自身のディレクトリに保存されるようにした方が無難だと思います。
CLI用とWebサイト用のphp.iniの違い
確認できた範囲でphp.iniの内容の違いをあげておきます。
収容サーバーによっては違うかもしれませんし、サーバーパネルで設定を変更している場合はこの限りではありません。
セキュリティに関係する箇所
CLI用 | Webサイト用 | |
---|---|---|
cgi.force_redirect | Off | On |
session.save_path | /var/lib/php/session | /home/username/example.com/xserver_php/session |
session.use_strict_mode | Off | On |
他に設定が違う箇所
CLI用 | Webサイト用 | |
---|---|---|
opcache.enable | (モジュール無し) | On |
error_reporting | E_ALL | E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED |
expose_php | On | Off |
max_execution_time | 1200 | 60 |
max_input_time | 60 | -1 |
memory_limit | 2000M | 1G |
post_max_size | 2000M | 1G |
upload_max_filesize | 2000M | 1G |
mbstring.detect_order | no value | auto |
mbstring.http_input | no value | pass |
mbstring.http_output | no value | pass |
mbstring.internal_encoding | no value | UTF-8 |
mbstring.language | neutral | Japanese |
url_rewriter.tags | a=href,area=href,frame=src,input=src,form=fakeentry | form= |
おまけ
FTPでは見えませんが、/home/userfastcgi/username/example.com/php-cgi
にデフォルトのfcgiスクリプトがあります。当方が収容されているサーバーだと、以下のようにulimit
コマンドも入っていました。
#!/bin/sh
ulimit -u 500
exec /usr/bin/php-fcgi8.3 -c /home/username/example.com/xserver_php/php.ini
※ulimitコマンドの有無や設定内容は収容サーバーによって違うかもしれません。