IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP Je bute sur un morceau de code


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Par défaut PHP Je bute sur un morceau de code
    Bonjour

    Qui peut m'aider à résoudre une difficulté dans mon code

    Je cherche à lister pour mes élèves les dernières mises à jour des fichiers pdf, txt, doc etc...

    Jusque là tout va bien

    mais je voudrais également lister les fichiers index.html dans les répertoires contenant le mot E-Book le pb se situe dans le else à partir de la ligne 66 (là ou il y a le commentaire // liste des répertoires à exclure et je n'arrive pas à exclure les fichiers dont le chemin contient 'javascript' 'files '

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    <?php
     
     
        $go_back = 0;                        // affiche résultat ou non
        $i = 0;                                // compteur de boucle
        $dir_count = 0;                        // initialisation de la boucle
        $date = time();                        // date et heure actuelle
        $one_day = 86400;                    // nombre de secondes pour une journée
        $days = preg_replace("/[^0-9]/i",'', $_POST["jours"]);    // nombre de jours à vérifier
        $path = preg_replace("/[^_A-Za-z0-9-\.%\/]/i",'', $_POST["chemin"]);    // chemin de fichier absolu (avec nettoyage contre piratage)
        $path = preg_replace("/\.\.\//",'', $path);    // on interdit la commande ../
        define('ABSPATH', dirname(__FILE__));
        $path = ABSPATH.$path;    // chemin de fichier absolu de votre compte du genre /home/loginftp/www/ ou /home/loginftp/public_html/ etc.
        $directories_to_read[$dir_count] = ($path);
     
        // Formulaire pour remonter le temps
     
        print "<html><body><h3>Vérifier les derniers fichiers modifiés depuis votre dernière lecture <br /></h3>";
        print "<table><tr><td>";
        print "<form method=\"post\">";
        print "<tr><td>Nombre de jours &agrave; v&eacute;rifier 1-99: </td>";
        print "<td>&nbsp;&nbsp;<input type=\"text\" name=\"jours\" maxlength=\"2\" size=\"2\"></td></tr>";
    	print "<tr><td>Facultatif Nom du sous-r&eacute;pertoire &agrave; contr&ocirc;ler: </td>";
        print "<td><input type=\"text\" name=\"chemin\" maxlength=\"80\" size=\"30\" value=\"/Photographie/\" > (mettre un / &agrave; la fin de votre sous-r&eacute;pertoire )</td></tr>";
        print "<tr><td> </td><td><input type=\"submit\" value=\" V&eacute;rifier Fichiers \">";
        print "</form>";
        print "</td></tr></table>";
        // Affichage du résultat
        $go_back = $one_day * $days;
        print "<br /> Retour sur les <strong>" . ($go_back/$one_day) ."</strong> derniers jours. <br /><br />";
     
        if ( $go_back > 0 ){
            print "<table><tr><th>Nom du Fichier</th><th>Date de modification</th></tr>";
            $diff = $date - $go_back;
     
            while ( $i <= $dir_count ){
                $current_directory = $directories_to_read[$i];
     
                // obtenir info fichier
                $read_path = opendir( $directories_to_read[$i] );
                while ( $file_name = readdir( $read_path)){
                    if (( $file_name != '.' )&&( $file_name != '..' )){
                        if ( is_dir( $current_directory . "/"  . $file_name ) == "dir" ){
                            // besoin d'obtenir tous les fichiers d'un répertoire
                            $d_file_name = "$current_directory" . "$file_name";
                            $dir_count++;
                            $directories_to_read[$dir_count] = $d_file_name . "/";
                        }else{
     
    						$file_name = "$current_directory" . "$file_name";
     
                            // Si temps modifiés plus récent que x jours, affiche, sinon, passe
                            if ( (filemtime( $file_name)) > $diff  ){
    						$bad_extensions = array( 'html' , 'js' , 'gif' , 'png', 'php','jpg', 'jpeg','xml');
    						$fileinfo=pathinfo($file_name);
    						if (!in_array(strtolower($fileinfo["extension"]),$bad_extensions))
    		{
    							$pieces = explode("Photographie", $file_name);
                                print "<tr><td> $pieces[1]</td>";
                                $date_changed = filemtime( $file_name );
                                $pretty_date = date("d/m/Y H:i:s", $date_changed);
                                print  "<td> ::: $pretty_date</td></tr>" ;
    		}
     
    		else {
    // liste des répertoires à exclure
    $bad_repert = array( 'javascript' , 'files' );
    // j'effacetue une recherche dans les répertoires dont le nom contient E-Book
    if (stristr($file_name, 'E-Book', true)){
    //Si je trouve un dossier index.html
    if ($file_name=("index.html")){
     
    $fileinfo_1=pathinfo($file_name);
    //Je voudrais exclure les répertoires dont le chemin contient les noms figurant dans $bad_repert
    if (!in_array(strtolower($fileinfo_1["dirname"]),$bad_repert)){
    		$file_name = "$current_directory" . "$file_name";
    		$pieces_2 = explode("Photographie", $file_name);
    		print "<tr><td> $pieces_2[1]</td>";
            $date_changed = filemtime( $file_name );
            $pretty_date = date("d/m/Y H:i:s", $date_changed);
            print  "<td> ::: $pretty_date</td></tr>" ;
    		}
    		}
    		}
    		}
                            }
                        }
                    }
                }
                closedir ( $read_path );
                $i++;    
            }
                print "</table>";    
                print "</body></html>";    
        } // if go_back > 0 )            
    ?>

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    ligne 71, il faut corriger ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($file_name=="index.html"){
     
    }
    Remarque numéro 2 : il faut absolument indenter ton code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php
    $go_back = 0;                        // affiche résultat ou non
    $i = 0;                                // compteur de boucle
    $dir_count = 0;                        // initialisation de la boucle
    $date = time();                        // date et heure actuelle
    $one_day = 86400;                    // nombre de secondes pour une journée
    $days = preg_replace("/[^0-9]/i",'', $_POST["jours"]);    // nombre de jours à vérifier
    $path = preg_replace("/[^_A-Za-z0-9-\.%\/]/i",'', $_POST["chemin"]);    // chemin de fichier absolu (avec nettoyage contre piratage)
    $path = preg_replace("/\.\.\//",'', $path);    // on interdit la commande ../
    define('ABSPATH', dirname(__FILE__));
    $path = ABSPATH.$path;    // chemin de fichier absolu de votre compte du genre /home/loginftp/www/ ou /home/loginftp/public_html/ etc.
    $directories_to_read[$dir_count] = ($path);
     
    // Formulaire pour remonter le temps
     
    print "<html><body><h3>Vérifier les derniers fichiers modifiés depuis votre dernière lecture <br /></h3>";
    print "<table><tr><td>";
    print "<form method=\"post\">";
    print "<tr><td>Nombre de jours &agrave; v&eacute;rifier 1-99: </td>";
    print "<td>&nbsp;&nbsp;<input type=\"text\" name=\"jours\" maxlength=\"2\" size=\"2\"></td></tr>";
    print "<tr><td>Facultatif Nom du sous-r&eacute;pertoire &agrave; contr&ocirc;ler: </td>";
    print "<td><input type=\"text\" name=\"chemin\" maxlength=\"80\" size=\"30\" value=\"/Photographie/\" > (mettre un / &agrave; la fin de votre sous-r&eacute;pertoire )</td></tr>";
    print "<tr><td> </td><td><input type=\"submit\" value=\" V&eacute;rifier Fichiers \">";
    print "</form>";
    print "</td></tr></table>";
    // Affichage du résultat
    $go_back = $one_day * $days;
    print "<br /> Retour sur les <strong>" . ($go_back/$one_day) ."</strong> derniers jours. <br /><br />";
     
    if ( $go_back > 0 ){
      print "<table><tr><th>Nom du Fichier</th><th>Date de modification</th></tr>";
      $diff = $date - $go_back;
     
      while ( $i <= $dir_count ){
        $current_directory = $directories_to_read[$i];
     
        // obtenir info fichier
        $read_path = opendir( $directories_to_read[$i] );
        while ( $file_name = readdir( $read_path)){
          if (( $file_name != '.' )&&( $file_name != '..' )){
            if ( is_dir( $current_directory . "/"  . $file_name ) == "dir" ){
              // besoin d'obtenir tous les fichiers d'un répertoire
              $d_file_name = "$current_directory" . "$file_name";
              $dir_count++;
              $directories_to_read[$dir_count] = $d_file_name . "/";
            }
            else{
              $file_name = "$current_directory" . "$file_name";
     
              // Si temps modifiés plus récent que x jours, affiche, sinon, passe
              if ( (filemtime( $file_name)) > $diff  ){
                $bad_extensions = array( 'html' , 'js' , 'gif' , 'png', 'php','jpg', 'jpeg','xml');
                $fileinfo=pathinfo($file_name);
                if (!in_array(strtolower($fileinfo["extension"]),$bad_extensions)){
                  $pieces = explode("Photographie", $file_name);
                  print "<tr><td> $pieces[1]</td>";
                  $date_changed = filemtime( $file_name );
                  $pretty_date = date("d/m/Y H:i:s", $date_changed);
                  print  "<td> ::: $pretty_date</td></tr>" ;
                }
     
                else {
                  // liste des répertoires à exclure
                  $bad_repert = array( 'javascript' , 'files' );
                  // j'effacetue une recherche dans les répertoires dont le nom contient E-Book
                  if (stristr($file_name, 'E-Book', true)){
                    //Si je trouve un dossier index.html
                    if ($file_name=="index.html"){
     
                      $fileinfo_1=pathinfo($file_name);
                      //Je voudrais exclure les répertoires dont le chemin contient les noms figurant dans $bad_repert
                      if (!in_array(strtolower($fileinfo_1["dirname"]),$bad_repert)){
                        $file_name = "$current_directory" . "$file_name";
                        $pieces_2 = explode("Photographie", $file_name);
                        print "<tr><td> $pieces_2[1]</td>";
                        $date_changed = filemtime( $file_name );
                        $pretty_date = date("d/m/Y H:i:s", $date_changed);
                        print  "<td> ::: $pretty_date</td></tr>" ;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        closedir ( $read_path );
        $i++;    
      }
      print "</table>";    
      print "</body></html>";    
    } // if go_back > 0 )            
    ?>
    Remarque numéro 3. Je n'en suis pas sûre, mais si tu souhaites faire ce que l'on appelle une recherche récursive dans ton répertoire, avec dedans des fichiers ou des sous-répertoires etc. etc., il te faut une fonction récursive. Exemple trouvé sur le manuel PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    function find_all_files($dir)
    {
        $root = scandir($dir);
        foreach($root as $value)
        {
            if($value === '.' || $value === '..') {continue;}
            if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
            foreach(find_all_files("$dir/$value") as $value)
            {
                $result[]=$value;
            }
        }
        return $result;
    }
    ?>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre confirmé
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Par défaut
    Merci beaucoup

    je vais regarder tout cela

  4. #4
    Membre confirmé
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Par défaut
    J'ai modifié et simplifié ce bout de code Mais le pb demeure

    Je ne comprends pas pourquoi je n'arrive pas à faire cette exclusion le code qui pose pb se situe en ligne 82 if (!in_array(strtolower($file_name),$exclude)) qui ne prend pas en compte le fichier $exclude



    J'ai utilisé d'autres solutions que in_array sans aucun succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    <?php
    /*
    Donne la liste des derniers fichiers créés ET modifiés.
    
    */
     
        $go_back = 0;                        // affiche résultat ou non
        $i = 0;                                // compteur de boucle
        $dir_count = 0;                        // initialisation de la boucle
        $date = time();                        // date et heure actuelle
        $one_day = 86400;                    // nombre de secondes pour une journée
        $days = preg_replace("/[^0-9]/i",'', $_POST["jours"]);    // nombre de jours à vérifier
        $path = preg_replace("/[^_A-Za-z0-9-\.%\/]/i",'', $_POST["chemin"]);    // chemin de fichier absolu (avec nettoyage contre piratage)
        $path = preg_replace("/\.\.\//",'', $path);    // on interdit la commande ../
        define('ABSPATH', dirname(__FILE__));
        $path = ABSPATH.$path;    // chemin de fichier absolu de votre compte du genre /home/loginftp/www/ ou /home/loginftp/public_html/ etc.
        $directories_to_read[$dir_count] = ($path);
     
        // Formulaire pour remonter le temps
     
        print "<html><body><h3>Vérifier les derniers fichiers ajoutés depuis votre dernière lecture <br /></h3>";
        print "<table><tr><td>";
        print "<form method=\"post\">";
        print "<tr><td>Nombre de jours à vérifier 1-99: </td>";
        print "<td>&nbsp;&nbsp;<input type=\"text\" name=\"jours\" maxlength=\"2\" size=\"2\"></td></tr>";
    	print "<tr><td>Facultatif: Nom du sous-répertoire à contrôler: </td>";
        print "<td><input type=\"text\" name=\"chemin\" maxlength=\"80\" size=\"30\" value=\"/Photographie/\" > (mettre un / à la fin de votre sous-répertoire )</td></tr>";
        print "<tr><td> </td><td><input type=\"submit\" value=\" Lancer la vérification \">";
        print "</form>";
        print "</td></tr></table>";
        // Affichage du résultat
        $go_back = $one_day * $days;
        print "<br /> Retour sur les <strong>" . ($go_back/$one_day) ."</strong> derniers jours. <br /><br />";
     
        if ( $go_back > 0 ){
            print "<table><tr><th>Nom du Fichier</th><th>Date de modification</th></tr>";
            $diff = $date - $go_back;
     
            while ( $i <= $dir_count ){
                $current_directory = $directories_to_read[$i];
     
                // obtenir info fichier
                $read_path = opendir( $directories_to_read[$i] );
                while ( $file_name = readdir( $read_path)){
                    if (( $file_name != '.' )&&( $file_name != '..' )){
                        if ( is_dir( $current_directory . "/"  . $file_name ) == "dir" ){
                            // besoin d'obtenir tous les fichiers d'un répertoire
                            $d_file_name = "$current_directory" . "$file_name";
                            $dir_count++;
                            $directories_to_read[$dir_count] = $d_file_name . "/";
                        }else{
     
    						$file_name = "$current_directory" . "$file_name";
    						// Si temps modifiés plus récent que x jours, affiche, sinon, passe
                            if ( (filemtime( $file_name)) > $diff  ){
    						$bad_extensions = array( 'html' , 'js' , 'gif' , 'png', 'php','jpg', 'jpeg','xml', 'txt');
    						$fileinfo=pathinfo($file_name);
    						if (!in_array(strtolower($fileinfo["extension"]),$bad_extensions))
    		{
    							$pieces = explode("Photographie", $file_name);
    							$position="/Photographie/";
    							?>
    							<tr><td><a href="<?php echo $position.$pieces[1]; ?> " target="_blank"><?php echo $position.$pieces[1]; ?></a></td>
    							<?php
                                //print "<tr><td>$pieces[1]</td>";
                                $date_changed = filemtime( $file_name );
                                $pretty_date = date("d/m/Y H:i:s", $date_changed);
                                print  "<td> ::: $pretty_date</td></tr>" ;
    		}
     
     
     
     
     
     
    											 else {
    														  // liste des répertoires à exclure
    														  $exclude = array( 'javascript' , 'files' );
    														  // j'effectue une recherche dans les répertoires dont le nom contient E-Book
    														  if (stristr($file_name, 'E-Book', true)){
    															//Je voudrais exclure les répertoires dont le chemin contient les noms figurant dans $bad_repert
    															  if (!in_array(strtolower($file_name),$exclude)){
    																$file_name = "$current_directory" . "$file_name";
    																$pieces_2 = explode("Photographie", $file_name);
    																print "<tr><td> $pieces_2[1]</td>";
    																$date_changed = filemtime( $file_name );
    																$pretty_date = date("d/m/Y H:i:s", $date_changed);
    																print  "<td> ::: $pretty_date</td></tr>" ;
    															  }
    															}
    														  }
     
     
     
     
     
     
     
     
     
                            }
                        }
                    }
                }
                closedir ( $read_path );
                $i++;    
            }
                print "</table>";    
                print "</body></html>";    
        } // if go_back > 0 )            
    ?>

  5. #5
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    regarde ce que donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo strtolower($file_name);
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Membre confirmé
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Par défaut
    Merci Dendrite

    j'affiche bien dans la variable tous les fichiers avec les chemins

    mais je n'arrive pas à exclure ceux qui contiennent les variables

Discussions similaires

  1. [MySQL] Sécurité et publication du code PHP et SQL sur le forum
    Par redoran dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 25/11/2012, 21h26
  2. Aide sur un morceau de code
    Par _Lili_ dans le forum WordPress
    Réponses: 1
    Dernier message: 13/06/2010, 14h51
  3. Réponses: 2
    Dernier message: 01/09/2008, 17h07
  4. Réponses: 3
    Dernier message: 06/03/2008, 15h15
  5. Cherche lien info... sur l'analyse du code
    Par Alec6 dans le forum Qualimétrie
    Réponses: 3
    Dernier message: 03/03/2004, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo