LISTER LES FICHIERS D'UN DOSSIER ET EN FAIRE DES LIENS

cs_djimson Messages postés 53 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 23 mai 2017 - 12 juil. 2010 à 21:07
cs_djimson Messages postés 53 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 23 mai 2017 - 13 juil. 2010 à 19:31
bonsoir, j'ai pris un script pour lister les fichiers d'un dossiers et en faire des liens mais j'ai quelques petits soucis :

01 - Comment faire pour forcer le téléchargement des fichiers jpg et pdf, xlsx.... tout sorte de fichiers.
Voici le script en question :
<!--Script pour télécharger les fichiers envoyés par FTP -->
<?php

function listing($repertoire){

$fichier = array();

if (is_dir($repertoire)){

$dir = opendir($repertoire); //ouvre le repertoire courant désigné par la variable

while(false!==($file = readdir($dir))){ //on lit tout et on récupere tout les fichiers dans $file

if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'

$page = $file; //sort l'extension du fichier
$page = explode('.', $page);
$nb = count($page);
$nom_fichier = $page[0];
for ($i = 1; $i < $nb-1; $i++){
$nom_fichier .= '.'.$page[$i];
}
if(isset($page[1])){
$ext_fichier = $page[$nb-1];
if(!is_file($file)) { $file = '/'.$file; }
}
else {
if(!is_file($file)) { $file = '/'.$file; } //on rajoute un "/" devant les dossier pour qu'ils soient triés au début
$ext_fichier = '';
}

if($ext_fichier != 'php' and $ext_fichier != 'html' and $ext_fichier != 'css') { //utile pour exclure certains types de fichiers à ne pas lister
array_push($fichier, $file);
}
}
}
}

natcasesort($fichier); //la fonction natcasesort( ) est la fonction de tri standard sauf qu'elle ignore la casse
$sommepoids = "";

foreach($fichier as $value) {
$poidsdufichier = round(filesize($repertoire."/".$value)/1024,2);
$sommepoids += $poidsdufichier;
echo''.$value.',
'.gmdate ("d/m/Y, H:i:s", filectime($repertoire."/".$value)).', '.round(filesize($repertoire."/".$value)/1024,2) .'Ko
';
}
echo ''.count($fichier).' fichiers disponibles pour un poids total de '.$sommepoids.' Ko

';

}

//exemple d'utilisation :

listing('./cours'); //chemin du dossier


?>
Merci

6 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
13 juil. 2010 à 10:42
Salut,

01 - Comment faire pour forcer le téléchargement des fichiers jpg et pdf, xlsx.... tout sorte de fichiers.

Un moyen simple est de créer une page PHP dont le seul rôle sera d'envoyer un header spécial puis le contenu du fichier. Bref, en gros (très gros même), ça donnerai un truc qui ressemble à ça :
<?php
  /*                                                                            
   ** ATTENTION !                                                               
   ** Si vous devez utiliser un nom de fichier fourni par l'utilisateur         
   ** vous DEVEZ filtrer efficacement le dit fichier pour éviter de             
   ** graves failles de sécurité.                                               
   */
$file = 'ton_fichier.ext';
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Content-disposition: filename="' . basename($file) . '"');
readfile($file);
?>


j'ai pris un script pour lister les fichiers d'un dossiers et en faire des liens

