setFlags(\SplFileObject::DROP_NEW_LINE | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY); foreach( new \LimitIterator($file, 0, $limit) as $i => $rowData){ if(is_callable($rowParser)){ // custom parser for row data -> manipulate $data by ref $rowParser($rowData, $data); }else{ $data[] = $rowData; } } }else{ \Base::instance()->error(500, sprintf(self::ERROR_STREAM_READABLE, $sourceFile)); } } return $data; } /** * validate offset * @param int $offset * @return int */ public static function validateOffset(int $offset): int{ if( $offset < self::LOG_FILE_OFFSET_MIN || $offset > self::LOG_FILE_OFFSET_MAX ){ $offset = self::LOG_FILE_OFFSET; } return $offset; } /** * validate limit * @param int $limit * @return int */ public static function validateLimit(int $limit): int{ if( $limit < self::LOG_FILE_LIMIT_MIN || $limit > self::Log_File_LIMIT_MAX ){ $limit = self::LOG_FILE_LIMIT; } return $limit; } }