recherche par date de derniere modification

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : recherche par date de derniere modification

par zeus » 12 mai 2005, 15:46

En fait, le truc c'est que la variable global $i que tu définissait n'était initialisée nul part. Donc tant que tu ne passais pas par $i++, elle ne contenait rien et le 1er fichier était enregistré dans une case qui n'avait pas d'index !!!

Donc lors e l'affichage, il ne trouvait pas de case 0 et il ne passait pas par la 1ere case !!!

par Justone » 12 mai 2005, 15:42

BINGO!!!

Array (
[0] => ../EDC/01 - Procedures/00 - GEN - General/ANew Document Microsoft Word.doc
[1] => ../EDC/01 - Procedures/00 - GEN - General/DC -EDC xxx - PC -Template Rollback Document.doc
[2] => ../EDC/01 - Procedures/03 - PC (CC) - Program Change/ANew
Document Microsoft Word.doc
[3] => ../EDC/01 - Procedures/03 - PC (CC) - Program Change/DC -EDC xxx - PC -Template Rollback Document.doc )
0
ANew Document Microsoft Word.doc a été modifié le : May 12 2005 14:09:27.
1
DC -EDC xxx - PC -Template Rollback Document.doc a été modifié le : May 03 2005 12:29:12.
2
ANew Document Microsoft Word.doc a été modifié le : May 12 2005 14:09:34.
3
DC -EDC xxx - PC -Template Rollback Document.doc a été modifié le : May 03 2005 12:29:12.

Y'a pas a dire t'es vraiment un dieu! :wink:

par zeus » 12 mai 2005, 15:36

