さくらインターネットでは、ディレクトリごと/ドメインごとにPHPのバージョンを自由に変更できる
HPの移管作業などをしていると、よく遭遇するのがサーバー上のプログラムバージョンの違いです。例えば公式サイトは随分前に作ったままで、同じサーバーに採用サイトを置きましょうとなったときに、PHPのバージョンが5.2.xだったりします。
仮環境でサイトの制作を終えて、いざ本番環境の情報を貰ったらPHPのバージョンが古くてWordpressが動かない!なんてこともありますが、さくらインターネットでは.htaccessと簡単なcgiだけで、PHPのバージョンを変更できるのです。素晴らしい。
さくらインターネットではドメインごとに参照ディレクトリを指定できますから、ドメインごとにPHPのバージョンを変えることも難なく出来るということです。サブドメインだけ変更もできるので重宝します。
この仕様自体はご存知の方も多いと思いますし、僕も色々なサイトで使っていますが、先日トラブルが発生して解決に時間がかかってしまったため、再発防止の念を込めてここに残そうと思います。
ざっくり目次です
.htaccessとcgiファイルを作成
トラブル(Internal Server Errorが表示される)
最後に
.htaccessとcgiファイルを作成
既にたくさんの方が記事にしており、検索すればやり方はいくらでも出てきますので、簡単に。
1. cgiを作る(UTF-8/LFで)
中身はこれだけです。7.4の部分を変更すればPHPのバージョンを自由に変更できます。2021年2月時点で5.2/5.3/5.4/5.6/7.4が使えるようです。(7.3は2021年11月に提供終了だそうです)
なんてことのない短いコードですが、このファイルは必ず文字コードを「UTF-8」で、改行コードを「LF」で作成してください。
僕は文字コードと改行コードを甘く見たせいで数時間無駄にしました。Windowsのよろしくないところです。
詳しくは後述しますが、必ずUTF-8とLFにするのを忘れずに。
ファイル名は何でもいいのでphp.cgiとしました。
文字コードと改行コード確認しました?
2. .htaccessに書く(なければ作る)
先程のcgiを読み込ませるわけです。PHPのバージョンを変更したいディレクトリの.htaccessに書き加えましょう。ない場合は作成しましょう。
cgiを同じ階層に置くのであればこのままで、別のディレクトリにするのであれば/***/php.cgiのようにきちんと指定しましょう。
例えばWordpressを動かしているのであれば、# BEGIN WordPressよりも上に書き加えましょう。
3. ファイルをサーバーへアップロード
FTPクライアントを使って.htaccessとcgiをアップロードしましょう。
アップロードが完了したら、cgiのパーミッションを必ず「755」に変更します。これも忘れないようにしてください。
アップロードが完了したら、あら不思議PHPのバージョンが変わっています
phpinfoでもアップロードして念の為バージョンを確認しておきましょう。
トラブル(Internal Server Errorが表示される)
さて、ファイルの作成とアップロードが完了したので、意気揚々とHPへアクセスすると、Internal Server Errorが表示されました。この世で一番嫌いな画面です。
解決時に2パターンの方法を同時に試してしまっていたので、どちらが決定打になったのかはっきりしていないので、その2パターンをどちらも掲載しておきます。
指定するディレクトリ以下のファイルを全削除→アップロードし直し
いろいろ検索していたらどこぞのブログに記載があったのでついでに試していました。もしかしたら効果があるのかもしれないので一応記載。
php.cgiの文字コードと改行コードを正しく設定し直した
そもそも僕はこの作業を別件で行ったので、php.cgiと.htaccessをコピーして持ってきました。
そして、php.cgiの中でどのバージョンを指定してたっけな~と思いファイルを開くときに、OSをクリーンインストールした僕のPCにはcgiを編集できるテキストエディタがなく、甘んじてメモ帳で開き、何も考えず保存しました。おそらくこれが原因です。
メモ帳で開いて、文字コードや改行コードを確認せずに保存し、サーバーへアップロードしたところ、エラーが発生したというわけです。他で使えているファイルだったこともあり、別の原因ばかり探していて、気づくのにだいぶ時間がかかりました。
文字コードと改行コードを設定し直すには、テキストエディタをダウンロードして、編集するのが最もです。Windowsではサクラエディタ、秀丸エディタ、EmEditorなどたくさんありますので好きなものを使いましょう。
最終的にこの2つを変更して確認したところ、正常に動作しました。おそらく後者が原因なんですが、それでも直らなければ前者を試してみてください。
ちなみにMacOSは文字コードがUnicode(UTF-8)で改行コードがLFなので、テキストエディットで編集しても大丈夫です。もちろんMacにもたくさん優秀なテキストエディタがあります。miやvimなどなど。Macを併用している僕は尚更感覚がおかしくなります。
文字コードや改行コードを、サーバーが動いているUNIX(UTF-8/LF)に合わせないといけないと僕は解釈してます。WindowsはShift-JISだったりUnicodeだったり、改行コードはCR+LFだったりするので、Windowsで作成したファイルが文字化けしてサーバー側が正しく読み込めないわけです。
Macユーザーの方には起きにくいトラブルということがわかりますね、それでも僕はWindowsユーザーを貫きます。
きちんと文字コードと改行コードを確認しましょう。
最後に
UTF-8/LF