PHP Conference Japan 2024

ZipArchive::getStream

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

ZipArchive::getStream取得由名稱定義的項目的檔案處理器 (唯讀)

說明

public ZipArchive::getStream(字串 $name): 資源|false

取得由名稱定義的項目的檔案處理器。目前,它僅支援讀取操作。

參數

name

要使用的項目名稱。

傳回值

成功時傳回檔案指標 (資源),失敗時傳回 false

範例

範例 #1 使用 fread() 取得項目內容並儲存

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

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

fclose($fp);
file_put_contents('t', $contents);
echo
"完成。\n";
}
?>

範例 #2 與前一個範例相同,但使用 fopen() 和 zip 資料流包裝器

<?php
$contents
= '';
$fp = fopen('zip://' . dirname(__FILE__) . '/test.zip#test', 'r');
if (!
$fp) {
exit(
"無法開啟\n");
}
while (!
feof($fp)) {
$contents .= fread($fp, 2);
}
echo
"$contents\n";
fclose($fp);
echo
"完成。\n";
?>

範例 #3 資料流包裝器和圖片,也可以與 xml 函式一起使用

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

另請參閱

新增註釋

使用者貢獻的註釋 2 則註釋

Sbastien
2 年前
以下是如何在不解壓縮整個壓縮檔的情況下處理壓縮檔中特定檔案的方法

<?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 進行操作
// ...
}
}
oleg at andreyev dot lv
2 年前
請記住,此串流不可倒回/搜尋。
To Top