WordPressインストール時にまたしてもつまづいたのでメモです。
(こちらにもつまづいた事例を書きました)
WordPressをサーバーに入れて、インストールしようとアクセスすると、phpのエラーが出ました。
require
がうまくできない、といったエラーでした。
よくよく見るとマジック定数である__DIR__
が使えないようでした。
( echo __DIR__
としてもそのまま「__DIR__」と出てきてしまう)
参考:マジック定数について
PHPの__FILE__とか__DIR__とかのマジック定数まとめ | PisukeCode - Web開発まとめ
__DIR__
はPHP5.3 から使えるのですね。
使おうとしているサーバーは5.2だったのです...!
ということで、解決策は「サーバーでPHPをCGIモードにする」でした。
モジュールモードとCGIモード
使っているのはさくらサーバーです。
ざっくり調べたところ、サーバーの仕様には モジュールモードとCGIモード があることが分かりました。
他のサーバー会社でも同じ感じらしいです。
モジュールモードでは、PHPをApacheのモジュールとして使うため高速になる。
CGIモードでは、Apacheからではなく、CGIファイルを通してPHPへのパスを通している。
といった違いです。
よく「モジュールモードは高速」と見掛けるので時代に逆行している感じはあります。
しかし共用サーバーなので、メンテナンス上個別にPHPのバージョンを上げる必要があり、CGIモードにする変更することになりました。
さくらサーバーでモジュールモードからCGIモードへ変更する
以下教えていただいた方法です。
1. .htaccessを作る
Action myphp-script /php.cgi AddHandler myphp-script .php
と書きます。
次に作る 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
なのですかね...。
今回は触れる程度にしておきます。