|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
darkjukka WRInaute impliqué

Inscrit le: 28 Avr 2007 Messages: 281
|
Posté le : Lun Juin 16, 2008 14:07 Sujet du message: Lister dossier par ordre de modification |
|
|
Bonjour,
Voila, dans la partie admin de mon site je peu uploader des images dans un répertoire et en lister le contenu avec cette fonction :
| Code: |
function list_files() {
global $the_path;
$handle = dir($the_path);
print "\n <b>Fichiers uploadés :</b><br />\n <ul>";
while ($file = $handle->read()) {
if (($file != ".") && ($file != "..")) {
print "\n <li><a href=\"http://www.blind-guardian.fr/pics/news/" . $file ."\" target=\"_blank\">http://www.blind-guardian.fr/pics/news/" . $file ."</a> <em>(" . dd(filemtime($the_path.$file)) . ")</em></li>";
}
}
print "\n </ul>\n <br /><hr /><br />";
} |
Seulement l'affichage se fait par ordre alphabétique et je voudrais le modifier un peu pour le faire apparaitre par ordre de modification seulement je n'ai pas trouvé comment faire.
Si quelqu'un pouvait m'aider cela me simplifierai grandement les choses  |
|
| |
|
 |
2dm WRInaute occasionnel

Inscrit le: 03 Sep 2002 Messages: 202 Localisation: Irlande - Dublin
|
Posté le : Lun Juin 16, 2008 14:34 Sujet du message: Lister dossier par ordre de modification |
|
|
Et bien, voilà
| Code: |
<?php
function dir_sort_by_update_date($dir_path, $order=true){
$dir_cont = scandir($dir_path);
$dir_tempo = array();
foreach($dir_cont as $file){
if($file != '.' && $file != '..'){
$dir_tempo[$file] = filemtime($dir_path . $file);
}
}
if($order){
asort($dir_tempo);
}else{
arsort($dir_tempo);
}
return $dir_tempo;
}
$dir_path = '/home/user/dir/';
$dir_sorted = dir_sort_by_update_date($dir_path);
print_r($dir_sorted);
?> |
Le code me parait assez simple et clair. Tu appelles la fonction dir_sort_by_update_date en lui donnant le chemin et éventuellement un boolean pour classer les fichier par ordre croissant/décroissant.
Il me semble facile de le modifier pour pouvoir gérer une arborescence (des sous-dossiers).
Il n'y a pas non plus de gestion de vérification des droits. |
|
| |
|
 |
darkjukka WRInaute impliqué

Inscrit le: 28 Avr 2007 Messages: 281
|
Posté le : Lun Juin 16, 2008 15:22 Sujet du message: Lister dossier par ordre de modification |
|
|
Merci mais je dois être très mauvais car je n'arrive pas à le faire fonctionner
J'ai testé directement sur une page brut, en copiant tel quel le code et cela ne marche pas. |
|
| |
|
 |
2dm WRInaute occasionnel

Inscrit le: 03 Sep 2002 Messages: 202 Localisation: Irlande - Dublin
|
Posté le : Lun Juin 16, 2008 15:46 Sujet du message: Lister dossier par ordre de modification |
|
|
Tu as bien changé le chemin (variable $dir_path) ?
Si c'est le cas, as-tu un message d'erreur ? Es-tu sur que ton répertoire existe et qu'il y a quelque chose dedans ? |
|
| |
|
 |
darkjukka WRInaute impliqué

Inscrit le: 28 Avr 2007 Messages: 281
|
Posté le : Lun Juin 16, 2008 15:57 Sujet du message: Lister dossier par ordre de modification |
|
|
| Oui oui, j'ai bien changé le chemin, le dossier existe avec des images dedans et je n'ai aucun message d'erreur, juste une page blanche. |
|
| |
|
 |
2dm WRInaute occasionnel

Inscrit le: 03 Sep 2002 Messages: 202 Localisation: Irlande - Dublin
|
Posté le : Lun Juin 16, 2008 16:09 Sujet du message: Lister dossier par ordre de modification |
|
|
T'utilises php5 ?
rajoutes :
| Code: |
$dirtest = scandir($dir_path);
foreach($dirtest as $dir){
echo $dir . '<br />';
}
echo is_callable('scandir').'<br />';
echo is_callable('asort').'<br />';
echo is_callable('arsort').'<br />';
|
à la fin du code et dis moi ce qui s'affiche. |
|
| |
|
 |
darkjukka WRInaute impliqué

Inscrit le: 28 Avr 2007 Messages: 281
|
Posté le : Lun Juin 16, 2008 16:23 Sujet du message: Lister dossier par ordre de modification |
|
|
| Non je suis sur php4 et j'ai toujours une page blanche. |
|
| |
|
 |
darkjukka WRInaute impliqué

Inscrit le: 28 Avr 2007 Messages: 281
|
Posté le : Lun Juin 16, 2008 17:37 Sujet du message: Lister dossier par ordre de modification |
|
|
Au final j'ai réussi en fouinant beaucoup plus profond sur google.
Je le met donc pour ceux intéressés, ont ne sait jamais :
| Code: |
function list_files() {
global $the_path;
$rep = $the_path;
$dir = opendir($rep);
$toplk = array();
print "\n <b>Fichiers uploadés :</b><br />\n <ul>";
while ($f = readdir($dir)) {
if(is_file($rep.$f)) {
$toplk[$f] = filectime($rep.$f);
}
}
arsort($toplk);
foreach($toplk as $fichier => $date) {
print "\n <li><a href=\"http://www.blind-guardian.fr/pics/news/" .$fichier ."\" target=\"_blank\">http://www.blind-guardian.fr/pics/news/" . $fichier ."</a> <em>(" . dd(filemtime($the_path.$fichier)) . ")</em></li>";
}
print "\n </ul>\n <br /><hr /><br />";
} |
|
|
| |
|
 |
2dm WRInaute occasionnel

Inscrit le: 03 Sep 2002 Messages: 202 Localisation: Irlande - Dublin
|
Posté le : Lun Juin 16, 2008 17:51 Sujet du message: Lister dossier par ordre de modification |
|
|
une deuxième version qui gère la récursion et qui devrait marcher en php4 :
| Code: |
<?php
/**
* $dir should not contain '.' or '..'
*/
function dir_orderby_update_date($dir, $order=true){
$dir_tempo = array();
foreach($dir as $file){
if($file != '.' && $file != '..'){
$timestamp = filemtime($file);
if(!$timestamp){
$timestamp = 0;
}
$dir_tempo[$file] = $timestamp;
}
}
if($order){
asort($dir_tempo);
}else{
arsort($dir_tempo);
}
return $dir_tempo;
}
function dir_list_stack_call($dir_path, $recursif = true){
$list_path = array();
$dir_cont = array();
$list_path[] = $dir_path;
$size = 1;
for($i=0; $i<$size; $i++){
if (($handle = opendir($list_path[$i])) != false) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(is_file($list_path[$i] . $file)){
$dir_cont[] = $list_path[$i] . $file;
}else if($recursif){
$list_path[] = $list_path[$i] . $file . '/';
$size++;
}
}
}
closedir($handle);
}
}
return $dir_cont;
}
function dir_list_rec_call($dir_path, $recursif = true){
$dir_cont = array();
if (($handle = opendir($dir_path)) != false) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(is_file($dir_path.$file)){
$dir_cont[] = $dir_path . $file;
}else if($recursif){
$dir_cont = array_merge($dir_cont, dir_list($dir_path . $file . '/'));
}
}
}
closedir($handle);
}
return $dir_cont;
}
/**
* Wrapper used to select how we access recursive directories.
* $dir_path needs to end with a forward slash '/'.
**/
function dir_list($dir_path, $recursif = true){
return dir_list_stack_call($dir_path, $recursif); // we use a stack
//return dir_list_rec_call($dir_path, $recursif); // we use recursion
}
$dir_path = '/home/xxx/public_html/snippet/';
$dir_unsorted = dir_list($dir_path);
$dir_ordered = dir_orderby_update_date($dir_unsorted);
print_r($dir_ordered);
$dir_ordered_dec = dir_orderby_update_date($dir_unsorted, false);
print_r($dir_ordered_dec);
?>
|
|
|
| |
|
 |
| |
|
|