SQLの窓

2013年11月28日


PHP の簡易ログとしては file_put_contents が使われますが、表現方法をいろいろテストして行くと、PHP のバージョンを 5.4.0 以上にして json_encode を使いたくなります。

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 でページに読み込んでいますが、このままでは実用で使えません。このような手法を実際のページで使う為には、出力ファイルはセッション単位で作成する必要がありますし、不要になった時( 一定時間経過後等 )の削除方法をシステム的に実装しなければなりません。



タグ:JSON PHP
【PHPの最新記事】
posted by lightbox at 2013-11-28 19:04 | PHP | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり