Aller au contenu

Supprimer un fichier après son téléchargement


salcamden

Sujets conseillés

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'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.

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...