Aller au contenu

Sujets conseillés

Posté

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.

Posté

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

Posté

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 ?

Veuillez vous connecter pour commenter

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



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