Date de modification répertoire.

Eléphant du PHP | 190 Messages

11 déc. 2011, 14:32

Bonjour,

J'ai un dossier "pictures" qui contient des répertoires, qui possèdent chacun plusieurs images. Je voudrai simplement récupérer la première image des 5 derniers dossiers créés.

Je dois donc me baser sur la date de modification des dossiers. La fonction stat() permet de récupérer cette valeur.

Par contre, je dois à chaque fois lister tout les dossiers du répertoire pictures, récupérer la date de dernière modification pour ensuite afficher mes 5 images dans le bon ordre.

N'y a t'il pas un moyen moins lourd pour réaliser cela ? Par exemple trier les dossiers avant, afin de ne boucler que 5 fois ?

Merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 déc. 2011, 15:48

salut,

la seule solution que je vois serais de maintenir un index cohérent des répertoires (par exemple un fichier qui contient un tableau sérialisé des 5 dernier document) et à chaque modif tu met à jour le tableau.

problème si a modif n'est pas faite par le système php l'index ne sert plus a rien.

tu peux utiliser SPLFileInfo pour t'aider à faire tous cela (voir directement DirectoryIterator)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 190 Messages

11 déc. 2011, 16:21

Effectivement les dossiers ne sont pas créés via php mais manuellement par ftp.

Je pensais qu'il aurait été possible d'initialiser un ordre de lecture avant de faire mon readdir.
readdir() retourne le nom du fichier suivant dans le dossier identifié par dir_handle. Les noms sont retournés dans l'ordre dans lequel ils sont enregistrés dans le système de fichiers.
En lisant ça on pourrait croire que l'ordre est du plus ancien au plus récent mais ce n'est pas le cas.

Sinon tu m'as donné une idée, puisque je suis le seul a créer des dossiers sur mon ftp. Ce serai de faire un script de validation qui après chaque nouveau dossier créé ajouterai une ligne dans un fichier texte. La seule contrainte étant de me connecter manuellement à ce script à chaque fois.

Si je n'ai pas le choix j'opterai pour cette solution.

Edit: bien qu'au final je devrai quand même boucler chaque ligne de mon fichier texte pour détecter le nouveau dossier, donc çà ne changerai rien. Un petit formulaire dans ce cas, je crée le dossier via php et je ne conserve que 5 lignes...

Edit 2: je viens de voir ca ! Qui visiblement gère tout ce que je fais manuellement avant d'uploader mes images. Je dois pouvoir l'adapter pour obtenir ce que je veux.

ViPHP
ViPHP | 2287 Messages

11 déc. 2011, 16:48

Une autre solution serait de t'appuyer sur une commande système pour faire le listing (qui doit pouvoir trier par ordre chronologique de manière performante si on lui passe les bons arguments). Par exemple ls -t sous linux.
<?php
print_r(explode(PHP_EOL,`ls -t`));
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 190 Messages

11 déc. 2011, 17:33

woaahh !

Fonctionne à merveille, je viens de tester en local, avec la commande windows "DIR /B /O:-D"

affiche les fichiers et dossiers (dir) sans autre information (/B) par ordre décroissant de date de modification (/O:-D).

Je n'ai plus qu'a trouver l'équivalent de cette commande pour linux et de récupérer les 5 premiers résultats.

Merci Calimero !

Edit: ta commande était la bonne.

ViPHP
ViPHP | 2287 Messages

11 déc. 2011, 18:32

Un petit coup d' array_slice() pour finir devrait faire des merveilles :)

http://fr2.php.net/manual/fr/function.array-slice.php
if(!@work()){ Nespresso(); } else { what(); }
______________________________