どうも、最近、Chrome Loggerという存在を知りました、時代の波に取り残されまくってます。ハマってる音楽は、Of Monsters And Men です、最近は聞けてないけど。
Chrome Loggerとは
何でも、Chromeブラウザの拡張機能らしいです。オンリーChrome?Yes, We Can!
というわけで、残念ながらChrome以外では使えません。
Chrome Logger - Server side application debugging によりますと、
- Python - http://github.com/ccampbell/chromelogger-python
- PHP - http://github.com/ccampbell/chromephp
- Ruby - http://github.com/cookrn/chrome_logger
- Node.js
- .NET - http://github.com/ChrisMissal/chromelogger
- ColdFusion - http://github.com/s992/chromelogger-cf
- Go - https://github.com/pilu/traffic-chromelogger
- Java - https://code.google.com/p/chromelogger4j
- Perl - https://metacpan.org/pod/Web::ChromeLogger
- Classic ASP - https://github.com/danielmarcoto/asp2console
結構な数のサーバーサイド言語で使えるようです。
PHPで試してみました
PHPでの導入の仕方については下記サイトを参考にさせていただきました。
・PHPからChromeにログ出力「Chrome Logger」 : アシアルブログ
・Chrome Loggerを使ってPHPのデバッグをコンソール画面から確認してみる。 - Qiita
・PHP開発時におけるデバッグ/プロファイリングの手段・ツール3+2選 | 東北ギーク
今回こんな感じのフォルダ構成(C:¥xampp¥htdocs¥test)
php_moduleフォルダを作って、
https://github.com/ccampbell/chromephp のフォルダをダウンロードしてきて配置してます。(ChromePhp.phpファイルだけあれば良いみたいです)
で、ブラウザ側でChrome Loggerという拡張機能を入れます。
Chrome Logger - Chrome ウェブストア - Google
拡張機能が追加出来たら、Chrome Loggerを使いたいページでChrome Loggerのアイコンをクリックします。青くなったらOK。
無効
有効
で、使ってみたのですが、
ただ、echo文の後に記述するとエラーが出てしまうという謎現象が起こってます。
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>登録店舗チェック</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <?php // パスの区切り文字の補完 $DS = DIRECTORY_SEPARATOR; // phpをconsoleに表示してくれるdebbugツールChrome Logger(Chrome限定のようです) require_once(dirname(__FILE__). $DS.'php_module'. $DS .'chromephp-master'. $DS .'ChromePhp.php'); // 残すべき店舗一覧 $array_shops_list = array(); // 依頼主からの店舗情報(最終的に登録したい店舗) $file = dirname(__FILE__). '/shop.txt'; // 配列に格納 $array_kanon_shop = @file($file, FILE_IGNORE_NEW_LINES); // いま、管理画面側で登録されてしまっている店舗一覧 $dom = new DOMDocument('1.0', 'UTF-8'); $dom-&gt;preserveWhiteSpace = false; $dom-&gt;formatOutput = true; // 本番環境とテスト環境を判定 $S_AD = $_SERVER['SERVER_ADDR']; $R_AD = $_SERVER['REMOTE_ADDR']; // 本番環境 if(substr($S_AD,0,mb_strrpos($S_AD,'.')) != substr($R_AD,0,mb_strrpos($R_AD,'.'))){ $dom-&gt;load(dirname(__FILE__)."/production/wordpress.2017-05-22.xml"); ChromePhp::log("本番環境"); } else { // ローカル環境 $dom-&gt;load(dirname(__FILE__)."/testing/wordpress.2017-05-22.xml"); ChromePhp::log("テスト環境"); } $xpath = new DOMXPath($dom); // wordpress.2017-05-22.xmlのtitleの部分のみ取得 $result = $xpath-&gt;query('//channel/item/title'); // 店舗リスト出力用ファイル $shop_regist_list_file = 'shop_regist_list_file.txt'; $shop_delete_list_file = 'shop_delete_list_file.txt'; // 登録すべき店舗 $shop_regist_list_string = ''; // 削除すべき店舗 $shop_delete_list_string = ''; // 繰り返し処理で残すべき店舗を検索 foreach($result as $node){ // 登録すべき店舗 if(in_array($node-&gt;nodeValue, $array_kanon_shop, true)){ $shop_regist_list_string .= $node-&gt;nodeValue. PHP_EOL; echo '&lt;div class="register"&gt;&lt;span&gt;' . $node-&gt;nodeValue . "&lt;/span&gt;&lt;/div&gt;"; } else { // 削除すべき店舗 $shop_delete_list_string .= $node-&gt;nodeValue. PHP_EOL; echo '&lt;div class="delete"&gt;&lt;span&gt;' . $node-&gt;nodeValue . "&lt;/span&gt;&lt;/div&gt;"; } // ChromePhp::log($node); ← コメントアウトを外すとエラー } // ファイルに出力 file_put_contents($shop_regist_list_file, $shop_regist_list_string); file_put_contents($shop_delete_list_file, $shop_delete_list_string); ?> </body> </html>
Chromeのデベロッパーツールの『検証』で「Console」を見てみると、確かにConsoleでPHPの情報が見れました!でも、var_dump() のほうが好きだけど、var_dump()が使えない環境では良いかもしれないです、Chrome限定ですが。
※ 開発環境以外では、ChromePhp.phpは読み込まないほうが良いようです。
コメントアウトを外したときのエラーの内容が、
『Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\index.php:59) in C:\xampp\htdocs\test\php_module\chromephp-master\ChromePhp.php on line 394』
となっていてました。
⇩ 下記サイトによりますと、phpのheader関数で起こる現象のようです
・よくあるPHP エラー Warning: Cannot modify header information - headers already sent by - ウェブ管理者の日常
Chrome LoggerのChromePhp::log() の部分で内部的にheader()関数が使われているってことですかね?
すみません、下記サイトで言及されていました、header()関数を内部で使っているようです。
・PHP開発時におけるデバッグ/プロファイリングの手段・ツール3+2選 | 東北ギーク
⇧ また、プロファイリングという言葉も初めて知りました。
PHPでChrome Loggerを使う際は気をつけたいですね。
ちょっと、しばらくWordmoveから脱線しそうです。
⇩ 本番とローカルの判定についての参考
・PHP - PHPでローカルサーバーかを判定する(37010)|teratail
今回はこのへんで。