日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » Debian4-XAMPP1.7-PHPでのエラーMSG内日本語文字化け

Debian4-XAMPP1.7-PHPでのエラーMSG内日本語文字化け

ページ: 1

投稿者 投稿
会員
登録者: 2 2009
返信数: 7
はじめまして。
localhostのサーバとして、i386系の表記環境でPHPプログラムを
1) gedit(文字コード:EUC-JP)で書き
2) ブラウザ:Iceweasel(Firefox系)に表示
3) php.iniのmb_string系は、すべてコメントつき(;付き)
としていますが、正常時には、ブラウザ上に、すべて、日本語表示もOKなのですが、
エラー時に、英数字は、まともに出るのですが、その中の日本語表示が
黒六角形内に?マークのようなものが入ったりした、今まであまり
見たことのないような異様なマークの文字化けが起きます。
どなたか、おわかりになる方、いらっしゃいましたら、教えてください。
よろしくお願いします。 :(
jinchan
« 最終編集者 jinchan 日時 2009 年 2 月 9 日(月) 22:20. »
管理者
登録者: 10 2005
返信数: 38
簡単にいうとjinchanさんがおっしゃるシーンで使用されるエラーメッセージの文字エンコードとブラウザーが認識している文字エンコードが異なるんだと推測します.
これについてご自分で解決できますか? あるいは調べられますか?
「調査」を手抜きでやるにはブラウザーの文字化け表示時に文字エンコードの自動認識ではなく,UTF-8,EUC-JP,Shift_JISなど日本語が利用できる文字エンコードを順番に選択してみることです.
それがjinchanが意図しない文字エンコードになっているとビンゴです.どうにか解決する必要があると思います.
あるいは別の問題の場合もあると思いますが,上記以外の問題の推測は取り急ぎ置いておきます.
会員
登録者: 2 2009
返信数: 7
ELFさん
ありがとうございます。

ひとりでは、とても太刀打できないので、具体的な例で御説明します。
下記プログラムを実行したところ、

<?php
define("ERR_LOG", "./test/237.log");

header("Content-Type: text/plain; charset=EUC-JP");

// ログに記録
error_log("エラーメッセージ\n", 3, ERR_LOG);

echo "ログの内容\n";
readfile(ERR_LOG);
?>

下記のような応答がブラウザにありました。

<br />
<b>Warning</b>: error_log(./test/237.log) [<a href='function.error-log'>function.error-log</a>]: failed to open stream: 荐怨��������障���� in <b>/opt/lampp/htdocs/sample/chapter1/1-14/237.php</b> on line <b>7</b><br />
ログの内容
<br />
<b>Warning</b>: readfile(./test/237.log) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: �������������<�ゃ�������c���������������障���� in <b>/opt/lampp/htdocs/sample/chapter1/1-14/237.php</b> on line <b>10</b><br />

ここでは、菱形ですが、コピー張り付け前の原文は六角系に?マークです。
それで、ブラウザの文字コードをいろいろ変更しても、文字化けの形が変わる、
もしくは、正常に表示されていた文字も文字化けになるなど、でした。

以上ですが、よろしくお願いします。
jinchan
会員
登録者: 2 2009
返信数: 7
追伸で恐縮です。

以上の問題の他に、もっと切実な問題として、このxamppに付属している
phpMyAdmin3.1.1の文字化け問題があります。

これも、画面全体としては、日本語表示も正常なのですが、データベースを
作って、保存したのちに、phpMyAdminで見てみると、前述のような多角形の
文字化けが起きます。文字コード関係は、EUC-JPで統一しているつもりなんですが、
うまくいきません。
phpMyAdminの設定については、なにか、コツというようなものがあるのでしょうか?
どなたか、御存じでしたら、教えてください。
jinchan
« 最終編集者 jinchan 日時 2009 年 2 月 13 日(金) 2:07. »
会員
登録者: 10 2007
返信数: 71
コマンドシェルからそのスクリプトを実行してみませんか?。
$ cd /opt/lampp/htdocs/sample/chapter1/1-14
$ php 237.php

もしかしたらエラーメッセージが読めるようになるかもしれませんし、意外と「許可されていないファイル操作です」のようなワーニングかもしれません。
phpがファイルシステムにアクセスしたところ、何らかの原因で失敗してDebianのシステムから日本語のエラーメッセージが返されてきたことが原因ではないかと考えています。しかもDebianのシステムがUTF-8だったりとか・・・。
まずはここから確認されてみてはいかがでしょうか?。
会員
登録者: 2 2009
返信数: 7
kona@mさん
ありがとうございます。

小生まだ、初心者なので、phpコマンドがどこにあるのか、
よくわからないのですが、とりあえずの結果は、つぎのとおりでした。

debian:/opt/lampp/htdocs/sample/chapter1/1-14$ php 237.php
bash: php: command not found

debian:/opt/lampp/bin# php 237.php
bash: php: command not found

もうすこし、コマンドのありかを含めて調べてみたいと思います。
jinchan
会員
登録者: 10 2007
返信数: 71
私もxamppについては良く知らなかったのですが、少し調べてみたら、このようにしなければならなかったかもしれませんね。

$ cd /opt/lampp/htdocs/sample/chapter1/1-14
$ /opt/lampp/bin/php 237.php


あとphpmyadminでの文字化けの件ですが、php.iniでのmbstringがすべてはずしてある状態ですと、どういった動作をするか試したことがないのでわからないです。mbstringの設定をした上での動作確認が必要になるかもしれません。
管理者
登録者: 10 2005
返信数: 38
#一つ一つ解きほぐすためにそもそもなぜその警告が出るのか,phpMyAdmin辺りは後回しにします

まず,mbstringは全部コメントアウトが一番シンプルで確実です.
mbstringの挙動をあるレベル以上に正確に理解されるまではphp.iniや.htaccessでの設定をされることは避けることを強くお勧めします.
また,phpinfo()などでmbstringの設定が「Off」「no value」「pass」「neutral」「0」のいずれかになっていることを確認しておくといいと思います.

で,
http://bbs.php.gr.jp/topic-post310.html#post310
で掲載されたスクリプトはEUC-JP以外の文字エンコードで作成していませんか?
または http://bbs.php.gr.jp/topic-post309.html#post309 でお話したようにブラウザーの文字エンコードがどういう選択になっているか,EUC-JP以外の認識をしていそうなら手動でEUC-JPに変更してみましたか?
会員
登録者: 2 2009
返信数: 7
ELFさん
ありがとうございます。

phpinfo() の mbstring の設定は、下記のとおりです。

Multibyte Support          enabled
Multibyte string engine      libmbfl
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 3.7.1

なお、このPHPは、本日、xampp のバージョンダウンをしたので、
xampp1.5.3a のPHPでありまして、PHP Version 5.1.4のものです。
バージョンダウンしたわけを申しますと、いろいろ、サイトを見ていたら、
phpMyAdminのデータベース日本語文字化けをなおすのは、大変だということに
気がつきました。
それで、以前に、少し調べていた、やや、姑息な手段なんですが、
phpmyadminの表紙の日本語表示プルダウンメニュー内に、euc,sjis,utf-8
の選択肢が表示できるように変更することが可能な最新バージョンのxamppは、
何か、ということで、xamppの旧バージョンをいろいろ調べていたら、
1.5.3a だということがわかりましたので、このバージョンのxamppを
ダウンロードして、展開したあと、
/opt/lampp/phpmyadmin/libraries/database_interface.lib.phpファイル内の
function PMA_DBI_postConnect($link, $is_controluser = false)内の
3つめの if 文を
require_once('./libraries/charset_conversion.lib.php');
に簡略化することにより、一応phpmyadminの文字化け問題は解決した、ということに
しました。(なお、最新バージョンのxamppでも、なおしようがあるのでしたら、
ご教示いただければありがたいです。)

しかし、依然として、最初の問題は、このバージョンダウンしても解決していません。
前置きが長くなってすみませんでしたが、

>また,phpinfo()などでmbstringの設定が「Off」「no value」「pass」「neutral」「0」のいずれかになっていることを確認しておくといいと思います.

と言われましたが、小生の設定は、どうやら問題のようだと思いますが、
もし、そうだとすれば、この設定を変えるには、どのようにすればよいので
しょうか?
手順など教えてください。
すみません、何回も。
jinchan
« 最終編集者 jinchan 日時 2009 年 2 月 14 日(土) 15:32. »
会員
登録者: 2 2009
返信数: 7
kona@mさん
ありがとうございます。

ご提案のコマンドを打ったところ、

���������
���顼���å�����

このような応答がありました。
この菱形は、原文は、六角形でした。
よろしくお願いします。
jinchan
管理者
登録者: 10 2005
返信数: 38

Multibyte Support          enabled
Multibyte string engine      libmbfl
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma)
version 3.7.1


