xamppへのXdebugのインストールと設定

諸般の都合でXdebugが必要になった。
インストールしようと、いろいろググってみると
大半の情報が、\xampp\php\extにxdebug.dllが存在し
php.iniにもその指定がコメントで記述してあること
を前提としたもの。
つい最近、phpを5.6.30にv-upした所為なのだろうか、
私の環境にはそれが無いし、
php.iniにもそのような記述がない。

とは言え、あちこち調べて朧げに分かったことは、
Xdebugのインストールとは、次の内容の作業ことを
言うらしいとのこと。
(1)Xdebugをダウンロードする。
(2)ダウンロードした dll を\xampp\php\extに配置する。
(3)php.ini にxdebug 情報を追記する。
(このことは、GitHubに端的に記述してありました。)

今回は、こちらから「PHP 5.6 VC11 TS (32 bit) 」をダウンロードしました。
xampp phpのv-upで、64bit版のインストールができなかったので
32bit版をダウンロードしています。

これを(2)にコピーして、php.iniの最下部に次の行を追加します。

[XDebug]
zend_extension = "c:\xampp\php\ext\php_xdebug-2.5.0-5.6-vc11.dll"
xdebug.remote_autostart = 1
xdebug.profiler_append = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "c:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_log="c:\xampp\tmp\xdebug.txt"
xdebug.remote_port = 9000
xdebug.trace_output_dir = "c:\xampp\tmp"
; 3600 (1 hour), 36000 = 10h
xdebug.remote_cookie_expire_time = 36000

なお、

zend_extension = "c:\xampp\php\ext\php_xdebug-2.5.0-5.6-vc11.dll"

の部分は、自分の環境やダウンロードしたXdebugに基づいて変更する
必要があります。

変更したphp.iniを保存後は、xamppコントロール・パネルから
Apacheを、stop→start としてphp.iniの変更を反映させます。

PHP loadHTMLFile に再びハマる

PHP DOM操作における文字化けで1回既にハマっていたのに、今回また同じ様にハマってしまった。
しかも、2日がかりで。
悔しいので、今回気付いた点を纏めておきたい。

(1)UTF-8Nで書いたソースは何にエンコードされるのか?

UTF-8(BOMあり)にエンコードされるようです。
試しに、sample.htmlをUTF-8(BOMあり)で保存して実行すると
文字化けをせず、正しく表示されます。

(2)loadHTMLFile()以外の場合は?

$sou = file_get_contents(./sample.html);
echo &sou;

として確認してみると、文字化けはしません。
と言うことは

$dom = new DOMDocument();  // ①
@$dom->loadHTML($sou);     // ②

②の中で、HTMLのmeta情報に基づいてコードが変換される
と言うことなのでしょう。

(3)php.iniとの関連は?

本件に関しては、、全く関連なしでした。
原因が(2)にあるので、当然と言えば当然です。
いろいろと、2日間ももがき苦しんだ中で、php.iniのmbstringの設定が
推奨されなく成っている所が何点かあるのが分かりました。

対策ついでに、PHP-5.4.7からPHP-5.6.30にバージョンアップも
行いましたが、php.iniのmbstringの設定を以下の通り変更しています。

名前 設定値 説明
mbstring.language Japanese コメントを外しただけです
mbstring.encoding_translation Off コメントを外しました

mbstring.http_input,mbstring.http_output,mbstring.internal_encoding
は、5.6.0以降は非推奨とのことなので、コメントのままにしてあります。