CGIにふれる

WordPressインストール時にまたしてもつまづいたのでメモです。
こちらにもつまづいた事例を書きました)

WordPressをサーバーに入れて、インストールしようとアクセスすると、phpのエラーが出ました。
require がうまくできない、といったエラーでした。

よくよく見るとマジック定数である__DIR__ が使えないようでした。
( echo __DIR__ としてもそのまま「__DIR__」と出てきてしまう)

参考:マジック定数について
PHPの__FILE__とか__DIR__とかのマジック定数まとめ | PisukeCode - Web開発まとめ

__DIR__ はPHP5.3 から使えるのですね。 使おうとしているサーバーは5.2だったのです...!

ということで、解決策は「サーバーでPHPCGIモードにする」でした。

モジュールモードとCGIモード

使っているのはさくらサーバーです。
ざっくり調べたところ、サーバーの仕様には モジュールモードCGIモード があることが分かりました。
他のサーバー会社でも同じ感じらしいです。

モジュールモードでは、PHPApacheのモジュールとして使うため高速になる。
CGIモードでは、Apacheからではなく、CGIファイルを通してPHPへのパスを通している。

といった違いです。

よく「モジュールモードは高速」と見掛けるので時代に逆行している感じはあります。
しかし共用サーバーなので、メンテナンス上個別にPHPのバージョンを上げる必要があり、CGIモードにする変更することになりました。

さくらサーバーでモジュールモードからCGIモードへ変更する

以下教えていただいた方法です。

1. .htaccessを作る

Action myphp-script /php.cgi
AddHandler myphp-script .php

と書きます。
次に作る php.cgi を見に行くよう指示する記述です。(おまじない状態...)
ルートディレクトリに置きます。

2. php.cgi を作る

#!/bin/sh
#exec /usr/local/bin/php-cgi
#exec /usr/local/php/5.6/bin/php-cgi
#exec /usr/local/php/7.2/bin/php-cgi
exec /usr/local/php/7.3/bin/php-cgi

# が付いている行はコメントアウトされているので、動いているのは最後の行のみです。
この記述でPHP7.3へパスを通しているようです(おまじない...)。
こちらもルートディレクトリに置きます。

これでPHP7.3が使えるようになったので、__DIR__ も使えるようになりました。

注意点

php.cgi のアクセス権に注意です。実行ファイルなのでパーミッション755で動きます。

さいごに

少しCGIについてかじってみようかと思いましたが、まだ早かったみたいです。
Perlという言語で書かれているけど拡張子は.cgiなのですかね...。

今回は触れる程度にしておきます。