CORESERVERでのFastCGI/CGI版PHPの利用手順
GMOグループが運営するレンタルサーバーのCORESERVERでのFastCGI版PHPとCGI版PHPの利用手順を整理する。
設定ファイルを編集することで,PHP以外の任意のプログラムもCGIの仕組みで使うことができる。
導入
senooken.jpで運営しているサービス類は,2020-02-07 Fri時点ではCORESERVERのCORE-MINIで運営している。月額料金が約200円と安いのが理由だ。
CORESERVERの標準 (Apacheモジュール版) PHPのバージョンは7.1である。多くの場合はこれで問題ないのだが,動作させたいアプリケーションでPHPのバージョンが7.1より新しかったり,PHPのモジュールが足りない場合がある。
このような場合,FastCGIやCGIのPHPを使うことで,自前でビルドしたPHPを実行に使うことができ,バージョンや不足モジュールの問題を解消できる。
CORESERVERでのCGIの使い方は「 PHPをCGIとして動かす方法について | 基本的な質問 | よくある質問」に記載されている。
ただ,書かれている情報と異なるところや,新しくわかったところがある。忘れてしまうのでここにまとめておく。
基本操作
まず基本的なところを整理する。サイトで使用するPHPのバージョンは管理画面にログイン後,[サイト設定]>[個別のサイト]>[サイト設定の変更] から行える。
[サイト設定の変更] を選択すると [サイト設定の変更] 画面が表示され,SSLやPHPのバージョンを選択できる。
ここで,左端のphp71のみモジュール版PHPで,それ以外はFastCGI版PHPとなる。
ラジオボタンでphpのバージョンを選択後,[サイト設定を変更する] を選択すると,2-3分後反映される。
CORESERVERでのPHPのバージョンの基本的な変更方法は以上だ。次から具体的なFastCGIとCGIの使用方法を説明する。
基本手順
FastCGIもCGIも基本的にどちらも以下の3の手順を踏む。
CGIの実行ファイルとPHPの設定ファイルは,/virtual/<username>/public_html/.fast-cgi-bin/
に格納されている。この中に以下のような設定ファイル群が格納されている。
php.cgi php5.ini php54.fcgi php56.fcgi php71.fcgi php73.fcgi php.fcgi php52.cgi php54.ini php56.ini php71.ini php73.ini php.ini php53.cgi php55.cgi php70.cgi php72.cgi php74.cgi php4.cgi php53.fcgi php55.fcgi php70.fcgi php72.fcgi php74.fcgi php5.cgi php53.ini php55.ini php70.ini php72.ini php74.ini php5.fcgi php54.cgi php56.cgi php71.cgi php73.cgi
この内,ini拡張子はPHPの設定ファイルであり,fcgiとcgiの拡張子のファイルの中身は以下の通りになっており,CGIで実行するプログラムを実行している。
これらの最後のexec
コマンドの実行先を自分のプログラムのパスに差し替えれれば,CGIで自前のプログラムも実行できる。
FastCGI
1. FastCGI版では,まず管理画面でPHPのバージョン (例: php74) を選択することで,FastCGI版PHPのバージョンを選択できる。
2. その後,/virtual/<username>/public_html/.fast-cgi-bin/
のphpXX.fcgi
ファイルを編集する。XX
は選択したPHPのバージョン (例: 7.4の場合74
) となる。
このファイルの最終行で,CORESERVERにインストールされている/usr/local/bin/phpXX
を実行している。必要に応じて実行先を変更する。例えば,/virtual/<username>/.local/bin/php-cgi
などだ。
3. fcgiファイルのPHPRC環境変数で設定されている通り,既定のFastCGI版PHPは同じディレクトリーのphpXX.ini
が設定ファイルとなっているので,必要に応じて設定を編集する。
なお,重要な点としてFastCGI版PHPでは,管理画面からバージョンを切り替えたタイミングで設定ファイル (phpXX.ini) を読み込むので注意する。例えば,起動中にextension
指令でモジュールを追加しても,そのままでは反映されない。設定ファイルを編集したら,反映させるために一度他のバージョンに切り替えて戻すことに注意する。
CGI
CGI版もFastCGI版と似たような手順を踏むが,バージョンの指定方法が異なる。
1. CGI版のPHPを使いたいディレクトリーの.htaccess
に以下の内容 (XX
はPHPのバージョン) を記述することで,CGI版PHPのバージョンを指定する。
AddHandler application/x-httpd-phpcgiXX .php
なお,ここで公式マニュアルではXXの記述を省いた例 (AddHandler application/x-httpd-phpcgi .php
) を掲載している。自分で試した限り,バージョンを省くと実行できなかったので,バージョンの指定は必須だ。
2. その後,FastCGI同様必要に応じて/virtual/<username>/public_html/.fast-cgi-bin/
のphpXX.cgi
ファイルを編集する。XX
は選択したPHPのバージョン (例: 7.4の場合74
) となる。
3. CGI版のPHPの設定ファイルは,PHPの設定ファイルの検索規則 (PHP: 設定ファイル – Manual)に従い,同じディレクトリーのphp.ini
となる。
fcgiファイルでPHPRC環境変数を用いて変更していたように,ファイル名や場所を変更することは可能だ。
結論
ここまででCORESERVERでのFastCGI版PHPとCGI版PHPの設定方法を説明したので,両者の違いを以下の表に整理した。
項目 | FastCGI | CGI |
---|---|---|
バージョンの変更 | 管理画面 | .htaccess 内のAddHandler application/x-httpd-phpcgiXX .php |
設定ディレクトリー | /virtual/<username>/public_html/.fast-cgi-bin/ |
|
CGIの実行ファイル | phpXX.fcgi |
phpXX.cgi |
PHPの設定ファイル | phpXX.ini |
php.ini |
設定の反映タイミング | バージョン切替時 | 即時 |
自前のプログラムを使いたい場合は,fcgiやcgiファイルのexec
コマンドの引数に自前プログラムのフルパスを指定する。
自前で用意したPHPの拡張モジュールを使用したい場合,phpXX.ini
やphp.ini
にextension_dir
指令でモジュールの格納ディレクトリーを指定し,extension
指令により有効化対象のモジュールを指定できる。
実際に編集する場合は,.fast-cgi-bin
ディレクトリーをバックアップしたほうがよいだろう。
CORESERVERでFastCGI/CGIにより自前プログラムや自前のPHPを使う場合の参考にしたい。