[RESOLU] Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

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 : [RESOLU] Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par lucieemtl » 18 janv. 2016, 10:58

Un ami est venu m'aider et j'ai corrigé.

Code : Tout sélectionner

<style> <?php include 'css/style.css'; include 'css/jqueryFileTree.css'; ?> </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> <script> <?php include 'js/checkall.js'; ?> </script> <div id="explorateur"> <header id="header"> <input type="checkbox" name="toutCocher" id="checkall"/> <input type="button" name="valider" id="boutonValider" value="Mettre à jour"/> </header> <div id="container_id"> <?php getDirectory('../'); echo '<table id="tableExplorer">'; function getDirectory( $path = '../', $level = 0 ) { // Répertoires à ignorer $ignore = array( '.', '..' ); // Répertoire à ouvrir $dh = @opendir( $path ); // Boucler dans le répertoire : while( false !== ( $file = readdir( $dh ) ) ) { //Si ce fichier ne doit pas être ignoré alors... if( !in_array( $file, $ignore ) ) { // On effectue un espace pour une meilleure vue... $spaces = str_repeat('&nbsp;', ($level * 5 )); // Et on ne montre que les sous-répertoires ! if(is_dir( "$path/$file" ) ) { //On place dans une variable les droits de chaque répertoires que l'on appelera à chaque fois $perms = substr(sprintf('%o', fileperms($path)), -3); // On appelle à nouveau cette fonction dans les nouveaux répertoires de façon à ce que ce soit récursif. echo"<tr><td><ul><li id=\"arborescence\">$spaces<input type=\"checkbox\" name=\"checkbox\"/><a href=$path/$file><img src=\"/wordpress2/wp-content/plugins/DWPSecurity/icons/directory.png\" height=\"20\"/> $file</a><p>($perms)</p></li>"; getDirectory("$path/$file", ($level+1)); } } echo"</ul></td>"; } // Close the directory handle closedir( $dh ); echo "</tr>"; } echo '</table>'; ?> </div>

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par Saian » 17 janv. 2016, 14:24

Répertoire ou fichier :
if(is_dir($pathfile))
  // répertoire
else
  // fichier
Sinon il y a un problème entre la récursivité de la fonction et le balisage html (un table qui vient se placer sous un li sans fermeture du ul). Peut être qu'en fermant le li après ces lignes (plutôt qu'avant) ça ira mieux :
if(filetype($pathfile) == 'dir'){               
  mkmap($pathfile);               
}

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par lucieemtl » 16 janv. 2016, 23:45

Bonsoir à toutes et à tous, me revoilà avec mon problème !

Cette fois, j'ai réussi à intégrer dans mon code une boucle récursive mais le problème est que je n'arrive pas à ne lire que les fichiers, j'ai tenté pleins de trucs mais dès que je déplace un tout petit bout de la fonction ça ne va plus ! Donc c'est tout j'aurai voulu savoir comment faire pour y remédier et, savoir pourquoi j'ai également des checkboxs qui se placent n'importe comment.

Bonne soirée à tous !

Voici mon code :

Code : Tout sélectionner

<style> <?php include 'css/style.css'; include 'css/jqueryFileTree.css'; ?> </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> <script> <?php include 'js/checkall.js'; ?> </script> <div id="explorateur"> <header id="header"> <input type="checkbox" name="toutCocher" id="checkall"/> <input type="button" name="valider" id="boutonValider" value="Mettre à jour"/> </header> <div id="container_id"> <?php function mkmap($dir){ echo ' <table id="tableExplorer"> '; $folder = opendir ($dir); while ($file = readdir ($folder)) { if ($file != "." && $file != "..") { $pathfile = $dir.'/'.$file; echo " <tr> <td> <input type=\"checkbox\" name=\"checkbox\"/> </td>"; echo " <td> <ul> <li> <a href=$pathfile>$file</a> </li>"; if(filetype($pathfile) == 'dir'){ mkmap($pathfile); } } echo " </ul> </td> "; } closedir ($folder); echo "</tr></table>"; } ?> <?php mkmap('.'); ?> </div> </div>

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par Saian » 15 janv. 2016, 17:19

