PHP の 5.4.0 以降では、json_encode の第二引数にフラグを設定して、とても便利で見やすい文字列が作成できます。JSON_PRETTY_PRINT (integer) 返される結果の書式を、スペースを使って整えます。 JSON_UNESCAPED_SLASHES (integer) / をエスケープしません。 JSON_UNESCAPED_UNICODE (integer) マルチバイト Unicode 文字をそのままの形式で扱います (デフォルトでは \uXXXX にエスケープします)。一応、マイナーバージョンをチェックして、使え無いバージョンの場合は第二引数を使わない処理にしています。テストに使っている配列は、$_SERVER( 連想配列 ) と get_declared_classes() で出力される通常配列です。単純にログにキーが必要な場合は当然 print_r( 内容, true ) が良いと思いますが、json_encode で出力される文字列は、さらにシンプルで他への転用にも便利です。特に、単純配列の場合は、json_encode では 内容のみとなっていてより見やすくなっています。 後からの使い道にっては、implode("\n",$target) も使い勝手が良いかもしれません。
<?php function log_test( $target, $file_name ) { $vm = explode( ".", PHP_VERSION ); $vm = $vm[1] + 0; // 結果を見るテストなので、6つだけ取り出す $target = array_slice($target, 0, 6 ); file_put_contents( $file_name, $target, FILE_APPEND ); file_put_contents( $file_name, "\n------------------------\n", FILE_APPEND ); file_put_contents( $file_name, implode("\n",$target), FILE_APPEND ); file_put_contents( $file_name, "\n------------------------\n", FILE_APPEND ); file_put_contents( $file_name, print_r($target,true), FILE_APPEND ); file_put_contents( $file_name, "\n------------------------\n", FILE_APPEND ); if ( $vm >= 4 ) { file_put_contents( $file_name, json_encode($target,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE), FILE_APPEND ); } else { file_put_contents( $file_name, json_encode($target), FILE_APPEND ); } file_put_contents( $file_name, "\n------------------------\n", FILE_APPEND ); } $file_target = "log.txt"; // クリア file_put_contents( $file_target, "" ); log_test($_SERVER,"log.txt"); log_test(get_declared_classes(),"log.txt"); ?> <pre><?= file_get_contents("log.txt") ?></pre> OK
▼ 出力結果
200/usr/local/bin:/usr/bin:/bin/home/winofsql/wwwtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8gzip,deflate,sdchja,en-US;q=0.8,en;q=0.6 ------------------------ 200 /usr/local/bin:/usr/bin:/bin /home/winofsql/www text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 gzip,deflate,sdch ja,en-US;q=0.8,en;q=0.6 ------------------------ Array ( [REDIRECT_STATUS] => 200 [PATH] => /usr/local/bin:/usr/bin:/bin [DOCUMENT_ROOT] => /home/winofsql/www [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch [HTTP_ACCEPT_LANGUAGE] => ja,en-US;q=0.8,en;q=0.6 ) ------------------------ { "REDIRECT_STATUS": "200", "PATH": "/usr/local/bin:/usr/bin:/bin", "DOCUMENT_ROOT": "/home/winofsql/www", "HTTP_ACCEPT": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "HTTP_ACCEPT_ENCODING": "gzip,deflate,sdch", "HTTP_ACCEPT_LANGUAGE": "ja,en-US;q=0.8,en;q=0.6" } ------------------------ stdClassExceptionErrorExceptionClosureDateTimeDateTimeZone ------------------------ stdClass Exception ErrorException Closure DateTime DateTimeZone ------------------------ Array ( [0] => stdClass [1] => Exception [2] => ErrorException [3] => Closure [4] => DateTime [5] => DateTimeZone ) ------------------------ [ "stdClass", "Exception", "ErrorException", "Closure", "DateTime", "DateTimeZone" ] ------------------------ OK
この処理では、file_put_contents で出力した内容を file_get_contents でページに読み込んでいますが、このままでは実用で使えません。このような手法を実際のページで使う為には、出力ファイルはセッション単位で作成する必要がありますし、不要になった時( 一定時間経過後等 )の削除方法をシステム的に実装しなければなりません。
|
【PHPの最新記事】
- ロリポップのモジュール版 PHP でエラーを出力する方法
- PHP : unset によるオブジェクトのプロパティのと配列の要素の削除
- レンタルサーバで PHP のバージョンを 5.4 から 5.6 に変更する時の注意事項
- 【3大手法】 PHP で変数を埋め込んだ画面定義を外部ファイルにして、ループ内で展開する
- PHP で pathinfo と mime 情報やその他を合体した、get_finfo 関数を使って、opendir からファイル一覧を出力
- Windows で、MySQL を使っているので phpMyAdmin で参照しようとして、AN HTTPD だと setup が動かなかったので Apache を入れようとしたらいろいろルールがあっ..
- PHP : ファイルのアップロード時のデータのダンプ( PHP 5.4.0 以降で利用可能な php://input での取得 / ASP / C# )
- PHP で問い合わせ画面のページリンクを常に5つ作成しておいて、jQuery でいらないリンクを非表示にする
- PHP : HTMLのinput要素のname属性に二次元配列を指定して getElementsByName と jQueryのinput[name='value']:eq(n) でアクセステスト
- さくらのサーバーで hash_hmac のアルゴリズムで使えるもの
- Pear を使用してダウンロード時のみ zip 圧縮してブラウザにデータを送る( プログレスバーはでません )
- Windows 環境で Pear のインストール
- PHP : php-5.3.1 の日付関数の注意点
- PHP : 暗号化と複合( libmcrypt )
- begin で始まるテキストで添付されたファイル(uuencode)を元に戻す方法