<?php
declare(strict_types=1);
require_once 'ZipFile.php';
/**
* EXEMPLES D'UTILISATION
* Ancien code vs Nouveau code PHP 8
*/
echo "=== EXEMPLES DE CRÉATION D'ARCHIVES ZIP ===\n\n";
// =====================================================
// EXEMPLE 1 : Usage basique (comme l'original)
// =====================================================
echo "--- Exemple 1 : Zipper un fichier unique ---\n\n";
// ? ANCIEN CODE
/*
$nom_file = 'fichier_a_zipper.php';
$nom_zip = 'fichier_zipper.zip';
$zip = new zipfile();
$fp = fopen($nom_file, 'r');
$contenu = fread($fp, filesize($nom_file));
fclose($fp);
$zip->addFile($contenu, $nom_file);
$open = fopen($nom_zip, 'wb');
fwrite($open, $zip->file());
fclose($open);
*/
// NOUVEAU CODE - Version simple (compatible)
$nom_file = 'ZipFile.php';
$nom_zip = 'archive_simple.zip';
$zip = new ZipFile();
$zip->addFile($contenu, $nom_file);
echo "? Archive créée : $nom_zip\n\n";
// NOUVEAU CODE - Version moderne (encore plus simple)
$zip = new ZipFile();
$zip->addFileFromPath('ZipFile.php');
$zip->saveToFile('archive_moderne.zip');
echo "? Archive créée : archive_moderne.zip\n\n";
// =====================================================
// EXEMPLE 2 : Zipper plusieurs fichiers
// =====================================================
echo "--- Exemple 2 : Zipper plusieurs fichiers ---\n\n";
$zip = new ZipFile();
// Ajoute plusieurs fichiers
$fichiers = ['ZipFile.php', 'zip_examples.php'];
foreach ($fichiers as $fichier) {
if (file_exists($fichier)) {
$zip->addFileFromPath($fichier);
}
}
$zip->saveToFile('plusieurs_fichiers.zip');
echo "? Archive créée avec " . $zip->getFileCount() . " fichier(s)\n\n";
// =====================================================
// EXEMPLE 3 : Zipper avec structure de dossiers
// =====================================================
echo "--- Exemple 3 : Archive avec dossiers ---\n\n";
$zip = new ZipFile();
// Ajoute des fichiers dans différents dossiers virtuels
$zip->addFile("Contenu du README", "docs/README.txt");
$zip->addFile("<?php echo 'Hello'; ?>", "src/index.php");
$zip->addFile("body { margin: 0; }", "css/style.css");
$zip->saveToFile('structure_dossiers.zip');
echo "? Archive créée avec structure de dossiers\n\n";
// =====================================================
// EXEMPLE 4 : Zipper un répertoire complet
// =====================================================
echo "--- Exemple 4 : Zipper un répertoire entier ---\n\n";
$zip = new ZipFile();
// Crée un dossier de test
$testDir = 'test_directory';
mkdir($testDir, 0755, true);
mkdir("$testDir/subdir", 0755, true);
}
// Ajoute tout le répertoire
$count = $zip->addDirectory($testDir, 'backup/', true);
$zip->saveToFile('repertoire_complet.zip');
echo "? Archive créée avec $count fichier(s) du répertoire\n\n";
// =====================================================
// EXEMPLE 5 : Zipper du contenu dynamique
// =====================================================
echo "--- Exemple 5 : Contenu dynamique ---\n\n";
$zip = new ZipFile();
// Génère du contenu dynamiquement
$rapport = "RAPPORT GÉNÉRÉ LE " . date('Y-m-d H:i:s') . "\n\n";
$rapport .= "Statistiques :\n";
$rapport .= "- Utilisateurs : 150\n";
$rapport .= "- Commandes : 87\n";
$zip->addFile($rapport, 'rapport_' . date('Ymd') . '.txt');
// Ajoute des données JSON
$data = [
'date' => date('Y-m-d'),
'stats' => ['users' => 150, 'orders' => 87]
];
$zip->addFile(json_encode($data, JSON_PRETTY_PRINT), 'data.json');
$zip->saveToFile('contenu_dynamique.zip');
echo "? Archive créée avec contenu généré\n\n";
// =====================================================
// EXEMPLE 6 : Téléchargement direct dans le navigateur
// =====================================================
echo "--- Exemple 6 : Téléchargement (simulation) ---\n\n";
// ?? Ne pas exécuter dans CLI, uniquement dans un contexte web
/*
$zip = new ZipFile();
$zip->addFile("Contenu du fichier", "fichier.txt");
$zip->addFile("Autre contenu", "autre.txt");
// Envoie directement au navigateur
$zip->download('mon_archive.zip');
exit;
*/
echo "? Pour téléchargement : utilisez \$zip->download('nom.zip')\n\n";
// =====================================================
// EXEMPLE 7 : Backup de fichiers avec timestamp
// =====================================================
echo "--- Exemple 7 : Backup avec timestamp ---\n\n";
$zip = new ZipFile();
// Liste des fichiers à sauvegarder
$fichiers_backup = ['ZipFile.php'];
foreach ($fichiers_backup as $fichier) {
if (file_exists($fichier)) {
$zip->addFileFromPath($fichier, "backup/$fichier");
}
}
// Nom avec timestamp
$backup_name = 'backup_' . date('Y-m-d_His') . '.zip';
$zip->saveToFile($backup_name);
echo "? Backup créé : $backup_name\n\n";
// =====================================================
// EXEMPLE 8 : Archive avec métadonnées
// =====================================================
echo "--- Exemple 8 : Archive avec métadonnées ---\n\n";
$zip = new ZipFile();
// Crée un fichier d'info
$metadata = [
'created' => date('Y-m-d H:i:s'),
'author' => 'Script PHP',
'version' => '1.0',
'files' => []
];
// Ajoute des fichiers et collecte les métadonnées
$fichiers = ['ZipFile.php'];
foreach ($fichiers as $fichier) {
if (file_exists($fichier)) {
$zip->addFileFromPath($fichier);
$metadata['files'][] = [
'name' => $fichier,
'size' => filesize($fichier),
'modified' => date('Y-m-d H:i:s', filemtime($fichier))
];
}
}
// Ajoute le fichier de métadonnées
$zip->addFile(json_encode($metadata, JSON_PRETTY_PRINT), 'metadata.json');
$zip->saveToFile('archive_avec_metadata.zip');
echo "? Archive créée avec métadonnées\n\n";
// =====================================================
// EXEMPLE 9 : Archivage sélectif par extension
// =====================================================
echo "--- Exemple 9 : Archiver par type de fichier ---\n\n";
function zipFilesByExtension(string $directory, string $extension, string
$outputZip): int
{
$zip = new ZipFile();
$count = 0;
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory,
RecursiveDirectoryIterator::SKIP_DOTS)
);
foreach ($iterator as $file) {
if ($file->isFile() && $file->getExtension() === $extension) {
$relativePath = substr($file->getPathname(), strlen($directory)
+ 1);
if ($zip->addFileFromPath($file->getPathname(), $relativePath))
{
$count++;
}
}
}
}
if ($count > 0) {
$zip->saveToFile($outputZip);
}
return $count;
}
$count = zipFilesByExtension('.', 'php', 'fichiers_php.zip');
echo "? $count fichier(s) .php archivé(s)\n\n";
// =====================================================
// EXEMPLE 10 : Compression multiple (batch)
// =====================================================
echo "--- Exemple 10 : Compression en lot ---\n\n";
$fichiers_a_zipper = [
'ZipFile.php' => 'classe.zip',
'zip_examples.php' => 'exemples.zip'
];
foreach ($fichiers_a_zipper as $source => $destination) {
if (file_exists($source)) {
$zip = new ZipFile();
$zip->addFileFromPath($source);
$zip->saveToFile($destination);
echo "? $source ? $destination\n";
}
}
echo "\n";
// =====================================================
// EXEMPLE 11 : Réutilisation de l'objet ZIP
// =====================================================
echo "--- Exemple 11 : Réutilisation avec reset() ---\n\n";
$zip = new ZipFile();
// Première archive
$zip->addFile("Contenu 1", "file1.txt");
$zip->saveToFile('archive1.zip');
echo "? archive1.zip créée\n";
// Réinitialise pour créer une nouvelle archive
$zip->reset();
// Deuxième archive
$zip->addFile("Contenu 2", "file2.txt");
$zip->saveToFile('archive2.zip');
echo "? archive2.zip créée\n\n";
// =====================================================
// RÉCAPITULATIF
// =====================================================
echo "=== RÉCAPITULATIF ===\n\n";
echo "Méthodes principales :\n";
echo "• addFile(\$content, \$name, \$time) - Ajoute du contenu\n";
echo "• addFileFromPath(\$filepath) - Ajoute un fichier existant\n";
echo "• addDirectory(\$dir, \$prefix) - Ajoute un répertoire\n";
echo "• saveToFile(\$filename) - Sauvegarde l'archive\n";
echo "• download(\$filename) - Téléchargement direct\n";
echo "• getZipData() / file() - Obtient les données ZIP\n";
echo "• getFileCount() - Nombre de fichiers\n";
echo "• reset() - Réinitialise l'archive\n";
echo "\n Tous les exemples exécutés avec succès !\n";
?>
Invité
21 Oct 2019 à 08:20Merci pour cette classe et l'exemple. Très bon code!!