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
| Parametro | Descrizione |
|---|---|
$zip | L'handle dell'archivio restituito da zip_open(). |
$zip_entry | Un handle di elemento restituito da zip_read(). |
$mode | La modalità di accesso. La vecchia estensione zip supportava solo l'accesso in lettura, quindi questo parametro è di fatto sempre "r". |
L'argomento
$passwordvisto in alcuni riferimenti obsoleti non è mai stato funzionale nell'estensionezipinclusa; 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.