Downloader des fichiers

Résolu
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022 - 25 avril 2010 à 21:54
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022 - 27 avril 2010 à 16:57
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

devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
27 avril 2010 à 05:21
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
3
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022
27 avril 2010 à 09:57
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..
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
27 avril 2010 à 15:47
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
?>
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
27 avril 2010 à 15:56
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022
27 avril 2010 à 16:29
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/
0
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022
27 avril 2010 à 16:42
euh... ben finalement j'ai viré "download.php?file=" et il affiche le fichier...
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
27 avril 2010 à 16:53
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);
0
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022
27 avril 2010 à 16:57
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...
0
Rejoignez-nous