【Laravel編】XserverでディレクトリごとにPHPバージョンを変更する方法

2025.01.15

どうもこんにちは塚本です。

今回はXserverを使う方々の悩みであるディレクトリ毎のPHPバージョン変更について備忘録を残します。

https://hajimecreate.com/labo/change_php_ver_by_directory/

実は同じようなブログを過去に書いていましたが、今回はターゲットをLaravelに限定して書いてみようと思います。

手順

おおまかな手順は以下の4つです。

  1. エックスアクセラレータの無効化
  2. ディレクトリのパーミッション変更
  3. 必要ファイルの設置
  4. 待つ

1. エックスアクセラレータの無効化

  • 設定をしたいドメインに対して、エックスアクセラレータを無効化してください。
  • サーバーキャッシュを無効化してください。
  • ブラウザキャッシュを無効化してください。

2. ディレクトリのパーミッション変更

  • 該当ディレクトリ(ドメイン)のパーミッションを755に変更してください。

3. 必要ファイルの設置

該当ディレクトリに以下の2ファイルを設置してください。
Laravelの標準ディレクトリパターンを想定しています。

※ 注意点

改行コードはCR+LFではなく、LFにしてください。

ドキュメントルート

.htaccessの設置

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
       Options -MultiViews
    </IfModule>
    RewriteEngine On
    
    # Always SSL
    RewriteCond %{HTTPS} !on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]
    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ public/index.php
</IfModule>

public以下

.htaccessへ追記

もともと入っているpublic/.htaccessに追記してください。
パーミッションはデフォルトのままでOKです。

# ここから
AddHandler myphp-script .php .fphp
Action myphp-script "/public/php.fcgi"
# ここまで追記

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

php.fcgiの追加

パーミッションは755に変更してください。
使いたいPHPバージョンに合わせてください。

#!/usr/bin/sh
exec /usr/bin/php-fcgi8.2

※ 以下の詳細をクリックするとPHPバージョンのパス一覧が確認できます。

PHPのパス一覧
PHPバージョン パス
PHP 8.2.x(CGI) /usr/bin/php8.2-cgi 又は /usr/bin/php-fcgi8.2
PHP 8.2.x(CLI) /usr/bin/php8.2
PHP 8.1.x(CGI) /usr/bin/php8.1-cgi 又は /usr/bin/php-fcgi8.1
PHP 8.1.x(CLI) /usr/bin/php8.1
PHP 8.0.x(CGI) /usr/bin/php8.0-cgi 又は /usr/bin/php-fcgi8.0
PHP 8.0.x(CLI) /usr/bin/php8.0
PHP 7.4.x(CGI) /usr/bin/php7.4-cgi 又は /usr/bin/php-fcgi7.4
PHP 7.4.x(CLI) /usr/bin/php7.4
PHP 7.3.x(CGI) /usr/bin/php7.3-cgi 又は /usr/bin/php-fcgi7.3
PHP 7.3.x(CLI) /usr/bin/php7.3
PHP 7.2.x(CGI) /usr/bin/php7.2-cgi 又は /usr/bin/php-fcgi7.2
PHP 7.2.x(CLI) /usr/bin/php7.2
PHP 7.1.x(CGI) /usr/bin/php7.1-cgi 又は /usr/bin/php-fcgi7.1
PHP 7.1.x(CLI) /usr/bin/php7.1
PHP 7.0.x(CGI) /usr/bin/php7.0-cgi 又は /usr/bin/php-fcgi7.0
PHP 7.0.x(CLI) /usr/bin/php7.0
PHP 5.6.x(CGI) /usr/bin/php5.6-cgi 又は /usr/bin/php-fcgi5.6
PHP 5.6.x(CLI) /usr/bin/php5.6
PHP 5.5.x(CGI) /usr/bin/php-fcgi5.5
PHP 5.5.x(CLI) /usr/bin/php5.5
PHP 5.4.x(CGI) /usr/bin/php-fcgi5.4
PHP 5.4.x(CLI) /usr/bin/php5.4
PHP 5.3.x(CGI) /usr/bin/php-fcgi5.3
PHP 5.3.x(CLI) /usr/bin/php5.3
PHP 5.1.x(CGI) /usr/bin/php-fcgi5.1
PHP 5.1.x(CLI) /usr/bin/php5.1

4. 待つ

すぐにバージョンが変わらない場合があります。
5分ほど、コーヒーでも飲んで待ってみてください。

まとめ

Laravelの場合はpublicディレクトリ以下にcgiを設置してください。
以下にソースコードを共有しますので、うまくいかない方は参考にしてみてください。

https://github.com/Hajimecreate/Switch-PHP-ver-of-Xserver-by-directory-In-Laravel

この記事を書いた人

Sho Tsukamoto

Chief Engineer Sho Tsukamoto

2023年4月入社。Web職人のたまごです。 最近はもっぱらコーディングすることは少なく、LaravelやReact Nativeを用いたシステム開発をメインとしています。

Sho Tsukamotoの書いた記事一覧へ

ハジメクリエイトでは一緒に働く仲間を募集しています!

関連記事