Explorateur de repertoires en php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 408 fois - Téléchargée 26 fois

Contenu du snippet

visualise le contenu des (sous)repertoires et les affiche dans une page html

Source / Exemple :


<HTML>
<!-- DATE DE CREATION: <?php print (date("r")); ?> -->
<HEAD>
<TITLE>Explorateur PHP</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
</HEAD>
<BODY BGCOLOR=#ACD0D7 TEXT=#000000 LINK=#009900 VLINK=#FF6633 ONLOAD="prof.focus()">

<?php 
function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
  }
  $time_start = getmicrotime();
  
$prof=$_POST['prof'];
if (empty($prof)){$prof=1;}
?>
 <FORM ACTION="<?php print $_SERVER['SCRIPT_NAME'];  ?>" METHOD=POST>
<P ALIGN="center">
<B>Profondeur d'exploration </B>
<INPUT TYPE="text" NAME="prof" SIZE=3 MAXLENGTH=3 VALUE="<?php print $prof; ?>" 
  ONCHANGE="window.location.submit(true)">&nbsp;
<INPUT TYPE="button" VALUE="Maxi" ONCLICK="prof.value='max';prof.focus();">
<HR SIZE=3 COLOR="#800000"></P>
<nobr>
<SCRIPT LANGUAGE="PHP">

                                   // ******************************//
                                   //        Initialisation         //
                                   // ******************************//

//$prof="2";                          // Profondeur d'exploration      //
$TotalFichiers=0;                  // Total des fichiers trouver    //
chdir(".");                        // Point de depart d'exploration //

// ***************************           Initialiser la fonction
function Explore($Niv,$path,$prof){
    global $prof,$TotalFichiers;
    $TableRepertoires = array();   //******************************//
    $TableFichiers= array();       //      Variables locale        //
    $Entree= array();              //******************************//
    $dir = opendir(".");
// ***************************             lire les entrees
    while ($File = readdir($dir)){
        if($File != "." && $File != ".."  ) {
        $Entree[]= "$File";
        }
        $i++;
    }
    closedir($dir);
// ***************************              Separer Repertoire / Fichiers
    $Max = count($Entree);
    for ($i = 0 ; $i != $Max ; $i++){
        if (is_dir($Entree[$i])) {
           $TableRepertoires[]="$Entree[$i]";
        }else{
           $TableFichiers[]=  $Entree[$i];
        }
    }
// ***************************              affiche le repertoire
    sort ($TableRepertoires);
    $Max = count($TableRepertoires);
    for($i = 0; $i != $Max; $i++){
        echo str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|",$Niv-1);
        //print "<B> <font color=\"#7F0000\">$Niv/$prof</font> <FONT COLOR=\"#FF0000\">&nbsp;$TableRepertoires[$i]</FONT></B> <BR>\n";
        print "<font color=\"#7F0000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;<b>$Niv/$prof</b></font><font size=\"+1\" color=\"#FF0000\">
                <a href=\"$path$TableRepertoires[$i]/\"><b>$TableRepertoires[$i]</b></a></font><br />\n";
        if ($Niv != $prof) {        // si < maxi profondeur on y retourne
		
           $Niv++;
           $path_bak = $path;
           chdir ("$TableRepertoires[$i]");
           Explore($Niv,"$path$TableRepertoires[$i]/","");
           chdir("..");
           $path = $path_bak;
           $Niv--;
        }
    }
// ***************************              on affiche simplement les fichiers
    sort ($TableFichiers);
    $Max = count($TableFichiers); 
    for($i = 0; $i != $Max; $i++){
        echo str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|",$Niv);
        //print "<FONT COLOR=\"#0000FF\"><B>&nbsp;&nbsp;$TableFichiers[$i]</B></FONT><BR>\n";
        print "&nbsp;&nbsp;<a href=\"$path$TableFichiers[$i]\">$TableFichiers[$i]</a><br />\n";
    }
    $TotalFichiers += $Max;
    echo str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|",$Niv-1);
	print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'-»";
    print "<b><i>&nbsp;&nbsp;$Max</i> Fichiers </b><br>";
    echo str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|",$Niv-1);
	print "<br>";
}
// ***************************             fin des fonctions

$Table=Explore(1,"",$prof); // ********          on execute la fonction
  $time_end = getmicrotime(); // temp final au retour
  $time = $time_end - $time_start; // calcule le temp d'execution du script
print"<b><i><br>&nbsp;$TotalFichiers</i> Fichiers  trouves</b> en: $time secondes<br>";

</SCRIPT>
</FORM>
</nobr>
</BODY>
</HTML>

Conclusion :


- attention une trop grande profondeur d'exploration conduit a un timeout et les
liens symbolique sont des boucles d'exploration possibles donc timeout aussi
- source commenter pour une adaptation possible
- copier le sur votre serveur ,le nom na pas d'importance
en .php .php3 .php4 ...... il marche avec la directive RegisterGlobal = off
- respect les .htaccess (donne l'erreur et continu)

+++ un script tout cru pour ne pas se casser la tronche a le faire +++

A voir également

Ajouter un commentaire

Commentaires

Messages postés
49
Date d'inscription
dimanche 21 septembre 2003
Statut
Membre
Dernière intervention
17 décembre 2008

Salut,

HRZ, je ne pense pas qu'un onload fonctionne sur un /BODY, je te conseille plutot de mettre, avant la balise :

<SCRIPT LANGAGE="javascript">
document.forms[0].prof.focus();
</SCRIPT>

Voila, bonne continuation

Bye
Messages postés
43
Date d'inscription
samedi 12 juillet 2003
Statut
Membre
Dernière intervention
4 avril 2010

si j'ai bien compris je remplace :


par


et
par

? a voir !
Messages postés
49
Date d'inscription
dimanche 21 septembre 2003
Statut
Membre
Dernière intervention
17 décembre 2008

Salut,

Je ne vois pas l'utiliter mais l'idée est extra, le code bien détaillé et bien commenté, moi je dit chapeau 10/10
Mais petite erreur de javascript :
tu fais un onload dans le body appelant un champ du formulaire, or petit rappel un navigateur interprète ligne a ligne donc ton champ est indéfini au chargement de la page. Donc si tu veux éviter l'erreur rajoute le focus a la fin de ta page de code. Ainsi je descend a 9/10.

Bonne continuation
Messages postés
43
Date d'inscription
samedi 12 juillet 2003
Statut
Membre
Dernière intervention
4 avril 2010

la touche enter peut etre ?
ou tu apelle la page avec en parametre la profondeur ?
ou une modification du debut de page ?

pour ma part le script est en ligne sur un site sans probleme ni en local

$prof=$_POST['prof'];// directive RegisterGlobal = off (PHP 4 )
si non ajouter // devant la ligne

pour erreur javascript : suprimer le onclick tout simplement

pour le retour du message d'erreur de la fonction ,il existe une solution simple dans le manuel php
Messages postés
43
Date d'inscription
samedi 12 juillet 2003
Statut
Membre
Dernière intervention
4 avril 2010

la touche enter peut etre ?
ou tu apelle la page avec en parametre la profondeur ?
ou une modification du debut de page ?

pour ma part le script est en ligne sur un site sans probleme ni en local

$prof=$_POST['prof'];// directive RegisterGlobal = off (PHP 4 )
si non ajouter // devant la ligne

pour erreur javascript : suprimer le onclick tout simplement

pour le retour du message d'erreur de la fonction ,il existe une solution simple dans le manuel php
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.