我想使用PHP从SFTP服务器的大文件(30MB)中获取最后15行。
我尝试使用phpseclib的SFTP功能,例如:
include('./Net/SFTP.php');
$sftp = new Net_SFTP("server", 2022);
if (!$sftp->login('username', 'password')) {
exit("Login error");
}
$size = $sftp->size('./file.txt');
$Container = nl2br($sftp->get('./file.txt', false, $size - 5000));
if( !empty($Container) ) {
echo $Container;
} else {
exit("empty file");
}
但是对于我的大文件,这仍然需要2分钟的加载时间。
是否可以从大文件中仅获取最后X行?
答案 0 :(得分:3)
以下内容应导致从文件末尾起至少15行的文本斑点,然后可以使用现有逻辑进一步处理。您可能需要调整一些逻辑,具体取决于文件是否以尾随换行符结尾,等等。
$filename = './file.txt'
$filesize = $sftp->size($filename);
$buffersize = 4096;
$offset = $filesize; // start at the end
$result = '';
$lines = 0;
while( $offset > 0 && $lines < 15 ) {
// work backwards
if( $offset < $buffersize ) {
$offset = 0;
} else {
$offset -= $buffer_size;
}
$buffer = $sftp->get($filename, false, $offset, $buffer_size));
// count the number of newlines as we go
$lines += substr_count($buffer, "\n");
$result = $buffer . $result;
}