W3docs

zip_entry_close()

La funzione zip_entry_close() in PHP chiudeva un handle zip_entry. Rimossa in PHP 8.0: usa ZipArchive.

⚠️ Deprecata e rimossa: Le funzioni zip_* (inclusa zip_entry_close()) sono state deprecate in PHP 7.4 e rimosse in PHP 8.0. Questo contenuto è conservato solo come riferimento legacy. Per PHP moderno, usa la classe ZipArchive.

La funzione zip_entry_close() era una funzione integrata in PHP utilizzata per chiudere un handle zip_entry. Quando si finisce di lavorare con un file in un archivio zip, è necessario chiudere l'handle usando zip_entry_close() per rilasciare la risorsa associata. (Nota: l'estensione zip legacy era principalmente in sola lettura, quindi la chiusura dell'handle non salva le modifiche all'archivio.)

Sintassi

La sintassi della funzione zip_entry_close() è la seguente:

Sintassi della funzione zip_entry_close() in PHP

void zip_entry_close(resource $zip_entry)

Dove $zip_entry è l'handle zip_entry restituito da zip_read(). (Nota: il tipo hint resource è legacy; questa funzione non esiste più in PHP 8.0+.)

Esempi di utilizzo

Vediamo un esempio pratico di utilizzo di zip_entry_close() in PHP.

Esempio: Chiudere un handle di una voce Zip

Supponiamo di aver aperto un archivio zip usando le funzioni zip di PHP e di aver estratto il contenuto di un file tramite zip_entry_read(). È necessario chiudere l'handle zip_entry usando zip_entry_close() una volta terminato, in questo modo:

Chiudere un handle di una voce Zip in PHP

$zip = zip_open("example.zip");
if ($zip !== false) {
    $zip_entry = zip_read($zip);
    if ($zip_entry !== false) {
        // do something with the contents of the zip entry
        zip_entry_close($zip_entry);
    }
    zip_close($zip);
}

Questo codice apre un archivio zip example.zip usando zip_open(), legge la prima voce con zip_read(), e (in un programma reale) la aprirebbe con zip_entry_open() e la leggerebbe con zip_entry_read(). Al termine, zip_entry_close() chiude l'handle zip_entry e rilascia la risorsa, e infine zip_close() chiude l'archivio stesso.

Iterare su ogni voce

In pratica, raramente si chiude una singola voce manualmente. zip_read() restituisce la voce successiva ad ogni chiamata e false quando non ce ne sono più, quindi un ciclo while chiude ogni handle man mano che procede:

$zip = zip_open("example.zip");
if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        zip_entry_open($zip, $entry);
        // process the entry, e.g. zip_entry_read($entry, zip_entry_filesize($entry));
        zip_entry_close($entry);   // free this entry before moving on
    }
    zip_close($zip);
}

Migrazione a ZipArchive

Poiché la famiglia zip_* non esiste più in PHP 8.0+, l'esempio precedente genererà Call to undefined function su un interprete moderno. La classe ZipArchive è la sostituzione supportata. Non richiede di chiudere le singole voci — si legge una voce per nome e si chiude l'intero archivio con close() una sola volta:

<?php
$zip = new ZipArchive();
if ($zip->open("example.zip") === true) {
    // read a file directly by its name inside the archive
    $contents = $zip->getFromName("readme.txt");
    echo $contents;
    $zip->close();   // closes the archive; no per-entry close needed
}

ZipArchive::close() sostituisce sia zip_entry_close() che zip_close(), e a differenza dell'estensione legacy in sola lettura, registra anche le modifiche apportate con addFile() o addFromString().

Conclusione

In questo articolo abbiamo esaminato la funzione legacy zip_entry_close(), la sua sintassi e come si inserisce nel flusso di lavoro zip_open()zip_read()zip_entry_close()zip_close(). Come indicato, queste funzioni sono state rimosse in PHP 8.0. Per lo sviluppo PHP moderno, è necessario migrare alla classe ZipArchive, che fornisce un'API robusta e orientata agli oggetti per creare, leggere e modificare archivi ZIP senza la gestione degli handle per singola voce.

Esercitazione

Pratica
Cosa fa la funzione zip_entry_close() in PHP?
Cosa fa la funzione zip_entry_close() in PHP?
Was this page helpful?