phpが表示されない時にサーバ側で行った設定をメモ。
PHPが利用できるホスティングであることは知っていたが、PHPをまだ動かしたことはないのでバージョン確認から。
■まずはバージョン確認
<?php phpinfo(); ?>
とメモ帳に記載。「test.php」などphpファイルとして保存し、webサーバにアップロード。
アップロードしたパスをアドレスバーに入力し、この「test.php」を表示させます。
以下のようにPHPの設定情報が表示されます。5.2系であることを確認。
バージョン確認だけなら、SSHで接続し以下のコマンドでもいいです。
php -v
phpinfoの情報にはphpの設定ファイル(.iniファイル)等のパスも記載されているので、後々役に立ちます。
■次にSSHでエラー情報を確認
エラーファイルは以下のパスでした。/var/log/httpd/管理ユーザ名/
この配下にドメイン名付きのエラーログを複数世代ある。
いくつかエラーが出ていました。
(エラー1)
"[Thu Nov 14 09:00:53 2013] [error] [client xxx.xxx.xxx.23] PHP Fatal error: Call to undefined function mb_internal_encoding() in /ファイルパス/sample.php on line 18, referer: http://リファラーアドレス"
マルチバイト文字(mbstring)の内部変換(internal_encoding)でエラー発生。
マルチバイト文字(日本語の文字コード)の設定に問題がある様子。
エラー解消のため、php系のiniファイルにて設定を確認。
■.iniファイルで設定変更
先ほどのphpinfoの情報ではiniファイルは二つ。php.iniとextentions.ini。/usr/local/php5/lib/php.ini /usr/local/php5/etc/extensions.ini
この二つを確認します。
■(エラー1)の mbstring 関連から対処
まずmbstringとのことで、最初に試みたのが「php_mbstring.dll」の拡張機能をONにすること。
php.iniを開き、
;extension=php_mbstring.dll
から「;」を消して、コメントアウトを外しました。しかしこの対処で別のエラーが出ることになりました。それは後述。
その他に併せて、[mbstring]に関連する以下の設定を変更し、コメントアウトを外しました。
【対処1】
mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII mbstring.substitute_character = none;
しかし、php -v コマンドを入力したら以下のエラーが。
(エラー2)
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php5/lib/php/extensions/current/php_mbstring.dll'
- /usr/local/php5/lib/php/extensions/current php_mbstring.dll: cannot open shared object file: No such file or directory in Unknown on line 0
表示されたパス(/usr/local/php5/lib/php/extensions/current/)を確認したところ、確かに該当のファイルはなかった。
よって最初のphp_mbstring.dllにまつわる一行を再びコメントアウトに戻し、別の対策を検討することに。
設定ファイル extensions.ini のmbstringにまつわる以下の行のコメントアウトを外した。
【対処2】
extension=mbstring.so
php.iniの設定を変更した場合、apacheの再起動をしないと反映されない。
再起動を実施。
# /etc/rc.d/init.d/httpd restart
この二つの対処によって、エラーが解消した。