salcamden Posté 13 Juin 2008 Posté 13 Juin 2008 Bonjour, 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 : <?php// Ici, le script de vérification d'autorisation...// fin du script d'autorisationinclude('./_inc/pclzip.lib.php');// Fonction d'effacement récursif d'un dossierfunction 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'archivedeltree('./_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 .zipunlink($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.
rdd Posté 13 Juin 2008 Posté 13 Juin 2008 Bonjour, Et que donne un exec('rm -f $fichier') a la place de ton unlink ? Peut-etre est-ce aussi une question de droit (l'archive ne doit pas etre creee avec les droits suffisants pour la suppression).
Kioob Posté 14 Juin 2008 Posté 14 Juin 2008 Hello, s'il n'est pas déjà activé un "ignore_user_abort()" est peut-être nécessaire afin d'assurer l'exécution du unlink(), non ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant