Page 1 sur 1

Date de modification répertoire.

Posté : 11 déc. 2011, 14:32
par Zahnzao
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.

Re: Date de modification répertoire.

Posté : 11 déc. 2011, 15:48
par moogli
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)

@+

Re: Date de modification répertoire.

Posté : 11 déc. 2011, 16:21
par Zahnzao
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.

Re: Date de modification répertoire.

Posté : 11 déc. 2011, 16:48
par Calimero
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`));

Re: Date de modification répertoire.

Posté : 11 déc. 2011, 17:33
par Zahnzao
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.

Re: Date de modification répertoire.

Posté : 11 déc. 2011, 18:32
par Calimero
Un petit coup d' array_slice() pour finir devrait faire des merveilles :)

http://fr2.php.net/manual/fr/function.array-slice.php