ZipArchive::getStream

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

ZipArchive::getStream β€” ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ дСскриптор Ρ„Π°ΠΉΠ»Π° элСмСнта, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ элСмСнта (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния)

ОписаниС

public function 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("ошибка\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 ZIP-ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XML

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

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • ZipArchive::getStreamIndex() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ„Π°ΠΉΠ»Π° для записи, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π΅Ρ‘ индСксом (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния)
  • ZipArchive::getStreamName() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ„Π°ΠΉΠ»Π° для записи, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π΅Ρ‘ ΠΈΠΌΠ΅Π½Π΅ΠΌ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния)
  • Π‘ΠΆΠ°Ρ‚Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 2 notes

up
3
Sbastien ΒΆ
3 years ago
Here a way to handle specific files from a zip archive without full extract :

<?php

$zip_file = '/path/to/file.zip'; // I wan to get stream a CSV files

$zip = new ZipArchive();
$zip->open($zip_file);
for ($i = 0; $i < $zip->numFiles; $i++) { // Check file by file
    $name = $zip->getNameIndex($i); // Retrieve entry name
    $extension = pathinfo($name, PATHINFO_EXTENSION);
    if ($extension === 'csv') { // I want to handle csv files
        $stream = $zip->getStream($name); // No stream index access before PHP 8.2
        // Starting PHP 8.2 $zip->getStreamIndex() or $zip->getStreamName()
        // Do stuff with $stream
        // ...
    }
}
up
0
oleg at andreyev dot lv ΒΆ
4 years ago
Keep in mind that this stream is not rewindable/seekable.