par
JazzFinder » 10 sept. 2006, 17:02
Un script que j’avais dans mes archives. Je ne peux te garantir la compatibilité avec des versions récentes de PHP.
Très pratique pour produire des zip à la volée de répertoires, et les consulter offline.
Dans ce cas, tu peux donner un lien .php à ton fichier zippé. En cliquant dessus, le «zippage» du répertoire se fait à la volée. Très pratique aussi quand le contenu de ce répertoire change, mais qu’on désire avoir un zip toujours actuel. Dans ce cas, pas besoin d’offrir un fichier .zip, qui nécessiterait une certaine maintenance, mais, comme je le disais, donner un zip dynamique avec une extension .php
Pour que ça marche, ce nouveau fichier .php aura le même nom que celui du répertoire zippé, et doit résider dans le même répertoire (source).
Supposons que ton répertoire s'appelle
dir, ton lien doit être qqchose du genre:
www.ton_site.com/.../.../dir.php
<?php
// Ce script zippe un répertoire et son contenu à la volée et le rend disponible
// Obtenir le nom de ce fichier php, sans extension, qui est également le nom du répertoire à zipper
$filename_no_ext=str_replace(".php","",basename($SCRIPT_NAME));
// On livre le fichier zip
header("Content-Type: archive/zip");
// Nom sous lequel le navigateur doit sauvegarder le fichier zip
header("Content-Disposition: attachment; filename=$filename_no_ext".".zip");
// Obtenir un nom temportaire (tmp) pour le .zip
$tmp_zip = tempnam ("tmp", "tempname") . ".zip";
// Zipper tout dans le fichier tmp_zip
`zip -r $tmp_zip $filename_no_ext`;
// Calculer la taille du zip. Ceci est nécessaire pour la barre de progression du navigateur
$filesize = filesize($tmp_zip);
header("Content-Length: $filesize");
// Livrer le fichier zip
$fp = fopen("$tmp_zip","r");
echo fpassthru($fp);
// clean up the tmp zip file
`rm $tmp_zip `;
?>
Notes:
- Le fichier .php (et donc le nom du répertoire) ne doit pas contenir de caractères spéciaux, ni des espaces (des blancs).
- Attention aux headers. Pas d'espace avant leur envoi.
Un script que j’avais dans mes archives. Je ne peux te garantir la compatibilité avec des versions récentes de PHP.
Très pratique pour produire des zip à la volée de répertoires, et les consulter offline.
Dans ce cas, tu peux donner un lien .php à ton fichier zippé. En cliquant dessus, le «zippage» du répertoire se fait à la volée. Très pratique aussi quand le contenu de ce répertoire change, mais qu’on désire avoir un zip toujours actuel. Dans ce cas, pas besoin d’offrir un fichier .zip, qui nécessiterait une certaine maintenance, mais, comme je le disais, donner un zip dynamique avec une extension .php
Pour que ça marche, ce nouveau fichier .php aura le même nom que celui du répertoire zippé, et doit résider dans le même répertoire (source).
Supposons que ton répertoire s'appelle [i]dir[/i], ton lien doit être qqchose du genre: [i]www.ton_site.com/.../.../dir.php[/i]
[php]<?php
// Ce script zippe un répertoire et son contenu à la volée et le rend disponible
// Obtenir le nom de ce fichier php, sans extension, qui est également le nom du répertoire à zipper
$filename_no_ext=str_replace(".php","",basename($SCRIPT_NAME));
// On livre le fichier zip
header("Content-Type: archive/zip");
// Nom sous lequel le navigateur doit sauvegarder le fichier zip
header("Content-Disposition: attachment; filename=$filename_no_ext".".zip");
// Obtenir un nom temportaire (tmp) pour le .zip
$tmp_zip = tempnam ("tmp", "tempname") . ".zip";
// Zipper tout dans le fichier tmp_zip
`zip -r $tmp_zip $filename_no_ext`;
// Calculer la taille du zip. Ceci est nécessaire pour la barre de progression du navigateur
$filesize = filesize($tmp_zip);
header("Content-Length: $filesize");
// Livrer le fichier zip
$fp = fopen("$tmp_zip","r");
echo fpassthru($fp);
// clean up the tmp zip file
`rm $tmp_zip `;
?>[/php]
Notes:
- Le fichier .php (et donc le nom du répertoire) ne doit pas contenir de caractères spéciaux, ni des espaces (des blancs).
- Attention aux headers. Pas d'espace avant leur envoi.