PHPのvar_dumpをChromeのconsole.logとして出力する

2014年01月09日

こないだPHPでデバッグする際に使う echo とか var_dump をChromeデベロッパーツールのコンソール画面に表示させる拡張が話題になったので僕も入れてみたけど動かなかったから自作した。

つかコンソールに出したかったらスクリプトタグとダンプされた文字列を吐き出せば良いだけじゃね?と思ったからとりあえず試してみたって感じです。変なことにはならないと思うけど正しいかどうかは分かんない。

一応デバッグだしechoじゃなくてvar_dumpの内容を表示させたいんだけど、そうしたい場合はvar_dumpで表示される内容を表示させずに変数に入れないといけないってのでまずつまづいた。WordPressみたいに get_ つければ表示じゃなくて値の取得とか出来れば良いのにね。

でも一応方法はあるみたい。どうやら ob_start() から ob_end() までの間で var_dump してそのあと ob_get_content() すれば値をキャッチできるみたい。obはオブジェクトかと思ったら output buffering なんですね。PHPおもしれーな。

参考: var_dumpの出力を変数に渡す – 桜ヶ丘日記

で、取得した変数を console.log()の中にぶっ込むわけですが、もう一手間必要。いや二手間かな。改行とシングルクオートの処理。

dumpの値は普通に改行されてて読みやすいんですけど、そのままだとconsole.log()に入ってくれない。これ改行されてるからエラーになるんだよね?多分。なので改行を削除して、代わりに文字列としてnを入れる。で、console.log() の中に入れるときにダブルクオートで囲めばコンソール上では改行されるという寸法ですね。

後もう一点がシングルクオート。dumpの値の中にシングルクオートがないとは限らないからこれも削除。削除というか便宜上ダブルクオートにすれば良いと思う。ざっとみたい程度の用途だろうしシングルでもダブルでもだいじょうぶでしょ。コンソール上で判断つかないといけないようなコード書いてんじゃねーよって話。

というわけでそんなこんなでできあがったのがこちらです。

// php
/*
 * console()
 * Chromeのコンソールにvar_dumpする関数
 * @auther muyuu
 * @param  ???
 * @return false
 */
function console ( $d ) {
  // var_dump を変数に入れる
  ob_start();
  var_dump($d);
  $dump = ob_get_contents();
  ob_end_clean();

  // 文字列をサニタイズとかconsole.logで見やすいように
  $dump = str_replace(array("rn","r","n"), 'n', $dump);
  $dump = str_replace("'", '"', $dump);

  // scriptタグとconsole.logを出力
  $str = "≶script>";
  $str .= "console.log('" . $dump. "');";
  $str .= "</script>";
  echo $str;
  return;
}

何の保証もしないし上で触れたChrome拡張だったら折りたたみもできたり色分けもされてたりするみたいだし色々やりたい場合はそっちを使えば良いと思うけどサクッと確認したい程度だし、ってくらいだったらこの関数を共通で読み込むファイルに潜ませて見ても良いんじゃないでしょうかね。僕的には気に入ってるからこれからはechoの代わりに使うと思う。 c() とかのエイリアスも作れば何かいい感じな気がする。

あと、拡張の記事はこれな。

参考: PHPからChromeにログ出力「Chrome Logger」 : アシアルブログ

あとあれね。こういうデバッグ系の関数だから、公開フラグみたいなのが設定されてたりするんだろうし、その辺のフラグを引数に入れといてtrueだったら出力させないとかにしといた方が親切設計かな。

他にこんな事も書いてます

FBでコメント