PHP comment lister les derniers fichiers modifiés parmi des sous-dossiers
Résolu
Amorph
-
Amorph -
Amorph -
Bonjour,
Après avoir découvert la PirateBox puis la LibraryBox, j'avais proposé d'aider à la réalisation d'un de ces boitiers de partage pour le CDI du lycée. Et le temps a passé...
Suite à l'arrêt du projet "LibraryBox" (de même que PirateBox d'ailleurs) et ayant enfin un TP-Link MR3020 mais version 3, soit la version non supportée par la dernière version du projet, je me suis retrouvé à bidouiller comme je pouvais pour essayer de faire avec.
Finalement, j'ai un MR3020 avec OpenWRT, un serveur PHP, une belle page d'accueil avec même une page d'exploration des fichiers (https://github.com/halgatewood/file-directory-list/ mais voilà :
j'aimerais ajouter dans un cadre de ma page d'accueil un bout de code PHP afin de récupérer mes "x" derniers fichiers modifiés en modifiant facilement le nombre "x" de fichiers affichés car ensuite le boitier risque d'être entre les mains de personnes s'y connaissant encore moins que moi !
Ces fichiers sont dans un dossier "Shared" disposant de sous-dossiers pour chaque type de fichier, Vidéos, Audio, Images, etc.
J'ai trouvé 2 bouts de code intéressants.
Le 1er m'affiche une petite arborescence de tous les sous-dossiers avec les noms des fichiers qu'ils contiennent :
Le 2nd bout de code me donne ici les 3 derniers éléments modifiés, mais sans aller chercher dans les sous-dossiers, donc il me donne les 3 derniers sous-dossier modifiés au lieu de me donner les fichiers :
Dans l'idéal, je souhaiterais avoir le premier code (pour sa mise en page) mais ne me donnant que les "x" derniers fichiers modifiés avec un href vers ces fichiers.
Au pire, je peux me contenter du second code à condition qu'il ne me donne pas les sous-dossiers mais les fichiers uniquement (donc en allant chercher récursivement les fichiers dans chaque sous-dossier) et de même avec un lien href.
J'ai essayé de comprendre comment on code en PHP pour aller fouiller dans divers sous-dossiers afin de faire la modification moi-même mais je m'embrouille, j'ai vu trop de bouts de code différents mais qui font ce même travail.
Je vous remercie d'avance pour votre aide !
Après avoir découvert la PirateBox puis la LibraryBox, j'avais proposé d'aider à la réalisation d'un de ces boitiers de partage pour le CDI du lycée. Et le temps a passé...
Suite à l'arrêt du projet "LibraryBox" (de même que PirateBox d'ailleurs) et ayant enfin un TP-Link MR3020 mais version 3, soit la version non supportée par la dernière version du projet, je me suis retrouvé à bidouiller comme je pouvais pour essayer de faire avec.
Finalement, j'ai un MR3020 avec OpenWRT, un serveur PHP, une belle page d'accueil avec même une page d'exploration des fichiers (https://github.com/halgatewood/file-directory-list/ mais voilà :
j'aimerais ajouter dans un cadre de ma page d'accueil un bout de code PHP afin de récupérer mes "x" derniers fichiers modifiés en modifiant facilement le nombre "x" de fichiers affichés car ensuite le boitier risque d'être entre les mains de personnes s'y connaissant encore moins que moi !
Ces fichiers sont dans un dossier "Shared" disposant de sous-dossiers pour chaque type de fichier, Vidéos, Audio, Images, etc.
J'ai trouvé 2 bouts de code intéressants.
Le 1er m'affiche une petite arborescence de tous les sous-dossiers avec les noms des fichiers qu'ils contiennent :
<?php error_reporting(E_ALL); ini_set("display_errors", 0); function getDirrecurse($path = 'Shared/', $level = 0) { $ignore = array('.', '..'); $dir = @opendir($path); while(false !== ($file = readdir($dir))) { if(!in_array($file, $ignore)) { $spaces = str_repeat(' ', ($level*4)); if(is_dir("$path/$file")) { echo "<strong>$spaces $file</strong><br />"; getDirrecurse( "$path/$file", ($level+1)); } else { echo "$spaces $file<br />"; } } } closedir($dir); } getDirrecurse(); ?>
Le 2nd bout de code me donne ici les 3 derniers éléments modifiés, mais sans aller chercher dans les sous-dossiers, donc il me donne les 3 derniers sous-dossier modifiés au lieu de me donner les fichiers :
<?php $dossier = 'Shared/'; $dir = opendir($dossier); //nombre d'éléments à afficher : $n = 3; while ($object = readdir($dir)) { if ($object != "." && $object != "..") { $filename = $dossier . $object; $file_object = array( 'time' => filemtime($filename), 'name' => $object, 'size' => filesize($filename) ); $dir_objects[] = $file_object; } } array_multisort($dir_objects, SORT_DESC); array_splice($dir_objects,$n); for($i=0;$i<count($dir_objects);$i++) { echo $dir_objects[$i]['name'].' ('.strftime("%d/%m/%Y à %T", $dir_objects[$i]['time']).')<br/> //affiche le nom de l'élément, sa date et heure de dernière modification '; } ?>
Dans l'idéal, je souhaiterais avoir le premier code (pour sa mise en page) mais ne me donnant que les "x" derniers fichiers modifiés avec un href vers ces fichiers.
Au pire, je peux me contenter du second code à condition qu'il ne me donne pas les sous-dossiers mais les fichiers uniquement (donc en allant chercher récursivement les fichiers dans chaque sous-dossier) et de même avec un lien href.
J'ai essayé de comprendre comment on code en PHP pour aller fouiller dans divers sous-dossiers afin de faire la modification moi-même mais je m'embrouille, j'ai vu trop de bouts de code différents mais qui font ce même travail.
Je vous remercie d'avance pour votre aide !
A voir également:
- PHP comment lister les derniers fichiers modifiés parmi des sous-dossiers
- Suivi des modifications word - Guide
- Comment réduire la taille d'un fichier - Guide
- Renommer des fichiers en masse - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment ouvrir un fichier bin ? - Guide
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
ce serait beaucoup plus simple de montrer les fichiers ayant été modifié récemment, les "x" derniers jours ou heures.
pour faire comme tu demandes, j'adapterais le code #1, pour qu'il commence par rassembler les dates de tous les fichiers, ce qui permet de déterminer la date à partir de laquelle tu veux afficher chaque fichier.
et ensuite, n'afficher que les fichiers plus récents que cette date.
pour faire comme tu demandes, j'adapterais le code #1, pour qu'il commence par rassembler les dates de tous les fichiers, ce qui permet de déterminer la date à partir de laquelle tu veux afficher chaque fichier.
et ensuite, n'afficher que les fichiers plus récents que cette date.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
tu ne décris pas précisément ce que tu souhaites comme résultat, ni quelle aide tu demandes.
tu ne décris pas précisément ce que tu souhaites comme résultat, ni quelle aide tu demandes.
Bonjour,
Désolé si je ne suis pas clair.
Dans l'idéal je souhaiterai que le code m'affiche par exemple :
Vidéo
Exemple de vidéo.mp4 20/07/2020 à 12h34
Audio
Exemple de musique.mp3 17/07/2020 à 10h24
Exemple de podcast.mp3 15/07/2020 à 15h40
Or mon code n°1 m'affiche tous les fichiers et pas juste les derniers.
Et mon code n°2 m'afficherait :
Vidéo 20/07/2020 à 12h34
Audio 17/07/2020 à 10h24
Sachant que "Vidéo" et "Audio" son des noms de sous-dossiers contenus dans un dossier principal "Shared".
Donc je souhaiterais obtenir le même genre d'affichage que mon code n°1 mais avec les noms des fichiers en href pointant vers par exemple les 3 ou 5 ou 10 derniers fichiers au lieu de m'afficher tout comme il le fait actuellement.
Ainsi un élève souhaitant aller voir la nouvelle vidéo ajoutée n'a pas besoin d'aller sur la page de l'explorateur pour y accéder.
L'aide que je demande est :
- soit comment je peux modifier mon code n°1 pour qu'il ne me donne que les "x" derniers fichiers modifiés
- soit comment faire pour que mon code n°2 ne me donnent pas mes derniers sous-dossiers modifiés mais ne prennent que des fichiers et qu'il aille les chercher dans mes différents sous-dossiers
J'espère que j'ai été plus complet dans ma demande...
Merci.
Désolé si je ne suis pas clair.
Dans l'idéal je souhaiterai que le code m'affiche par exemple :
Vidéo
Exemple de vidéo.mp4 20/07/2020 à 12h34
Audio
Exemple de musique.mp3 17/07/2020 à 10h24
Exemple de podcast.mp3 15/07/2020 à 15h40
Or mon code n°1 m'affiche tous les fichiers et pas juste les derniers.
Et mon code n°2 m'afficherait :
Vidéo 20/07/2020 à 12h34
Audio 17/07/2020 à 10h24
Sachant que "Vidéo" et "Audio" son des noms de sous-dossiers contenus dans un dossier principal "Shared".
Donc je souhaiterais obtenir le même genre d'affichage que mon code n°1 mais avec les noms des fichiers en href pointant vers par exemple les 3 ou 5 ou 10 derniers fichiers au lieu de m'afficher tout comme il le fait actuellement.
Ainsi un élève souhaitant aller voir la nouvelle vidéo ajoutée n'a pas besoin d'aller sur la page de l'explorateur pour y accéder.
L'aide que je demande est :
- soit comment je peux modifier mon code n°1 pour qu'il ne me donne que les "x" derniers fichiers modifiés
- soit comment faire pour que mon code n°2 ne me donnent pas mes derniers sous-dossiers modifiés mais ne prennent que des fichiers et qu'il aille les chercher dans mes différents sous-dossiers
J'espère que j'ai été plus complet dans ma demande...
Merci.
J'ai peut-être oublié de préciser que je ne suis pas du tout programmeur, et que je comprend seulement en gros ce que font les bouts de code que j'ai cités, du genre les assignations de variables, les conditions...
Du coup :
1- quelles modifications dois-je faire pour effectivement récupérer et mettre de côté la date de modification des fichiers ? Je suppose avec filemtime() mais sans savoir comment le rédiger.
2- comment faire le filtre avec une date
3- comment mettre à jour la date de tri ? Je suppose avec time() mais comment enlever "x" jours ?
au lieu de montrer un nombre déterminé de fichiers?
Ce n'est pas l'idée que j'avais au départ mais ça reste bien dans l'idée de mettre à disposition d'un coup d’œil sur la page d'accueil des liens vers les "derniers" fichiers.
D'ailleurs si possible, j'aimerai que les liens puissent être affichés du plus récent au plus ancien, ce serait bien !
Si j'enlève pour ne laisser que le print du fichier alors ça fonctionne.