diff --git a/classes/logstreamdisk.class.php b/classes/logstreamdisk.class.php index 1fd5532..c70d6b8 100644 --- a/classes/logstreamdisk.class.php +++ b/classes/logstreamdisk.class.php @@ -18,11 +18,13 @@ if ( !defined('IN_PHPLOGCON') ) */ class LogStreamDisk extends LogStream { private $_currentOffset = -1; + private $_currentStartPos = -1; private $_fp = null; private $_bEOF = false; const _BUFFER_LENGHT = 4096; private $_buffer = false; + private $_buffer_lenght = -1; private $_p_buffer = -1; // cache for backwards reading @@ -45,13 +47,17 @@ class LogStreamDisk extends LogStream { if(!file_exists($this->_logStreamConfigObj->FileName)) { return ERROR_FILE_NOT_FOUND; } - + $this->_fp = fopen($this->_logStreamConfigObj->FileName, 'r'); if ($bStartAtEOF) { fseek($this->_fp, 0, SEEK_END); } $this->_currentOffset = ftell($this->_fp); + $this->_currentStartPos = $this->_currentOffset; $this->_arrProperties = $arrProperties; + + // init read + $this->ReadNextBlock(); return SUCCESS; } @@ -69,8 +75,9 @@ class LogStreamDisk extends LogStream { } public function ReadNextBlock() { - echo 'in ReadNextBlock
'; + //echo 'in ReadNextBlock
'; $this->_buffer = fread($this->_fp, self::_BUFFER_LENGHT); + $this->_buffer_lenght = strlen($this->_buffer); $this->_p_buffer = 0; if ($this->_buffer == false) @@ -124,43 +131,28 @@ class LogStreamDisk extends LogStream { private function ReadNextForwards(&$uID, &$logLine) { if ($this->bEOF) { - return ERROR_FILE_BOF; + return ERROR_FILE_EOF; } - if (($this->_p_buffer == sizeof($this->_buffer)) && ($this->ReadNextBlock() != SUCCESS)) { + if (($this->_p_buffer == $this->_buffer_lenght) && ($this->ReadNextBlock() != SUCCESS)) { return ERROR_UNDEFINED; } - + $line = ''; do { - $pos = $this->_p_buffer; - do { - $ch = $this->_buffer[$pos]; - switch ($ch) { - case '\r': - case '\n': - $startPosOfLine = $this->_currentOffset - sizeof($line); - $this->_p_buffer = $pos + 1; - $this->_currentOffset++; - if ((($ch == '\r') && (($this->_p_buffer < sizeof($this->_buffer)) || ($this->ReadNextBlock() != SUCCESS))) && ($this->_p_buffer[$this->_p_buffer] == '\n')) { - $this->_p_buffer++; - $this->_currentOffset++; - } - // here a new line starts - $uID = $startPosOfLine; - $logLine = $line; - return SUCCESS; - case '\0': - $this->bEOF = true; - $uID = $this->_currentOffset - sizeof($line); - $logLine = $line; - return SUCCESS; - } - $line .= $ch; - $pos++; - $this->_currentOffset++; - } while ($pos < sizeof($this->_buffer)); + $pos = -1; + if (($pos = strpos($this->_buffer, "\n", $this->_p_buffer)) !== false) { + $logLine = $line . substr($this->_buffer, $this->_p_buffer, $pos - $this->_p_buffer); + $this->_currentOffset = $pos - $this->_p_buffer + 1; + $this->_p_buffer = $pos + 1; + $uID = $this->_currentStartPos; + $this->_currentStartPos = $this->_currentOffset; + return SUCCESS; + } + + $line .= substr($this->_buffer, $this->_p_buffer, $this->_buffer_lenght - $this->_p_buffer); + $this->_currentOffset += $this->_buffer_lenght - $this->_p_buffer; } while ($this->ReadNextBlock() == SUCCESS); return ERROR_UNDEFINED;