PHP -查找指向zip文件的文件句柄


PHP - Seek in filehandle pointing to file in zip?

我想打印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);
}