Page 1 sur 1

Intégrer des fonctions à un listing

Posté : 28 déc. 2007, 22:23
par Nabette
Bonjour,
j'utilise actuellement ce code sur une des pages de mon site :

Code : Tout sélectionner

<?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))){ if(is_dir($file)) continue; //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 != 'htm' and $ext_fichier != 'jpeg') { //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 foreach($fichier as $value) { echo '<a href="'.rawurlencode($repertoire).'/'.rawurlencode(str_replace ('/', '', $value)).'">'.$value.'</a><br />'; } } //exemple d'utilisation : listing('.'); //chemin du dossier ?>
Et j'aurai aimé ajouter des infos :
  • - la taille des fichiers (en Mo)
    - classer en fonction de la date de création du fichier (le plus récent en haut)
J'ai pu voir quelles fonctions doivent être utilisées mais je ne connais pas assez le php pour savoir comment les intégrer.

Merci d'avance pour votre aide.

Posté : 28 déc. 2007, 22:58
par Nabette
Je viens de voir sur d'autres sujets qu'il y a une balise exprès pour le php qui rend beaucoup plus lisible le code.
Comme je ne peux pas éditer mon précédent message, je me permets d'en poster un nouveau par soucis de lisibilité.
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))){
                if(is_dir($file)) continue; //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 != 'htm' and $ext_fichier != 'jpeg') { //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
        foreach($fichier as $value) {
                        echo '<a href="'.rawurlencode($repertoire).'/'.rawurlencode(str_replace ('/', '', $value)).'">'.$value.'</a><br />';
        }
}
//exemple d'utilisation :
listing('.'); //chemin du dossier
Les fonctions que j'ai pu voir sont :
Pour la date de création http://www.webrankinfo.com/forums/viewtopic_44657.htm
La taille des fichiers : http://fr3.php.net/filesize | avec la fonction "filesize()"

Mais que je n'arrive pas à intégrer à mes lignes.

Posté : 29 déc. 2007, 12:06
par Aureusms
Ce que tu peux faire (je t'en fais qu'un sur deux après il faut que tu cherches lol). relances une boucle foreach
foreach($fichier as $cle => $valeur)
{ 
// filemtime renvoi la date de création en format timestamp
//il faut donc formater la date avec la fonction date()

$chemin = "chemin/relatif/vers/le/fichier/";  //= www/dossier/photos par example
$filename = $chemin.$valeur;

if (file_exists($filename)) {
    $tab_date_creation_fichier[$valeur] = date ("F d Y H:i:s.", filemtime($filename));
}

}
Après tu n'a plus qu'à le trier avec les fonctions de tri sort(), ...
renseigne toi aussi sur les fonctions date() car le tri ne peut se faire de manière informatique i.e. dans l'écriture anglaise (Annee/mois/jour).

Posté : 29 déc. 2007, 13:11
par Invité
J'ai essayé de remplacé le code que tu as proposé par celui du " foreach($fichier as $value) {... "
puis essayé de le mettre à la suite mais aucune de ces façons ne fonctionne.

Pourrais-tu me montrer où le mettre s'il te plait ?