$1 $2 $3'; /** * @var string The log file location. */ private $file; /** * MC4WP_Debug_Log_Reader constructor. * * @param $file */ public function __construct( $file ) { $this->file = $file; } /** * @return string */ public function all() { return file_get_contents( $this->file ); } /** * Sets file pointer to $n of lines from the end of file. * * @param int $n */ private function seek_line_from_end( $n ) { $line_count = 0; // get line count while( ! feof( $this->handle ) ) { fgets( $this->handle ); $line_count++; } // rewind to beginning rewind( $this->handle ); // calculate target $target = $line_count - $n; $target = $target > 1 ? $target : 1; // always skip first line because oh PHP header $current = 0; // keep reading until we're at target while( $current < $target ) { fgets( $this->handle ); $current++; } } /** * @return string|null */ public function read() { // open file if not yet opened if( ! is_resource( $this->handle ) ) { // doesn't exist? if( ! file_exists( $this->file ) ) { return null; } $this->handle = @fopen( $this->file, 'r' ); // unable to read? if( ! is_resource( $this->handle ) ) { return null; } // set pointer to 1000 files from EOF $this->seek_line_from_end( 1000 ); } // stop reading once we're at the end if( feof( $this->handle ) ) { fclose( $this->handle ); $this->handle = null; return null; } // read line, up to 8kb $text = fgets( $this->handle ); // strip tags & trim $text = strip_tags( $text ); $text = trim( $text ); return $text; } /** * @return string */ public function read_as_html() { $line = $this->read(); // null means end of file if( is_null( $line ) ) { return null; } // empty string means empty line, but not yet eof if( empty( $line ) ) { return ''; } $line = preg_replace( self::$regex, self::$html_template, $line ); return $line; } /** * Reads X number of lines. * * If $start is negative, reads from end of log file. * * @param int $start * @param int $number * @return string */ public function lines( $start, $number ) { $handle = fopen( $start, 'r' ); $lines = ''; $current_line = 0; while( $current_line < $number ) { $lines .= fgets( $handle ); } fclose( $handle ); return $lines; } }