PHPがエラーで画面が真っ白 .htaccess php_value default_charset
古くなったサーバー、およびシステムの改修業務を、最近やることが多いです。
その手のお話は、私に何なりとお任せください!
いかにトラブルが無くサーバーを移行させるかが、自分なりのこだわりとして大事にしています。
さて、今回経験したトラブルとして
移行テストの時でした。
(今回も8年くらい稼働しているサービス、サーバーの移行作業です)
PHPプログラムで構築しているサイトにアクセスすると、画面が真っ白になり何も表示されないエラーになってしまいました。
早速(*_*)
困ったときのエラーログの確認です。
ログファイルには、下記のメッセージが出力されていました。
.htaccess: Invalid command ‘php_value’, perhaps misspelled or defined by a module not included in the server configuration
おっと!エラーログを見て一発で原因が分かりました。
既存システムのリプレイスにて、幾つかのサービスを1台のWEBサーバーにまとめたことによる影響でした。
複数のサービスを同じWEBサーバー内に収容するが、セキュリティを維持するために、基本同じユーザーで動作してしまうApachモジュールのmod_phpを使わずに、ユーザー、グループを細かく指定できるFastCGI(mod_fastcgi)を利用するようになったからです。
FastCGIでは、.htaccessファイル内のphp_valueが利用できないためにエラーになっているのです。
1 2 3 4 |
.htaccess php_value default_charset Shift_JIS php_value default_charset EUC-JP php_value default_charset UTF-8 |
昔のシステムは.htaccess内で、PHPの設定をするのが流行っていたのでしょうか(´・ω・`)
今ではUTF-8で作成するのが当たり前となっていますが、当時のWEBと言えばShift_JISかEUC-JPコードが一般的でした。今では新しいサイトでEUC-JPコードを利用しているのを見かけませんね。
ApacheやPHPのconfファイルからデフォルト文字コードを変更しても、今回の案件はShift_JIS、EUC-JP、UTF-8が入り乱れたものなので、素直に各システムの設定ファイルにて対応しました。
1 2 3 |
ini_set( 'default_charset', 'SJIS-win' ); ini_set( 'default_charset', 'eucJP-win' ); ini_set( 'default_charset', 'UTF-8' ); |
しかもデータベースとの文字コードもバラバラが多い(*_*)