|
|
|
|
@ -414,49 +414,6 @@ class Util {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Fetch the last lines of a file efficiently
|
|
|
|
|
* @note Safe to use on large files; does not read entire file to memory
|
|
|
|
|
* @note Derivative of http://tekkie.flashbit.net/php/tail-functionality-in-php
|
|
|
|
|
*/
|
|
|
|
|
public function tail($filename, $numLines) {
|
|
|
|
|
|
|
|
|
|
\OC_FileProxy::$enabled = false;
|
|
|
|
|
|
|
|
|
|
$text = '';
|
|
|
|
|
$pos = -1;
|
|
|
|
|
$handle = $this->view->fopen($filename, 'r');
|
|
|
|
|
|
|
|
|
|
while ($numLines > 0) {
|
|
|
|
|
|
|
|
|
|
--$pos;
|
|
|
|
|
|
|
|
|
|
if (fseek($handle, $pos, SEEK_END) !== 0) {
|
|
|
|
|
|
|
|
|
|
rewind($handle);
|
|
|
|
|
$numLines = 0;
|
|
|
|
|
|
|
|
|
|
} elseif (fgetc($handle) === "\n") {
|
|
|
|
|
|
|
|
|
|
--$numLines;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$block_size = (-$pos) % 8192;
|
|
|
|
|
if ($block_size === 0 || $numLines === 0) {
|
|
|
|
|
|
|
|
|
|
$text = fread($handle, ($block_size === 0 ? 8192 : $block_size)) . $text;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fclose($handle);
|
|
|
|
|
|
|
|
|
|
\OC_FileProxy::$enabled = true;
|
|
|
|
|
|
|
|
|
|
return $text;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Check if a given path identifies an encrypted file
|
|
|
|
|
* @param string $path
|
|
|
|
|
|