忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/03/29 20:33 |
ZF1.11:Zend_Log_Writer_Streamはファイルをロックしていない
簡単にログを保存できるZend_Logですが、使用法によっては大問題に。

公式リファレンスでは
	$writer = new Zend_Log_Writer_Stream('/path/to/logfile');
	$logger = new Zend_Log($writer);
	$logger->info('Informational message');
というサンプルが書かれているわけですが、この書き方は全くお薦めできません。
何故ってZend_Log_Writer_Streamのソース見ればわかります。
以下はZend_Log_Writer_Streamの概要。
	Zend_Log_Writer_Stream{
	function __construct(){
		$this->_stream = fopen('/path/to/logfile', 'a');
	}
	function _write(){
		fwrite($this->_stream, $string));
	}
	function shutdown(){
		fclose($this->_stream);
	}
}
何が問題って何処にもflock()が無え!

試してみましょう。
<?php
	session_start();
	
	//Zend_Log
		require_once('Zend/Log.php');
		require_once('Zend/Log/Writer/Stream.php');
		$writer = new Zend_Log_Writer_Stream('/path/to/logfile');
		$logger = new Zend_Log($writer);
		
	//開始
		$logger->info('開始:'.session_id());
	//時間のかかる処理
		sleep(5);
	//終了
		$logger->info('終了:'.session_id());

複数のブラウザで同時に実行します。

   2011-01-01T00:00:00+09:00 INFO (6): 開始:p987n76eq664t68mk6grangmm7
   2011-01-01T00:00:01+09:00 INFO (6): 開始:osp8sov2orkfq0gaeir09b7vp3
   2011-01-01T00:00:05+09:00 INFO (6): 終了:p987n76eq664t68mk6grangmm7
   2011-01-01T00:00:06+09:00 INFO (6): 終了:osp8sov2orkfq0gaeir09b7vp3

見事にロックされていません。
結果として、アクセスが集中するとログが消えたり壊れたりする可能性があります。
といって外からflock()をかける手段もありません。
これは欠陥といっていいのでは。
PR


2011/04/22 22:24 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2011/04/24 | HOME | ZF1.11 Zend_Cloudその2>>
忍者ブログ[PR]