Salut, quand tu génères le chemin du fichier pour tester si il existe, il faudrait peut être ajouter un / entre le . et le nom du fichier.
Dans file_exists($dossier . $valeur) avec $dossier = '.' et $valeur = 'nom_du_fichier' ça fait un file_exists('.nom_du_fichier') alors que tu veux faire un file_exists('./nom_du_fichier').

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par lucieemtl » 15 janv. 2016, 16:38

J'ai essayé avec que tu as ça n'a rien changé :/

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par lucieemtl » 15 janv. 2016, 16:32

Je vais essayé comme tu as fais mais si tu veux je viens d'essayer comme suivant et ça ne fonctionne pas (enfin disons que je n'ai que la case à cocher et le echo "Droits du fichier", sinon la boucle ne fonctionne pas :(

Code : Tout sélectionner

<style> <?php include 'css/style.css'; include 'css/jqueryFileTree.css'; ?> </style> <div id="explorateur"> <header id="header"> <input type="checkbox" name="toutCocher"/> <input type="button" name="valider" id="boutonValider" value="Mettre à jour"/> </header> <div id="container_id"> <?php $dossier = '.'; $tableau = scandir($dossier); natcasesort($tableau); if(count($tableau)>2) { echo ' <table id="tableExplorer">'; echo ' <tr> <td> <input type="checkbox" name="checkbox"/> </td> <td> <ul class=\"jqueryFileTree\" style=\"display: none;\">'; foreach($tableau as $valeur) { if(file_exists($dossier . $valeur) && $valeur != '.' && $valeur != '..' && is_dir($dossier . $valeur)) { echo "<li class=\"directory collapsed\"><a href=\"#\" rel=\"" . htmlentities($valeur) . "/\">" . htmlentities($valeur) . "</a></li>"; } } foreach($tableau as $valeur){ if(file_exists($dossier . $valeur) && $dossier != '.' && $valeur != '..' && !is_dir($dossier . $valeur)){ $ext = preg_replace('/^.*\./', '', $valeur); echo "<li class=\"file ext_$ext\"><a href=\"#\" rel=\"" . htmlentities($valeur) . "\">" . htmlentities($valeur) . "</a></li>"; } } echo ' </ul> </td> <td> Droits fichier </td> </tr> </table>'; } ?> </div> </div>

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par Spols » 15 janv. 2016, 15:57

Cela ça dépend de la configuration du serveur. mais je compterais pas trop la dessus, c'est assez changeant d'un hébergeur à l'autre et beaucoup trouvent que cela se rapproche plus d'une faille de sécurité que d'un comportement désirable.

A ta place, si ce n'est pas un affichage de TOUS les dossiers et sous-dossiers que tu recherche, je ferais plutôt un paramètre _GET pour ta variable $dossier (avec . comme valeur par défaut si c'est vide). Et construire les liens en conséquence
<style>
   <?php
      include 'css/style.css';
      include 'css/jqueryFileTree.css';
   ?>
</style>

<div id="explorateur">
   <header id="header">
      <input type="checkbox" name="toutCocher"/>
      <input type="button" name="valider" id="boutonValider" value="Mettre à jour"/>
   </header>
   <div id="container_id">
      <?php
      //Nom du dossier à scanner
      $dossier = (empty($_GET['dossier'])) ? '.' : $_GET['dossier'];
      //scandir — Liste les fichiers et dossiers dans un dossier
      $tableau = scandir($dossier);
      //On boucle
      foreach($tableau as $valeur)
      {
         echo '<a href="NOM DU FICHIER?dossier='.$dossier.'/'.$valeur.'">'.$valeur.'</a><br/>';
      }   
      ?>
   </div>
</div>
Remplace bien NOM DU FICHIER par le nom du fichier dans lequel est ton script avec extension
Et je te garanti pas que ça marche mais tente le.
Il y aurait bien quelque garde fou encore à placer

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par lucieemtl » 15 janv. 2016, 15:31

Spols, sur un click sur le lien, ça m'affiche bien les sous-dossiers, mais en localhost, c'est-à-dire que je suis redirigé vers une page qui n'est pas très esthétique mais on voit le contenu des dossiers. Peut-être qu'il s'agit juste de le faire apparaître dans mon code ?

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par Spols » 15 janv. 2016, 12:52

Alors il te faut une fonction récursive, c'est a dire qu'elle doit s'appeler elle-même pour analyser une profondeur de plus à chaque fois.

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par lucieemtl » 15 janv. 2016, 12:50

