Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP ZipArchive-搜索字符串的条目内容_Php_Zip - Fatal编程技术网

PHP ZipArchive-搜索字符串的条目内容

PHP ZipArchive-搜索字符串的条目内容,php,zip,Php,Zip,我想在压缩文件夹中搜索给定字符串的文件 通过以下操作,我当前可以获得压缩文件的列表: $zip = new ZipArchive; $res = $zip->open("./test.zip"); var_dump($res); for( $i = 0; $i < $zip->numFiles; $i++ ){ $stat = $zip->statIndex( $i ); var_dump($stat['name']); } $zip->close(

我想在压缩文件夹中搜索给定字符串的文件

通过以下操作,我当前可以获得压缩文件的列表:

$zip = new ZipArchive;
$res = $zip->open("./test.zip");
var_dump($res);
for( $i = 0; $i < $zip->numFiles; $i++ ){
    $stat = $zip->statIndex( $i );
    var_dump($stat['name']);
}
$zip->close();
$zip=新的ZipArchive;
$res=$zip->open(“./test.zip”);
var_dump($res);
对于($i=0;$i<$zip->numFiles;$i++){
$stat=$zip->statidex($i);
变量转储($stat['name']);
}
$zip->close();
我一直在回顾找到的解决方案。似乎触及我所需内容的唯一解决方案是程序性的,并有以下注释:

$zip = new ZipArchive;
$res = $zip->open("./test.zip");
var_dump($res);
for( $i = 0; $i < $zip->numFiles; $i++ ){
    $stat = $zip->statIndex( $i );
    var_dump($stat['name']);
}
$zip->close();
默认情况下,zip\u条目\u read只能从文件中读取1024字节。。所以 内容不是文件的完整内容,而是仅前1024个字节

在我选择解压文件夹之前,有没有一种(OOP)方法可以搜索我所有的条目中的字符串?此外,如果我想显示压缩文件的全部内容,是否需要先解压缩?最后,如果未解压缩就无法显示完整内容,是否有方法从压缩文件夹中提取单个文件?

您可以使用或ZipArchive::getFromIndex()读取压缩文件内容

$zip = new ZipArchive;
$res = $zip->open("./test.zip");
for( $i = 0; $i < $zip->numFiles; $i++ ){
    var_dump($zip->getFromIndex($i));
}
$zip->close();
$zip=新的ZipArchive;
$res=$zip->open(“./test.zip”);
对于($i=0;$i<$zip->numFiles;$i++){
var_dump($zip->getFromIndex($i));
}
$zip->close();

如果要搜索每个文件的内容,则无论发生什么情况,都必须进行解压缩。它可能不会以基于磁盘的格式发生,但会发生在某个地方,例如内存中。仅供参考,压缩文件就是这样工作的

我将放弃基于OOP的
ZipArchive
类,它是命中还是未命中,取决于是否存在与基于函数的方法相对应的方法


如果要搜索文件的内容,需要将字节数作为对应条目的第二个参数传递给。要获取字节数,请调用

$zip=zip_open('./file.zip');
而($entry=zip\u read($zip)){
//这是未压缩的大小
$true\u size=zip\u entry\u filesize($entry);
//通读
$true\u entry=zip\u entry\u read($entry,$true\u size);
$idx=mb_strpos($true_entry,'您正在查找的字符串');
如果($idx){
回声‘找到了!’;
}
}
循环中的变量
$true\u entry
将是一个单独的文件,您可以使用