zip_open()
La funzione zip_open() è una funzione built-in di PHP usata per aprire un file archivio zip. Restituisce una risorsa archivio zip utilizzabile per leggere
Nota:
zip_open()è stata deprecata in PHP 7.1 e rimossa in PHP 8.0. Questa funzione è fornita solo per compatibilità con il codice legacy. Per le applicazioni PHP moderne, usa invece la classeZipArchive.
La funzione zip_open() è una funzione built-in di PHP che veniva utilizzata per aprire un file archivio zip. La funzione restituisce una risorsa archivio zip che può essere usata per leggere e manipolare il contenuto dell'archivio.
Sintassi
La sintassi della funzione zip_open() è la seguente:
Sintassi della funzione zip_open() in PHP
resource zip_open(string $filename [, int $flags [, string &$error ]])Dove:
$filenameè il percorso del file archivio zip da aprire.$flagsè un intero facoltativo di flag che modificano il modo in cui l'archivio viene aperto. In pratica questo parametro viene usato raramente e di solito viene passato come0.$errorè una variabile di riferimento facoltativa. Quando l'apertura fallisce, PHP la imposta su un codice di errore numerico in modo da poter scoprire perché l'apertura è fallita.
In caso di successo la funzione restituisce una risorsa archivio zip (un handle opaco). In caso di errore restituisce false oppure, in alcune build, un codice di errore intero — quindi verifica sempre il risultato prima di utilizzarlo.
Perché è stata rimossa?
zip_open() appartiene alla vecchia API Zip procedurale (zip_open(), zip_read(), zip_close() e gli helper zip_entry_*()). Questa API è stata deprecata in PHP 7.1 e rimossa completamente in PHP 8.0. Il sostituto è la classe orientata agli oggetti ZipArchive, più veloce, in grado sia di leggere che di scrivere archivi, ed è la versione ancora mantenuta oggi.
Esempi d'uso
Confrontiamo l'approccio legacy con quello moderno che dovresti effettivamente utilizzare.
Esempio: Apertura di un archivio Zip (API legacy)
Supponiamo di avere un file archivio zip example.zip e di volerlo aprire. Con la vecchia API si chiamerebbe zip_open() e si verificherebbe il risultato:
Apertura di un file archivio Zip in PHP (solo PHP < 8.0)
$zip = zip_open("example.zip");
// On failure the function returns an integer error code instead of a resource.
if (is_resource($zip)) {
echo "Archive opened successfully.";
zip_close($zip);
} else {
echo "Failed to open archive. Error code: " . $zip;
}Questo tenta di aprire example.zip. Poiché la funzione restituisce una risorsa in caso di successo ma un codice di errore intero in caso di fallimento, il controllo più sicuro è is_resource(). La lettura o l'estrazione delle voci richiede poi le funzioni companion zip_read(), zip_entry_open() e zip_entry_read() — tutte rimosse anch'esse in PHP 8.0.
Esempio: L'equivalente moderno con ZipArchive
Su qualsiasi versione PHP supportata (7.x e 8.x), esegui la stessa operazione con la classe ZipArchive. ZipArchive::open() restituisce true in caso di successo o un codice di errore in caso di fallimento:
Apertura e lettura di un archivio zip con ZipArchive
$zip = new ZipArchive();
if ($zip->open("example.zip") === true) {
echo "Archive opened. It contains {$zip->numFiles} file(s).\n";
// Read the first entry's name as an example.
if ($zip->numFiles > 0) {
echo "First entry: " . $zip->getNameIndex(0) . "\n";
}
$zip->close();
} else {
echo "Failed to open archive.\n";
}ZipArchive mantiene i passaggi di apertura, ispezione e chiusura in un unico oggetto ben documentato, e a differenza dell'API legacy può anche creare e modificare archivi con addFile() e addFromString().
Conclusione
In questo articolo abbiamo discusso la funzione legacy zip_open() — la sua sintassi, i parametri $flags e $error, i valori di ritorno e come verificare il risultato con is_resource(). Poiché zip_open() è stata rimossa in PHP 8.0, trattala solo come riferimento storico di sola lettura: le applicazioni moderne dovrebbero usare la classe ZipArchive per una gestione degli archivi affidabile e sicura. Vedi anche zip_read() e zip_close() per il resto dell'API legacy.