|
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();
|
$contenu = file_get_contents($nom_file);
|
$zip->addFile($contenu, $nom_file);
|
file_put_contents($nom_zip, $zip->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';
|
if (!is_dir($testDir)) {
|
mkdir($testDir, 0755, true);
|
file_put_contents("$testDir/file1.txt", "Contenu du fichier 1");
|
file_put_contents("$testDir/file2.txt", "Contenu du fichier 2");
|
|
mkdir("$testDir/subdir", 0755, true);
|
file_put_contents("$testDir/subdir/file3.txt", "Contenu du fichier 3");
|
}
|
|
// 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;
|
|
if (is_dir($directory)) {
|
$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!!