Ho punaise qu'il est mal codé. Vu qu'il n'y a ni coloration syntaxique ni indentation je n'ai fait qu'un rapide coup d'œil, voici quelques points en vrac :
[list]
[*] opendir/readdir qui complexifient le script de manière inutile (boucle while atroce etc), un scandir aurait été carrément plus simple et bien meilleur pour la lisibilité.
[*] oubli du closedir
[*] affichage des fichiers cachés
[*] récupération de l'extension du fichier complètement foireuse
[*] dans la vie il existe autre chose que des fichiers réguliers et des répertoire... visiblement le dev n'en sais rien
[*] exclusion des fichiers php/html/css foireuse (ho la fausse sécurité)
[*] création d'une table entière par ligne
/list
... et j'en passe. Je ne sais pas où tu as pris cette "chose" mais ce n'est clairement pas un exemple à suivre.
0
cs_djimson Messages postés 53 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 23 mai 2017
13 juil. 2010 à 10:56
Bonjour TychoBrahe, et merci pour ces remarques.
Le propriétaire du script m'avais déjà dis hier que ce script n'est plus d'actualité. Qu'on pouvais faire mieux.
Alors, vs n'avez pas une meilleure proposition du script pr moi? Suis pas pro php et j'essaie de comprendre un peu.
Pour mon code, j'avai pas vue que l'on pouvais le mettre entre les balises pr le rendre plus lisible.
En somme, je vs demande donc d m'orienter pour reprendre ce script ou tout autre.
Merci
0
cs_djimson Messages postés 53 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 23 mai 2017
13 juil. 2010 à 13:33
Je reviens avec ce script pr de l'aide :
lister.php
     <?php
    
     // *******************************************
     // Nom du script : dir.php
     // Auteur : _SebF AT frameIP.com
     // Date de création : 14 Août 2004
     // version : 1.0
     // Licence : Ce script est libre de toute utilisation.
     // La seule condition existante est de faire référence au site http://www.frameip.com afin de respecter le travail d'autrui.
     // ********************************************
    
     // ********************************************
     // Accès au repertoire
     // ********************************************
     $chemin="./cours/";
     $handle_du_repertoire_ouvert=opendir($chemin);
    
     // ********************************************
     // Boucle réccupérant toute les entrées contennu dans le répertoire
     // ********************************************
     $sortie_de_la_boucle=false; // Initialise la boucle
     while ($sortie_de_la_boucle==false)
     {
     // ********************************************
     // Récupère les entrées contenu dans le repertoire une par une
     // ********************************************
     $entree=readdir($handle_du_repertoire_ouvert); // Readdir lit le fichier suivant dans un dossier
    
     // ********************************************
     // Condition de sortie de la boucle
     // ********************************************
     if ($entree=="")
     $sortie_de_la_boucle=true;
     else
     // ********************************************
     // Affichage
     // ********************************************
     if (($entree!=".")&&($entree!="..")) // N'affiche pas les . et ..
     if (is_dir($entree)!=1) // N'afiche pas les répertoires
     if (($entree!="index.php")&&($entree!="dir.php")) // N'affiche pas les fichiers selectionnés
 echo"download

";
     }
    
     ?>


download.php
<?php
$file = .$chemin.$entree;
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Content-disposition: filename="' . basename($file) . '"');
readfile($file);

?>

Je précise que je veux downloader tous sortes de fichiers sauf .php, .html
Quand je clique sur download, il a tendance à télécharger le fichier download.php
Merci de m'aider, je dois le faire pr des étudiants et c'est urgent vrmt. Dslé
0
cs_djimson Messages postés 53 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 23 mai 2017
13 juil. 2010 à 14:23
De l'aide svp, j'ai de sérieux blème avec ce script


Merci
0

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

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
13 juil. 2010 à 19:13
Salut,


Si personne ne te l'a encore signalé, des propos comme "c'est urgent", des relances un peu trop hâtives, et des multi posts (http://www.phpcs.com/forum/sujet-FORCER-TELECHARGEMENT_1454606.aspx) poussent souvent les gens à ne pas répondre.

J'ai bien peur que l'endroit soit mal choisi si tu es dans l'urgence, tu ferais sans doute mieux de te tourner vers des sites comme ProgOnLine
Tu éviterai sans doute un résultat plus qu'incertain, avec des failles de sécurité importantes.

Ni vois pas là une quelconque méchanceté, je ne fais qu'un constat des scripts que tu postes : il y a un chemin qui ne se fera pas en 1 heure avant d'obtenir un script correct et suffisamment sécurisé.
Si par contre tu prends le temps des recherches et de l'apprentissage nécessaire tu auras, je n'en doute pas, toute l'aide nécessaire sur ce forum.


Tiens nous au courant !

Cordialement,



Kohntark -
0
cs_djimson Messages postés 53 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 23 mai 2017
13 juil. 2010 à 19:31
Ok, merci bien, désolé, certes suis embêté car depuis lors je fais des recherches mais je trouves pas.
Je reste à l'écoute.
encore merci

Merci
0
Rejoignez-nous