投稿者 |
投稿 |
|
#1 2008 年 2 月 5 日(火) 20:29
|
会員
登録者: 2 2008
返信数: 7
|
OS: Windows XP SP2 Webサーバ: Apache 2.0.63 PHPバージョン: 5.2.5
php.ini の設定で拡張モジュールの php_sqlite.dll のロードエラーのエラーメッセージで文字化けします。 メッセージは以下のとおり。
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\php\\ext\\php_sqlite.dll' - \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83\x82\x83W\x83\x85\x81[\x83\x8b\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r\n in Unknown on line 0
エラーの原因は php_pdo.dll がロードされてないことだと判ってはいるんですが、上記のとおり日本語と思われる部分が文字化けしています。 ログファイルの文字コードを変更して読み替えてもダメでした。
PHP のバージョンで、5.1.6 や 5.2.6 なども試してみたのですが、状況は変わりません。 配布されているバイナリでなく、ソースをコンパイルするしかないのかと考えていますが、何か設定の変更で日本語のエラーメッセージを表示させることができるのでしょうか?
よろしくお願いします。
|
|
#2 2008 年 2 月 6 日(水) 12:45
|
会員
登録者: 2 2008
返信数: 3
|
文字化けした箇所をデコードすると 「指定されたモジュールが見つかりません。」 となります。
根本的な原因は不明...
|
|
#3 2008 年 2 月 6 日(水) 13:01
|
会員
登録者: 2 2008
返信数: 7
|
デコードの文字コードはなんでしょうか? 私が使用しているテキストエディタで文字コードをいろいろと変えて読み込んでも、文字化けの箇所は変わりませんでした。文字コードを変えて読み込みなおせばデコードすることになると思ってたんですが、違ってるんでしょうか・・・
話を元に戻しますが、PHP のマニュアルを調べると、 php_sqlite.dll は先に php_pdo.dll をロードしてないといけないようで、 php_pdo.dll を先にロードさせるようにするば、エラーメッセージは出力されなくなりました。
エラーメッセージが文字化けしてると不具合が発生したときに解析が困難になるため、とても困ります。
|
|
#4 2008 年 2 月 6 日(水) 13:53
|
会員
登録者: 2 2008
返信数: 3
|
文字コードはsjisですね。 テキストエディタ等で\xを%に置換してURLデコードすれば解読できます。
スマートな方法ではありませんが、気休め程度には使えます^^;
|
|
#5 2008 年 2 月 6 日(水) 20:23
|
会員
登録者: 2 2008
返信数: 7
|
URLエンコードされていたんですか・・・ てっきり文字コード違いで文字化けしてると思ってました。
|
|
#6 2008 年 2 月 6 日(水) 23:09
|
会員
登録者: 2 2008
返信数: 7
|
でもどうしてエンコードされた状態で出力されるのでしょう? クエリ文字列でもないのに、エラーメッセージをエンコードする必要があるのか疑問です。
|
|
#7 2008 年 2 月 10 日(日) 14:56
|
会員
登録者: 10 2007
返信数: 71
|
あまり詳しくないのですが、ちょっと気になったので参考までに・・・。 'C:\\php\\ext\\php_sqlite.dll' というDLLの読み込みに失敗しているようですが、\が2つ重なっているのが気になります。 php.ini で、 extension_dir="C:\\php\\ext\\" となっているようでしたら、 extension_dir="C:\php\ext\" としてみてはどうでしょうか? 引用 (phpマニュアルより) ; バックスラッシュは他の文字と同様に処理されます include_path = ".;c:\php\lib"
また私の勝手な推測ですが、「ログにはもともと日本語対応していないんだけど、DLLを呼び出そうとして日本語のエラーメッセージが返ってきたので、無視するのもなんなんで、とりあえずエンコードして記録しておきました」という感じに見えます。
|
|
#8 2008 年 2 月 10 日(日) 19:01
|
会員
登録者: 2 2008
返信数: 7
|
php.ini には \ は2つ連続で書いていません。\ はエスケープ文字だから2つ連続で書いているのではないでしょうか。
エラーメッセージをエンコードするのが仕様ならしかたないのですが、それならマニュアルのどこかに書いていて欲しいところですね。
|
|
#9 2008 年 2 月 11 日(月) 23:25
|
会員
登録者: 10 2007
返信数: 71
|
OS: Windows XP SP2 Webサーバ: Apache 2.0.63 Win32バイナリ PHPバージョン: 5.2.5 Win32バイナリ Apache2モジュール動作
すみません、自分もインストールしてみたのですが、\の数については気にしすぎだったようです。 extension_dir="C:\\php\\ext\\" extension_dir="C:\php\ext\" どちらもgdやmbstringが有効になっていました。
ただ、ログファイル中のマルチバイトがURLエンコードされる現象は再現できませんでした。 URLエンコードされずにSHIFT-JIS / CRの出力でした。 AN-httpd 1.42nのCGI動作でも同様でした。 Apache2のCGI動作はまだ試していませんが・・・。(やったことないので)
お役に立てませんでしたが、とりあえず報告まで。
|
|
#10 2008 年 2 月 12 日(火) 19:44
|
会員
登録者: 2 2008
返信数: 7
|
わざわざインストールして試していただき、ありがとうございます。
OSもWebサーバもPHPも同じバージョンみたいですが、再現しないのですか・・・ マルチバイトがきちんと日本語で表示されてたんでしょうか?
んーますます不思議ですね。
|
|
#11 2008 年 2 月 14 日(木) 17:10
|
会員
登録者: 2 2008
返信数: 7
|
自己レスです。
php.ini の error_log ディレクティブにログファイルのパス、または"syslog"を指定して Apache のエラーログにエラーメッセージを出力しないようにしたところ、ログファイルの内容、 Windows のイベントログ共に、エラーメッセージのマルチバイト部分が日本語で表示されました。
単に Apache のエラーログがマルチバイトに対応してないだけなのかも知れない、もしくは Apache の設定がおかしいのかもしれません。
|