Essaye de remplacer la fonction recurs_dir par celle(là
// recurse_dir($dir) liste tous les fichiers du dossier (et des sous-dossiers) $dir
function recurse_dir($dir)
{
    global $i, $file_list;
    if (!isset($i)) $i = 0;
    if ($dp = opendir($dir))
    {
        while ($file = readdir($dp))
        {
            if (($file != ".") && ($file != ".."))
            {
                $tmp = $dir."/".$file;

                if (is_dir($tmp))
                    recurse_dir($tmp, $file) ;
                if (is_file($tmp))
                {
                    $file_list[$i] = $tmp;
                    $i++;
                }
                     
            }
        }
        return $file_list;
    }
} 

par Justone » 12 mai 2005, 15:34

Array (
[] => ../EDC/01 - Procedures/00 - GEN - General/ANew Document Microsoft Word.doc
[1] => ../EDC/01 - Procedures/00 - GEN - General/DC -EDC xxx - PC -Template Rollback Document.doc
[2] => ../EDC/01 - Procedures/03 - PC (CC) - Program Change/ANew Document Microsoft Word.doc
[3] => ../EDC/01 - Procedures/03 - PC (CC) - Program Change/DC -EDC xxx - PC -Template Rollback Document.doc )
0
1
DC -EDC xxx - PC -Template Rollback Document.doc a été modifié le : May 03 2005 12:29:12.
2
ANew Document Microsoft Word.doc a été modifié le : May 12 2005 14:09:34.
3
DC -EDC xxx - PC -Template Rollback Document.doc a été modifié le : May 03 2005 12:29:12.

par zeus » 12 mai 2005, 15:27

Mouais, comprend pas !!!

Même chose avec ça :
for($compt = 0; $compt < count($liste_fichier); $compt++)
{
    echo $compt."\n<br>";
    if($liste_fichier[$compt]!='.' && $liste_fichier[$compt] !='..' && filemtime($liste_fichier[$compt])>$timestamp)
    {
        $a_fichier = explode("/", $liste_fichier[$compt]);
        $i_index = count($a_fichier) - 1;
        echo "<a href='/EDC/".NomSurServeur($_SERVER['DOCUMENT_ROOT'], $liste_fichier[$compt])."'target=\"_blank\">".$a_fichier[$i_index]."</a> a été modifié le : " . date ("F d Y H:i:s.", filemtime($liste_fichier[$compt]));         echo '<br>';
    }
}

par Justone » 12 mai 2005, 15:23

Array (
[] => ../EDC/01 - Procedures/00 - GEN - General/ANew Document Microsoft Word.doc
[1] => ../EDC/01 - Procedures/00 - GEN - General/DC -EDC xxx - PC -Template Rollback Document.doc
[2] => ../EDC/01 - Procedures/03 - PC (CC) - Program Change/ANew Document Microsoft Word.doc
[3] => ../EDC/01 - Procedures/03 - PC (CC) - Program Change/DC -EDC xxx - PC -Template Rollback Document.doc )
1
DC -EDC xxx - PC -Template Rollback Document.doc a été modifié le : May 03 2005 12:29:12.
2
ANew Document Microsoft Word.doc a été modifié le : May 12 2005 14:09:34.
3
DC -EDC xxx - PC -Template Rollback Document.doc a été modifié le : May 03 2005 12:29:12.

par zeus » 12 mai 2005, 15:21

Essaye avec ça et donne moi le résultat
for($compt = 0; $compt < count($liste_fichier); $compt++)
{
    if($liste_fichier[$compt]!='.' && $liste_fichier[$compt] !='..' && filemtime($liste_fichier[$compt])>$timestamp)
    {
        $a_fichier = explode("/", $liste_fichier[$compt]);
        $i_index = count($a_fichier) - 1;
        echo $compt."\n<br>";
        echo "<a href='/EDC/".NomSurServeur($_SERVER['DOCUMENT_ROOT'], $liste_fichier[$compt])."'target=\"_blank\">".$a_fichier[$i_index]."</a> a été modifié le : " . date ("F d Y H:i:s.", filemtime($liste_fichier[$compt]));         echo '<br>';
    }
} 

par Justone » 12 mai 2005, 15:07

je te renvoi tout le code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<?php 

// recurse_dir($dir) liste tous les fichiers du dossier (et des sous-dossiers) $dir 
function recurse_dir($dir) 
{ 
    global $i, $file_list; 
    if ($dp = opendir($dir)) 
    { 
        while ($file = readdir($dp)) 
        { 
            if (($file != ".") && ($file != "..")) 
            { 
                $tmp = $dir."/".$file; 

                if (is_dir($tmp)) 
                    recurse_dir($tmp, $file) ; 
                if (is_file($tmp)) 
                { 
                    $file_list[$i] = $tmp; 
                    $i++; 
                } 
                     
            } 
        } 
        return $file_list; 
    } 
} 

//Cette fonction extrait le chemin du serveur du chemin du fichier 
// PRE : le fichier est dans l'arborescence du serveur 
// POST : retourn une chaine du type "dossier/dossier/fichier.ext" 
function NomSurServeur($cheminServeur, $cheminFichier) 
{ 
    $a_racine = explode("/", $cheminServeur); 
    $i_profServeur = count($a_racine); 
      
    $a_fichier = explode("/", $cheminFichier); 
    $i_profFichier = count($a_fichier); 
      
    $index = 0; 
    for($i = $i_profServeur; $i < $i_profFichier; $i++) 
    { 
        $a_result[$index] = $a_fichier[$i]; 
        $index++; 
    } 
      
    return (implode($a_result, "/")); 
} 

function taDateToTimestamp($date) 
{ 
    $timestamp = -1; 
    list($annee, $mois, $jour) = sscanf($date, "%d-%d-%d"); // exemple : 2004-12-23 
    // un petit test pour verifier que la date est bonne 
    if (checkdate($mois,$jour,$annee)) 
    { 
        // la date est bonne 
        // creation de la date avec mktime 
        $timestamp = mktime(0,0,0,$mois, $jour, $annee); 
    } 
    else 
    { 
        $timestamp=-1; 
    } 
    return $timestamp; 
} 

$timestamp = taDateToTimestamp('$date_derniere_modif'); 

$a_racine = explode("/", $_POST['folder']); 
$i_profondeur = count($a_racine); 

$liste_fichier =  recurse_dir($_POST['folder']); 
print_r ($liste_fichier);
for($compt = 0; $compt < count($liste_fichier); $compt++) 
{ 
    if($liste_fichier[$compt]!='.' && $liste_fichier[$compt] !='..' && filemtime($liste_fichier[$compt])>$timestamp) 
    { 
        $a_fichier = explode("/", $liste_fichier[$compt]); 
        $i_index = count($a_fichier) - 1; 
		echo "<a href='/EDC/".NomSurServeur($_SERVER['DOCUMENT_ROOT'], $liste_fichier[$compt])."'target=\"_blank\">".$a_fichier[$i_index]."</a> a été modifié le : " . date ("F d Y H:i:s.", filemtime($liste_fichier[$compt]));         echo '<br>'; 
    } 
} 

?> 
</div>
</body>
</html>

par zeus » 12 mai 2005, 15:01

Redonne moi la boucle d'affichage que tu utilise stp

par Justone » 12 mai 2005, 14:56

Oui le tableau est bien rempli (il y les 4 documents) mais comme tu peux le voir je n'ai que 3 liens a l'affichage!!

Array (
[] => ../EDC/01 - Procedures/00 - GEN - General/ANew Document Microsoft Word.doc
[1] => ../EDC/01 - Procedures/00 - GEN - General/DC -EDC xxx - PC -Template Rollback Document.doc
[2] => ../EDC/01 - Procedures/03 - PC (CC) - Program Change/ANew Document Microsoft Word.doc
[3] => ../EDC/01 - Procedures/03 - PC (CC) - Program Change/DC -EDC xxx - PC -Template Rollback Document.doc )

DC -EDC xxx - PC -Template Rollback Document.doc a été modifié le : May 03 2005 12:29:12.

ANew Document Microsoft Word.doc a été modifié le : May 12 2005 14:09:34.

DC -EDC xxx - PC -Template Rollback Document.doc a été modifié le : May 03 2005 12:29:12.

par zeus » 12 mai 2005, 14:46

Juste après avoir appellé la fonction recurs_dir insert la ligne

print_r $liste_fichier

et post le résultat, on verra si la tableau ets bien rempli ou pas !!!

par Justone » 12 mai 2005, 14:36

Salut Zeus

Dsl de -encore- revenir pour te demander un coup de main.

Je m'explique :
le script de recherche par date de dernière modif fonctionne bien, MAIS j'ai remarqué en faisant des tests qu'un fichier ne s'affichait pas.

en effet, en regardant bien j'ai vu que le premier fichier a afficher ne s'affichait pas mais que tous les fichiers suivant s'affichaient!!

par exemple s'il n'y a qu'un seul fichier, et bien il n'y aura rien à l'affichage etant donnée que le premier fichier a afficher ne s'affiche pas!!

peut etre que cela vient de la fonction recurse_dir

as-tu une idée? d'ou ca vient à ton avis?

merci encore pour ton aide, je t"en suis très reconnaissant.

par zeus » 28 avr. 2005, 15:26

Oui
        $a_fichier = explode("/", $liste_fichier[$compt]);
        $i_index = count($a_fichier) - 1;
La première ligne sert à décomposer le path en directory et en fichier:

c:/dir1/dir2/fich.ext

va donner

+---+-----+-----+--------+
| c: | dir1 | dir2 | fic.ext |
+---+-----+-----+--------+

La seconde ligne sert à récupérer la dernière case de ce tableau. Celle qui contient le nom du fichier !!!!

$compt sert à parcourir le tableau de path et $a_fichier est reconstruit pour chaque fichier dont $compt et $a_fichier n'ont aucun lien !!!!

Il faut que tu remplace $a_result[$compt] par $a_result[$i_index]

J'éspère que tu as compris !!!! Je pense que tu n'avais pas compris mon code avant, sinon tu n'aurais pas posé cette question !!!

C'est pas pour t'embeter que je dit ça, mais si tu doit reprendre ce code, il vaut mieux que tu comprenne comment il tourne !!!!

par Justone » 28 avr. 2005, 15:14

en fait le probleme que j'ai c'est ac ce lien :
echo "<a href='/".NomSurServeur($_SERVER['DOCUMENT_ROOT'], $liste_fichier[$compt])."'>".$liste_fichier[$compt]."</a> a été modifié le : " . date ("F d Y H:i:s.", filemtime($liste_fichier[$compt])); 
celui marche mais affiche en lien le chemin complet du fichier

alors je l'ai remplacé par celui ci :
echo "<a href='/".NomSurServeur($_SERVER['DOCUMENT_ROOT'], $liste_fichier[$compt])."'>".$a_fichier[$compt]."</a> a été modifié le : " . date ("F d Y H:i:s.", filemtime($liste_fichier[$compt])); 
et la seul le premier fichier est affiché en lien et tous les autres ne le sont pas (il n'y aucun affichage).
a l'affichage j'ai plein de lignes "a été modifié le ........." a la suite les unes des autres!!

sait tu d'ou ca viens??

par zeus » 28 avr. 2005, 15:02

Sinon, ne te contente pas de recopier mon code !!!

Si tu avais lu mon dernier post d'hier, tu aurais pu voir qu'il fallait rajouter du code à celui que je postais !!!!

Le code qu eje t'ai donné, c'était juste pour te montrer là ou tu devais modifier ton code !!!