Gestire file Zip PHP
Finalmente, grazie alla recente versione 5.2.2, anche PHP ha un supporto nativo per la gestione degli archivi compressi in formato Zip.
Se utilizzate Windows recatevi nella sotto-cartella "ext" o "extensions" di PHP e controllare che sia presente la libreria "php_zip.dll"; se abbiamo scaricato l'ultima versione di PHP questa sarà sicuramente inserita tra le altre, quindi non ci rimarrà altro da fare che aprire il file di configurazione php.ini e decommentare la riga seguente eliminando il punto e virgola che la precede:
extension=php_zip.dllSalviamo il file di configurazione e riavviamo il Web server Apache, ora siamo pronti per gestire gli archivi con PHP sfruttando l'algoritmo di compressione più diffuso al mondo.
Innanzitutto vedremo come creare un file Zip contenente più documenti utilizzando la nostra nuova libreria:
<?php
$archivia = new ZipArchive();
$nome_file = "archivio.zip";
if ($archivia->open($nome_file, ZIPARCHIVE::CREATE)!==TRUE)
{
@exit("Impossibile aprire <$nome_file>\n");
}
$archivia->addFromString("file1.txt",
"Testo del primo file zippato\n");
$archivia->addFromString("file2.txt",
"Testo del secondo file zippato\n");
echo "Sono stati zippati: " . $archivia->numFiles . " file.\n";
$archivia->close();
?>
Come è facile notare dall'esempio proposto, lo scopo dello script è quello di creare un file ".zip" contenente due file di testo. Ma non ci siamo limitati ad archiviare i due file, infatti prima di far questo abbiamo inserito (scritto) del contenuto all'interno dei ".txt" che potrà essere letto una volta aperto l'archivio.
Nell'applicazione sono stati richiamati 4 metodi dell'oggetto ZipArchive():
- open(): apre l'archivio;
- addFromString(): scrive sul file da archiviare;
- numFiles(): conta i file archiviati;
- close(): chiude l'esecuzione.
<?php
$archivia = new ZipArchive();
$nome_file = "archivio2.zip";
if ($archivia->open($nome_file, ZIPARCHIVE::CREATE)!==TRUE)
{
@exit("Impossibile aprire <$nome_file>\n");
}
$archivia->addFromString("file1.txt",
"Testo del primo file zippato\n");
$archivia->addFromString("file2.txt",
"Testo del secondo file zippato\n");
$archivia->addFile("file3.txt");
echo "Sono stati zippati: " . $archivia->numFiles . " file.\n";
$archivia->close();
?>
La novità in questo caso è il metodo addFile() dell'oggetto ZipArchive() che si occupa appunto di incrementare il numero di documenti presenti nel file zip aggiungendone di nuovi.
Vediamo infine come leggere ed estrarre il contenuto di un file zippato:
<?php
$archivia = new ZipArchive();
$nome_file = 'archivio2.zip';
if ($archivia->open($nome_file)!==TRUE)
{
@exit("Impossibile aprire <$nome_file>\n");
}
echo "<pre>";
print_r($archivia);
var_dump($archivia);
echo "</pre>";
echo "L'archivio " .$nome_file. " contiene i seguenti file:\n <br>";
echo "<pre>";
for ($j=0; $j<$archivia->numFiles;$j++)
{
print_r($archivia->statIndex($j));
}
echo "</pre>";
$archivia->extractTo('./cartella/');
$archivia->close();
?>
Anche in quest'ultimo esempio troviamo due nuovi metodi: statIndex() per la lettura del contenuto dell'archivio e extractTo() che ci permette di estrarre i file nel percorso indicato come parametro al metodo.







