PHP - 寻找文件句柄指向zip文件?

buf*_*uff 6 php seek

我想在zip存档中打印文件的特定行(比如说第200行).我正在尝试以下方法:

$file = new SplFileObject("zip://archive.zip#file.txt");
$file->seek(200);
echo $file->key() . "\n";
echo $file->current(); 
Run Code Online (Sandbox Code Playgroud)

但我明白了

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
Run Code Online (Sandbox Code Playgroud)

如果我解压缩文件并创建SplFileObjectwith参数"file.txt",它可以正常工作.它是否记录在寻求不适用于压缩文件的任何地方?我无法找到它.或者我做错了什么?谢谢.

Jen*_*och 3

好问题。您想要的行为由您使用的语法清楚地表达。我认为这是一个错误。您可以在http://bugs.php.net报告它。该流应在内部进行无回滚处理并进行缓存。

被警告!SplFileObject 的解决方案非常疯狂。

需要 NoRewind 来禁止倒带。那么就需要Cache来在内部存储流内容并使其可查找。然后需要 LimitIterator 来查找第 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);
}
Run Code Online (Sandbox Code Playgroud)