W3docs

zip_entry_open()

La funzione zip_entry_open() in PHP apre un elemento in un archivio zip per leggerne il contenuto. Deprecata in PHP 7.4 e rimossa in PHP 8.0.

⚠️ Avviso di deprecazione: La funzione zip_entry_open() appartiene alla vecchia estensione zip, deprecata in PHP 7.4 e rimossa in PHP 8.0. Gli esempi seguenti sono forniti solo a scopo storico. Per le applicazioni PHP moderne, utilizzare invece la classe ZipArchive.

zip_entry_open() prepara un singolo elemento (file) all'interno di un archivio zip aperto, in modo che il suo contenuto possa essere letto. Funziona in sinergia con zip_open(), zip_read() e zip_entry_read(): si apre l'archivio, si itera fino a un elemento, lo si apre, quindi lo si legge. Senza chiamare prima zip_entry_open(), una chiamata a zip_entry_read() non avrebbe nulla da leggere.

Questa pagina tratta la firma della funzione, i suoi parametri e il valore restituito, un esempio completo di lettura di un elemento e — soprattutto — il moderno sostituto ZipArchive che dovreste usare oggi.

Sintassi

resource zip_entry_open(resource $zip, resource $zip_entry, string $mode = "r")

Parametri

ParametroDescrizione
$zipL'handle dell'archivio restituito da zip_open().
$zip_entryUn handle di elemento restituito da zip_read().
$modeLa modalità di accesso. La vecchia estensione zip supportava solo l'accesso in lettura, quindi questo parametro è di fatto sempre "r".

L'argomento $password visto in alcuni riferimenti obsoleti non è mai stato funzionale nell'estensione zip inclusa; viene ignorato.

Valore restituito

Restituisce true in caso di successo o false in caso di errore. Nonostante il tipo hint storico resource, non si ottiene un nuovo handle — si continua a passare lo stesso handle $zip_entry a zip_entry_read().

Esempio di utilizzo

Esempio: Lettura di un file da un archivio zip

Aprire l'archivio, spostarsi su un elemento, aprire quell'elemento, leggerlo e fare pulizia:

$zip = zip_open("example.zip");

if (is_resource($zip)) {
    while ($zip_entry = zip_read($zip)) {
        // Prepare this entry for reading
        if (zip_entry_open($zip, $zip_entry, "r")) {
            $name     = zip_entry_name($zip_entry);
            $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

            echo "$name: $contents\n";

            zip_entry_close($zip_entry);
        }
    }
    zip_close($zip);
}

Qui zip_open() apre l'archivio, zip_read() avanza su ciascun elemento, zip_entry_open() rende l'elemento corrente leggibile e zip_entry_read() restituisce i suoi byte. Abbinare sempre ogni apertura riuscita con zip_entry_close(), e chiudere l'archivio con zip_close() al termine.

Alternativa moderna: la classe ZipArchive

Per ottenere lo stesso risultato in PHP 8.0+, utilizzare la classe integrata ZipArchive:

$zip = new ZipArchive;

if ($zip->open('example.zip') === true) {
    // Loop over every entry by index
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $name     = $zip->getNameIndex($i);
        $contents = $zip->getFromIndex($i);

        echo "$name: $contents\n";
    }
    $zip->close();
}

ZipArchive non richiede un passaggio separato di "apertura dell'elemento": getFromIndex() (o getFromName()) legge il contenuto di un elemento direttamente, e funziona in ogni versione moderna di PHP.

Conclusione

In questo articolo abbiamo discusso la funzione PHP zip_entry_open() e come può essere utilizzata per aprire un file in un archivio zip. Abbiamo spiegato cosa fa la funzione, la sua sintassi, e fornito un esempio di come può essere utilizzata in uno scenario pratico. Si noti che zip_entry_open() è deprecata e rimossa in PHP 8.0; per i progetti moderni, utilizzare la classe ZipArchive per aprire e leggere file in un archivio zip.

Pratica

Pratica
Cosa fa la funzione ZipEntry::open() in PHP?
Cosa fa la funzione ZipEntry::open() in PHP?
Was this page helpful?