印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux 文字化けを直すとPHPが動作しなくなる

AddType で文字コード設定をすると,PHP スクリプトが解釈されなくなってしまう。いつの間にかそうなっていた。原因は不明。→解決しました。追記をご覧下さい。

■ ■ ■

起こっている問題とその経緯

このサイトで,一部文字化けの問題が発生している。いつからこのような現象が発生していたのかは分からない。パッケージの更新しているうちに,いつの間にかこうなったとしか考えられない。経緯は以下の通り。

環境は Vine Linux 3.2 kernel-2.4.31-0vl1.12, apache-1.3.33-0vl2.3, php5-apache-5.1.4-0vl1.4, php5-5.1.4-0vl1.4。

サイトの構成

このサイトは,ディレクトリによって文字コードが違う構成になっている。

パス 文字コード .htaccess での文字コード指定
/ EUC-JP あり (EUC-JP)
/archives EUC-JP なし
/archives/200604 EUC-JP なし
/archives/200404/Hitsujiyama UTF-8 あり (UTF-8)

html ファイルには,EUC-JP や UTF-8 などのコード情報を meta タグで書いてある。EUC-JP の場合は次の通り。UTF-8 のファイルも同様である。

<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />

現象の詳細

文字コードが EUC-JP である,/ (ルート) の .htaccess には次のように書いてある。

AddType "text/html; charset=EUC-JP" .html
AddType application/x-httpd-php .html

UTF-8 のディレクトリ /archives/200404/Hitsujiyama の .htaccess は次のようになっていた。

AddType "text/html; charset=UTF-8" .html
php_value mbstring.internal_encoding UTF-8

しかし,その UTF のページをブラウザで見ると,PHP のコードが表示されてしまっていた。設置した当初は正しく動作していた。

PHP のコードが表示されてしまっている
PHP のコードが表示されてしまっている


こりゃひどい。

AddType application/x-httpd-php .html
AddType "text/html; charset=UTF-8" .html
php_value mbstring.internal_encoding UTF-8

php のための記述を最初に加えても,動作は同じ。文字化けは起こらないが,PHP は動作していない。

しかし,Addtype の順番を入れ替えると,PHP は解釈され動作する。

AddType "text/html; charset=UTF-8" .html
AddType application/x-httpd-php .html
php_value mbstring.internal_encoding UTF-8

ところが,今度は UTF-8 の文字が化けてしまう。PHP の方にも文字コードをつけて,「AddType "application/x-httpd-php; charset=UTF-8" .html」としても変化なし。

PHP は解釈されるが文字化けする
PHP は解釈されるが文字化けする


こんなトレードオフってあるだろうか???

原因は?

明確な原因は分からない。対策もどうしたらいいのか…。.htaccess の中の記述の順番が違うで PHP が動作したりしなかったりするということは,Apache に問題がありそうだ。.htacces の解釈は Apache がやっているからである。しかし,当時のバージョンも現在のバージョンも Apache 1.3.33 である。ということはビルドに問題があるのだろうか?

リリース日 パッケージ 備考
2005-12-06 apache-1.3.33-0vl2.2 動作確認済
2006-08-06 apache-1.3.33-0vl2.3 問題あり?

apache-1.3.33-0vl2.3 がいけないのか? php5-apache-5.1.4-0vl1.4 との関係は? 前のバージョンに戻して見ようかと思ったが,

# rpm -i --oldpackage apache_1.3.33-0vl2.2_i386.rpm
ファイル /usr/lib/apache/mod_imap.so (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/lib/apache/mod_rewrite.so (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/sbin/httpd (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/ja/man1/htpasswd.1.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/ja/man8/httpd.8.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/ja/man8/suexec.8.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/man1/dbmmanage.1.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/man1/htdigest.1.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/man1/htpasswd.1.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/man8/ab.8.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/man8/httpd.8.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/man8/logresolve.8.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/man8/rotatelogs.8.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています
ファイル /usr/share/man/man8/suexec.8.gz (パッケージ apache-1.3.33-0vl2.2 から) は、パッケージ apache-1.3.33-0vl2.3 からのファイルと競合しています

どわーっ。関連パッケージも同時に戻すにはどうすればよいのだろうか??? 一筋縄ではいかないようだ。現在のところ打つ手なし。

文字化けの参考になりそうなサイト

2007年1月16日追記:
1つの拡張子に2つの AddType を適用しようとしたのが間違いでした。文字化け問題は解決しました(nlog(n): 拡張子 html で PHP を動作させているときの文字化け問題が解決)。

Posted by n at 2006-08-28 22:38 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?