2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

XSERVERでサブドメインのPHPバージョンを変更するスクリプトは、php.iniファイルの指定が必要

Posted at

XSERVERレンタルサーバーでサブドメインのPHPのバージョンを変更する方法

お断り

この記事の内容はXSERVERが公式にサポートするものではありません。
非公式な方法ですので、設定する際には自己責任でお願いします。

設定方法

php.fcgiファイルを作成する

PHPバージョンを変更したいサブドメインのディレクトリ内に、以下のphp.fcgiファイルを作成します。
例) (各ユーザーのフォルダ)/example.com/public_html/subdomain.example.com/php.fcgi

  • php-fcgi8.3の部分は使用するPHPバージョンに合わせて変更してください。一覧はXserverサーバーパネルのサーバー情報 > コマンドパス一覧 にあります。
  • usernameexample.comをご自身のFTPユーザー名(サーバーID)、適用するドメイン名に置き換えてください。このパラメーターが重要です。
  • パーミッションは705に設定します。
php.fcgi
#!/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 である事を確認してください。
(usernameexample.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コマンドの有無や設定内容は収容サーバーによって違うかもしれません。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?