En effet, ça n'affiche bien que les fichiers, par contre oui il reste le soucis de parcourir l'arborescence de fichiers en fichiers ;)

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par KriSpiX » 15 janv. 2016, 12:43

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par Spols » 15 janv. 2016, 12:32

Avec ce script, tu n'ira pas en profondeur.

mais si tu veux effacer les fichiers, il suffit d'utiliser la fonction is_dir qui te dit si c'est un dossier ou non.
foreach($tableau as $valeur)
      {
         if (is_dir($valeur)) echo '<a href="'.$valeur.'">'.$valeur.'</a><br/>';
      }

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par lucieemtl » 15 janv. 2016, 12:28

Il me semble avoir commencé à trouver encore plus simple :

Code : Tout sélectionner

<style> <?php include 'css/style.css'; include 'css/jqueryFileTree.css'; ?> </style> <div id="explorateur"> <header id="header"> <input type="checkbox" name="toutCocher"/> <input type="button" name="valider" id="boutonValider" value="Mettre à jour"/> </header> <div id="container_id"> <?php //Nom du dossier à scanner $dossier = '.'; //scandir — Liste les fichiers et dossiers dans un dossier $tableau = scandir($dossier); //On boucle foreach($tableau as $valeur) { echo '<a href="'.$valeur.'">'.$valeur.'</a><br/>'; } ?> </div> </div>
Voici le résultat :

.
..
about.php
admin-ajax.php
admin-footer.php
admin-functions.php
admin-header.php
admin-post.php
admin.php
async-upload.php
comment.php
credits.php
css
custom-background.php
custom-header.php
customize.php
edit-comments.php
edit-form-advanced.php
edit-form-comment.php
edit-link-form.php
edit-tag-form.php
edit-tags.php
edit.php
export.php
freedoms.php
images
import.php
includes
index.php
install-helper.php
install.php
js
link-add.php
link-manager.php
link-parse-opml.php
link.php
load-scripts.php
load-styles.php
maint
media-new.php
media-upload.php
media.php
menu-header.php
menu.php
moderation.php
ms-admin.php
ms-delete-site.php
ms-edit.php
ms-options.php
ms-sites.php
ms-themes.php
ms-upgrade-network.php
ms-users.php
my-sites.php
nav-menus.php
network
network.php
options-discussion.php
options-general.php
options-head.php
options-media.php
options-permalink.php
options-reading.php
options-writing.php
options.php
plugin-editor.php
plugin-install.php
plugins.php
post-new.php
post.php
press-this.php
profile.php
revision.php
setup-config.php
theme-editor.php
theme-install.php
themes.php
tools.php
update-core.php
update.php
upgrade-functions.php
upgrade.php
upload.php
user
user-edit.php
user-new.php
users.php
widgets.php

C'est déjà mieux :)

Ma foi comment cacher tous les fichiers maintenant ^^ ?

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par Spols » 15 janv. 2016, 12:17

Alors il te faut une fonction récursive, c'est a dire qu'elle doit s'appeler elle-même pour analyser une profondeur de plus à chaque fois.

il y a aussi pas mal de script dispo sur la toile

Re: Afficher seulement les répertoires et sous répertoires d'une arborescence en PHP

par lucieemtl » 15 janv. 2016, 12:14

Mon code après quelques rectifications :

Code : Tout sélectionner

<style> <?php include 'css/style.css'; include 'css/jqueryFileTree.css'; ?> </style> <div id="explorateur"> <header id="header"> <input type="checkbox" name="toutCocher"/> <input type="button" name="valider" id="boutonValider" value="Mettre à jour"/> </header> <div id="container_id"> <?php if ($dossier = opendir('.')) { echo "<ul>"; while(false !== ($fichier = readdir($dossier))) { if($fichier==".." || $fichier=="." || $fichier=="index.php") { continue; } else { if(is_dir("..")) { echo "<li>$dossier</li>"; } } } echo "</ul>"; } else { echo "Erreur, le paramètre précisé dans la fonction n'est pas un dossier!"; } closedir($dossier); ?> </div> </div>
Et le résultat :

Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122
Resource id #122

Alors Spols je voudrais afficher une arborescence, seulement les dossiers et sous-dossiers (non les fichiers), la profondeur dépendrait du nombre de dossiers, et oui j'aimerai connaître la hiérarchie des sous-dossiers.