Je suis en train de développer un script de téléchargement de fichier .zip (assez volumineux).
Mon script fait les choses suivantes :
Vérification des droits de téléchargement
Création de l'archive à la volée
téléchargement de l'archive
suppression du fichier télécharger du serveur
Je butte sur la dernière étape, le fichier, une fois téléchergé n'est pas supprimé du serveur (le téléchargement est assez long car il s'agit de fichiers de plus de 100 Mo, généralement.
Voici le code :
CODE
<?php
// Ici, le script de vérification d'autorisation
...
// fin du script d'autorisation
include('./_inc/pclzip.lib.php');
// Fonction d'effacement récursif d'un dossier
function deltree($dossier){
if(($dir=opendir($dossier))===false)
return;
while($name=readdir($dir)){
if($name==='.' or $name==='..')
continue;
$full_name=$dossier.'/'.$name;
if(is_dir($full_name))
deltree($full_name);
else unlink($full_name);
}
closedir($dir);
@rmdir($dossier);
}
// Récupération des fichiers à intégrer au zip
$sql = "Recupération des infos";
//echo $sql;
$res = mysql_query($sql);
$album_courant = "";
$album_dossier = "";
$nb_res = mysql_affected_rows();
if($nb_res>0){
// Création du dossier temporaire
$tmp_nom_global = $_SESSION['id_membre'].time();
$tmp_dossier = './_tmp/'.$tmp_nom_global;
mkdir($tmp_dossier);
// copie des fichiers de packaging
copy('./_tmp/Conditions_Generales_de_Vente.pdf','./_tmp/'.$tmp_nom_global.'/Conditions_Generales_de_Vente.pdf');
copy('./_tmp/lienverslesite.URL','./_tmp/'.$tmp_nom_global.'/lienverslesite.URL');
while($fichier = mysql_fetch_array($res)){
// Pour chaque album
if($album_courant!=$fichier['nom_album']){
// création d'un dossier pour l'album en cours
$interdit=array(">", "<", ":", "*","\\", "/", "|", "?", " ", ",", ".", ";", "*", "#", "\"" );
$tmp_nom = str_replace($interdit, "_", $fichier['nom_album']);
$album_dossier = $tmp_dossier.'/'.$tmp_nom;
mkdir($album_dossier);
$album_courant = $fichier['nom_album'];
}
// copie du fichier courant dans le dossier correspondant
$interdit=array(">", "<", ":", "*","\\", "/", "|", "?", ",", ".", ";", "*", "#", "\"" );
$tmp_nom = str_replace($interdit, "_", $fichier['nom_cd']).".mp3";
// echo "source = "."./chemin/fichier/source/".$fichier['nom_cd'].".mp3";
copy("./chemin/fichier/source/".$fichier['id_cd'].".mp3",$album_dossier."/".$tmp_nom);
}
// Création du fichier d'archive
$archive = new PclZip('./_tmp/'.$tmp_nom_global.'.zip');
if ($archive->create($tmp_dossier, PCLZIP_OPT_REMOVE_PATH, '_tmp/'.$tmp_nom_global) == 0) {
die('Error : '.$archive->errorInfo(true));
}
// Suppression des fichiers et dossiers servant à créer l'archive
deltree('./_tmp/'.$tmp_nom_global);
// Transfert du fichier
$fichier = './_tmp/'.$tmp_nom_global.'.zip';
// Nous extrayons les informations grâce à $fichier
$fichier_nom = basename($fichier);
$fichier_taille = filesize($fichier);
// téléchargement du fichier
//header("Content-Type: application/octet-stream" );
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=hiphopcommunities_".$tmp_nom_global.".zip");
header("Content-Description: File Transfert" );
header("Content-Transfer-Encoding: binary" );
header("Content-Length: $fichier_taille" );
header("Pragma: no-cache" );
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
header("Expires: 0" );/**/
//echo $data;
readfile($fichier);
// effacement du .zip
unlink($fichier);
}
?>
// Ici, le script de vérification d'autorisation
...
// fin du script d'autorisation
include('./_inc/pclzip.lib.php');
// Fonction d'effacement récursif d'un dossier
function deltree($dossier){
if(($dir=opendir($dossier))===false)
return;
while($name=readdir($dir)){
if($name==='.' or $name==='..')
continue;
$full_name=$dossier.'/'.$name;
if(is_dir($full_name))
deltree($full_name);
else unlink($full_name);
}
closedir($dir);
@rmdir($dossier);
}
// Récupération des fichiers à intégrer au zip
$sql = "Recupération des infos";
//echo $sql;
$res = mysql_query($sql);
$album_courant = "";
$album_dossier = "";
$nb_res = mysql_affected_rows();
if($nb_res>0){
// Création du dossier temporaire
$tmp_nom_global = $_SESSION['id_membre'].time();
$tmp_dossier = './_tmp/'.$tmp_nom_global;
mkdir($tmp_dossier);
// copie des fichiers de packaging
copy('./_tmp/Conditions_Generales_de_Vente.pdf','./_tmp/'.$tmp_nom_global.'/Conditions_Generales_de_Vente.pdf');
copy('./_tmp/lienverslesite.URL','./_tmp/'.$tmp_nom_global.'/lienverslesite.URL');
while($fichier = mysql_fetch_array($res)){
// Pour chaque album
if($album_courant!=$fichier['nom_album']){
// création d'un dossier pour l'album en cours
$interdit=array(">", "<", ":", "*","\\", "/", "|", "?", " ", ",", ".", ";", "*", "#", "\"" );
$tmp_nom = str_replace($interdit, "_", $fichier['nom_album']);
$album_dossier = $tmp_dossier.'/'.$tmp_nom;
mkdir($album_dossier);
$album_courant = $fichier['nom_album'];
}
// copie du fichier courant dans le dossier correspondant
$interdit=array(">", "<", ":", "*","\\", "/", "|", "?", ",", ".", ";", "*", "#", "\"" );
$tmp_nom = str_replace($interdit, "_", $fichier['nom_cd']).".mp3";
// echo "source = "."./chemin/fichier/source/".$fichier['nom_cd'].".mp3";
copy("./chemin/fichier/source/".$fichier['id_cd'].".mp3",$album_dossier."/".$tmp_nom);
}
// Création du fichier d'archive
$archive = new PclZip('./_tmp/'.$tmp_nom_global.'.zip');
if ($archive->create($tmp_dossier, PCLZIP_OPT_REMOVE_PATH, '_tmp/'.$tmp_nom_global) == 0) {
die('Error : '.$archive->errorInfo(true));
}
// Suppression des fichiers et dossiers servant à créer l'archive
deltree('./_tmp/'.$tmp_nom_global);
// Transfert du fichier
$fichier = './_tmp/'.$tmp_nom_global.'.zip';
// Nous extrayons les informations grâce à $fichier
$fichier_nom = basename($fichier);
$fichier_taille = filesize($fichier);
// téléchargement du fichier
//header("Content-Type: application/octet-stream" );
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=hiphopcommunities_".$tmp_nom_global.".zip");
header("Content-Description: File Transfert" );
header("Content-Transfer-Encoding: binary" );
header("Content-Length: $fichier_taille" );
header("Pragma: no-cache" );
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
header("Expires: 0" );/**/
//echo $data;
readfile($fichier);
// effacement du .zip
unlink($fichier);
}
?>
Le dernier unlink ne semble pas s'éxécuter (je pense que le temps d'éxécution du script y est pour qqchose).
Merci.