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)を元に戻す方法






