我想打印zip归档文件中的某一行(比如第200行)。我正在尝试以下内容:
$file = new SplFileObject("zip://archive.zip#file.txt");
$file->seek(200);
echo $file->key() . "'n";
echo $file->current();
但是我得到
PHP Warning: SplFileObject::seek(): stream does not support seeking in script.php on line 2
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Cannot rewind file zip://archive.zip#file.txt' in script.php:2
如果我解压缩文件并创建带有参数"file.txt"
的SplFileObject
,它可以正常工作。是否在任何地方记录了查找对压缩文件不起作用?我找不到它。还是我做错了什么?谢谢。
问得好。所使用的语法清楚地表达了您想要的行为。我认为这是一个bug。你可以在http://bugs.php.net上举报。流应该在内部使用无倒带和缓存处理。
是警告!使用SplFileObject的解决方案不仅仅是野性。
需要NoRewind来禁止倒带。然后需要缓存在内部存储流内容并使其可搜索。然后使用限制器查找第200行
$obj = new SplFileObject("zip://archive.zip#file.txt");
$norewind = new NoRewindIterator($obj);
$caching = new CachingIterator($norewind);
$limit = new LimitIterator($caching, 200, 1);
foreach ($limit as $i => $line)
{
printf("%03d: %s", $i, $line);
}