ZipArchive::getStream

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)

ZipArchive::getStream获取其名称定义的条目的文件句柄(只读)

说明

public ZipArchive::getStream(string $name): resource|false

获取其名称定义的条目的文件句柄。目前,它只支持读操作。

参数

name

要使用的条目的名称。

返回值

成功时返回文件指针(资源),失败时返回 false

范例

范例 #1 使用 fread() 获取条目内容并将其存储

<?php
$contents
= '';
$z = new ZipArchive();
if (
$z->open('test.zip')) {
$fp = $z->getStream('test');
if(!
$fp) exit("failed\n");

while (!
feof($fp)) {
$contents .= fread($fp, 2);
}

fclose($fp);
file_put_contents('t',$contents);
echo
"done.\n";
}
?>

范例 #2 与上一个示例相同,但使用 fopen() 和 zip 流封装器

<?php
$contents
= '';
$fp = fopen('zip://' . dirname(__FILE__) . '/test.zip#test', 'r');
if (!
$fp) {
exit(
"cannot open\n");
}
while (!
feof($fp)) {
$contents .= fread($fp, 2);
}
echo
"$contents\n";
fclose($fp);
echo
"done.\n";
?>

范例 #3 流封装器和图像,也可以与 xml 函数一起使用

<?php
$im
= imagecreatefromgif('zip://' . dirname(__FILE__) . '/test_im.zip#pear_item.gif');
imagepng($im, 'a.png');
?>

参见

添加说明

用户贡献说明 2 条说明

2
Sbastien
2 年前
这里有一种方法可以处理 zip 存档中的特定文件,而无需完全提取

<?php

$zip_file
= '/path/to/file.zip'; // 我想获取 CSV 文件的流

$zip = new ZipArchive();
$zip->open($zip_file);
for (
$i = 0; $i < $zip->numFiles; $i++) { // 按文件检查文件
$name = $zip->getNameIndex($i); // 获取条目名称
$extension = pathinfo($name, PATHINFO_EXTENSION);
if (
$extension === 'csv') { // 我想处理 csv 文件
$stream = $zip->getStream($name); // 在 PHP 8.2 之前没有流索引访问
// 从 PHP 8.2 开始 $zip->getStreamIndex() 或 $zip->getStreamName()
// 对 $stream 进行操作
// ...
}
}
0
oleg at andreyev dot lv
2 年前
请记住,此流不可重绕/不可搜索。
To Top