Downloader des fichiers [Résolu]

Signaler
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015
-
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015
-
Salut tout le monde... hm, voilà, j'aurais aimé faire un listing des fichiers se trouvant dans un dossier, le tout dans un tableau avec un petit png (par exemple : [°.°]) à côté, et un lien de téléchargement genre :

[°.°] image1.jpg 2mo download
[°.°] truczip.zip 1mo download
[°.°] image3.jpg 1ko download

etc...
Comment faire ça svp?

Mici de vos conseils.
ps: je suis graphiste et le code c du chinois pour moi, d'où ma question...

8 réponses

Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

aller voila pour toi

//listing du repertoire

$dir = "chemin vers le reprtoire";

$tabfile = array();//notre tableau qui vas contenir les fichier et les parametre que tu a defint ci-dessu c'est a dire la taille le nom de l'image et le lien de telechargement

//on verifie si le repertoire est valide
if (is_dir($dir)) {

// on ouvre le repertoire
$handle = opendir($dir);

$i =0; //compteur
//on le parcours
while ($file = readdir($handle)) {

//le '.' t le '..' sont les repertoire courant et sous dossier onc on evite des comptabiliser
if ($file !='.' && $file !='..') {
//on construit le tableau
//j'ai choisit que ca soit associatif pour te facilter la tache a l'affichage

$f_path = $dir.'/'.$file; //chemin du fichier
$f_size = filesize($f_path);/1024 // taille en ko
$f_name = $file;
$f_downlink = "download";
$tabfile[$i]['size'] = $f_size;
$tabfile[$i]['path'] = $f_path;
$tabfile[$i]['name'] = $f_name;
$tabfile[$i]['link'] = $f_downlink;
$i++;
}

}
}

//maintenat on affiche

$i=0;

for ($i = 0;$i <count($tabfile); $i++) {

echo $tabfile[$i]['name'].$tabfile[$i]'size'].
$tabfile[$i]['link']."
";
}

//ceci est la page qui vas lancer le telechargement tu y met
$file = $_GET['file'];
$filename = basename($file);
echo $filename;
$size = filesize($file);
header("Content-Type: image/jpeg");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename="$filename"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("location:$file");
et par miracle quand tu clique sur le lien le telechargement ce lance
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

Salut et merci pur le code.

Hm... je l'ai testé et après quelques erreurs qui s'affichaient ligne 24 (un slash) et ligne 43 (des points virgules et un crochet), il m'affiche ça :

chipie.jpegfichierbiduleqsdmflkj.txt981765
Warning: Cannot modify header information - headers already sent by (output started at /mnt/113/sdb/1/f/vegetalain/Beta/index.php:43) in /mnt/113/sdb/1/f/vegetalain/Beta/index.php on line 51

Warning: Cannot modify header information - headers already sent by (output started at /mnt/113/sdb/1/f/vegetalain/Beta/index.php:43) in /mnt/113/sdb/1/f/vegetalain/Beta/index.php on line 52

Warning: Cannot modify header information - headers already sent by (output started at /mnt/113/sdb/1/f/vegetalain/Beta/index.php:43) in /mnt/113/sdb/1/f/vegetalain/Beta/index.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at /mnt/113/sdb/1/f/vegetalain/Beta/index.php:43) in /mnt/113/sdb/1/f/vegetalain/Beta/index.php on line 54

Warning: Cannot modify header information - headers already sent by (output started at /mnt/113/sdb/1/f/vegetalain/Beta/index.php:43) in /mnt/113/sdb/1/f/vegetalain/Beta/index.php on line 55

Warning: Cannot modify header information - headers already sent by (output started at /mnt/113/sdb/1/f/vegetalain/Beta/index.php:43) in /mnt/113/sdb/1/f/vegetalain/Beta/index.php on line 56

Warning: Cannot modify header information - headers already sent by (output started at /mnt/113/sdb/1/f/vegetalain/Beta/index.php:43) in /mnt/113/sdb/1/f/vegetalain/Beta/index.php on line 57

Warning: Cannot modify header information - headers already sent by (output started at /mnt/113/sdb/1/f/vegetalain/Beta/index.php:43) in /mnt/113/sdb/1/f/vegetalain/Beta/index.php on line 58

alors les fichiers sont bien listés (chipie.jpegfichierbiduleqsdmflkj.txt981765), mais sans espace et en une ligne, et après je fais AAAAAAAAAAAAARGH 8D

ça correspond à ça dans ce que tu m'as donné :
header("Content-Type: image/jpeg");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename="$filename"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("location:$file");

Ca bugue où stp? :S..
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

non c'est pas un bug il ne doit pas y avoir un affichage avant d'appeler les fonction header de php c'est a dire tu ne peut pas faire

echo "test";
header("location:..."); etc...
ou bien placer du code html avant de les appeler je vais te proposer 2 solution
la premiere c'est de mettre le code dans une autre page dont le lien du download pointera
<?
//... au affichage au prealable
header("Content-Type: image/jpeg");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename="$filename"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("location:$file");

et pour la deuxieme solution c'est utiliser les fonction ob_start et ob_end_flush() si tu opte pour cette methode je poura te poster le code et les explication necessaire
?>
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

au fait et pour le listing des fichiers tu

echo "Fichier |
Taille |
Telecharger |

\";
for ($i = 0;$i <count($tabfile); $i++) {

echo \"----

".$tabfile[$i]['name'].",
".$tabfile[$i]'size'].",
".$tabfile[$i]['link'].",

\";
}
echo "
";

la taille du fichier est en octet tu poura la diviser par 1024 pour avoir la taille en ko
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

CA MAAAAAAAAAAAAAAAAAAAAARCHE... presque XD mdr

Ca s'affiche comme je veux merci beaucoup, cela dit kan je cliques s ur download, il pointe vers ça :

http://vegetalain.free.fr/Beta/download.php?file=trucs/chipie.jpeg

et kan je clique il maffiche une page d'erreur free genre, y'a rien 8/
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

euh... ben finalement j'ai viré "download.php?file=" et il affiche le fichier...
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

regarde bien l'url je ne vois pas que file pointe sur le chemein absolue vers le fichier tu a file = trucs/chipie.jpeg verifie bien l'url
sinon tu peut remplacer
header("location:$file"); par readfile($file);
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

Ca marche nickel ;)... j'ai fait le test avec deux fichier 7Z et ça roule...
http://vegetalain.free.fr/Beta/
:)
Reste à faire la tronche de la page...