これはこれで別にいいです.mbstring.internal_encodingとかいろいろ出てきませんでしたか?

引用
なお、このPHPは、本日、xampp のバージョンダウンをしたので、
xampp1.5.3a のPHPでありまして、PHP Version 5.1.4のものです。
バージョンダウンしたわけを申しますと、いろいろ、サイトを見ていたら、
phpMyAdminのデータベース日本語文字化けをなおすのは、大変だということに
気がつきました。


これはxampp全体ではなく,xampp自体は(多分)最新のもの,phpMyAdminのバージョンのみxampp1.5.3aに同梱されるものにするといいと思います.
上記理由はある時点からphpMyAdminの文字エンコードの取り扱い方針が変わった影響に引っかかっていると思ったということです.
個人的に思うところはありますが正論は控えておきます.あと解決したなら解決したでとりあえずいいですが(苦笑

っで,該当スクリプトの文字エンコードの再確認はしていただけましたか?
会員
登録者: 2 2009
返信数: 7
ELFさん

なるほど、XAMPPだけ、最新にして、phpMyAdminだけ、以前のものにする、
と言う考えは、気がつきませんでした。
どうもありがとうございました。

それで、本題ですが、はい、文字エンコードは、ブラウザ(Iceweasel)上で
いろいろ変えましたが、文字化けは、改善されませんでした。
>該当スクリプトの文字エンコードの再確認
ということは、以上でよろしいでしょうか?
jinchan
管理者
登録者: 10 2005
返信数: 38
引用
それで、本題ですが、はい、文字エンコードは、ブラウザ(Iceweasel)上で
いろいろ変えましたが、文字化けは、改善されませんでした。
>該当スクリプトの文字エンコードの再確認
ということは、以上でよろしいでしょうか?


ありがとうございます.確認したかったことがちょっとわかりづらかったですね.
1点の確認手段としてはそれになります.
どちらかというと本命? だったのはもう1点の方で,もう少し正確に書いてみますね.
「該当のスクリプトをエディタで開き,文字エンコードが何になっているかご確認ください」
です.理由は該当のスクリプトがEUC-JP以外で保存されているのではないかと邪推しています.

根拠としては(といっても邪推ですが…)エディターがgedit,ウェブサーバーがXAMPPということでクライアントがUNIX/Linux,サーバーがWindowsになると邪推します(ホント?
その場合,ファイル転送などで文字エンコードの自動変換とかがされているということはないですか?
たとえば普通のHTMLをEUC-JPで記述し(EUC-JPでHTMLを記述し,metaでEUC-JPをちゃんと指定してください),スクリプトと同様にXAMPPで表示して問題は発生しませんか?
ファイル転送時に自動変換が発生している場合,同様に問題が再現してしまう可能性があります.

ほかにも何か問題が発生しそうなことは想像できますか? たとえばapacheのAddDefaultCharsetはどのような設定になっているか確認できますか?
http://httpd.apache.org/docs/2.2/ja/mod/core.html#adddefaultcharset
XAMPPは正直ほとんど使ったことがないので不適格ですが,ある環境ではISO-8859-1やUTF-8が指定されており,指定された文字エンコード以外では期待通りの表示がされないというケースもありました.
会員
登録者: 10 2007
返信数: 71
ELFさんのとは別の切り口なので、もし混乱しないようでしたら試してみて下さい。

次のようにして、コマンドシェルから例のテストスクリプトを実行してみて下さい。コマンドが一つ増えています。
$ cd /opt/lampp/htdocs/sample/chapter1/1-14
$ export LC_MESSAGES=C
$ /opt/lampp/bin/php 237.php

ちょっと自信もないのですが、もしかしたら応答の文字化けしていた部分が英語に変わったりしませんか?。

一旦セッションを閉じるかシステムを再起動すると、LC_MESSAGESの設定を元に戻すことができるはずです。
管理者
登録者: 10 2005
返信数: 38
老婆心ですが,kona@m さんの例を試すときは

$ cd /opt/lampp/htdocs/sample/chapter1/1-14
$ LC_MESSAGES=C /opt/lampp/bin/php 237.php


とすると再起動とか設定しなおしとか不要になります.参考まで.

ネタ的にのっかると

$ cd /opt/lampp/htdocs/sample/chapter1/1-14
$ LC_MESSAGES=C /opt/lampp/bin/php 237.php > 237.log 2&>1


という風にアレンジしてPHPスクリプトを実行すると237.phpがあるディレクトリーに237.logというファイルができるともいます.
それを文字エンコードの自動認識をするエディターで開いてみて,EUC-JPとして開くかどうか調べるアプローチもあります.


#しかし問題の本質は別のところなのであまりに長引くなら次に行ったほうがいいのかなぁ

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » Debian4-XAMPP1.7-PHPでのエラーMSG内日本語文字化け

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています