<?php

// ------------------------------------------------------------------------- //
// Parcours de répertoires                                                   //
// ------------------------------------------------------------------------- //
// Auteur: thierry66 <thierry66@ifrance.com>                                 //
// Web:                                                                      //
// ------------------------------------------------------------------------- //

/*
Ce script permet d'avoir un espace de téléchargement
sans autorisation de parcours de répertoire.

INSTALLATION :
Creer le dossier reserved à la racine de votre site.
Copier-y le source ci dessous dans un fichier nommé reserved/download.inc
Modifié les variables de paramétrage en fonction de votre FAI ou de votre configuration locale.

Modifier le require contenu dans index.php en fonction de votre FAI ou de votre configuration locale.
Copiez le fichier index.php dans tout les sous-répertoires
que vous voulez gérer avec ce script.

FICHIER INDEX.PHP :
  require ('/easyphp/www/reserved/download.inc');
*/

//***************************************
//         LISTE DES FONCTIONS
//***************************************
function EstLaRacine () {
// Renvoi vrai si le répertoire courant
// est la racine du site sinon renvoi faux
global $url_gfr;
// (variable globale : $url_gfr)
$booleen = strtolower(getcwd()) == strtolower($url_gfr);
return $booleen;
}

//------------------------------------------------------------------------
function GetPermission($filename){
/*   si $filename est un nom de fichier :
*       retourne la chaine de permissions
*   si $filename est un tableau de noms de fichiers :
*       retourne les chaines de permissions dans un tableau associatif
*/

   if(is_array($filename))
      {
      $str_tab = array();
      foreach($filename as $value)
         {
         $str_tab[$value] = getPerms($value);
         }
      return $str_tab;
      }
   else
      {
      if (is_string($filename))
         {
         if (is_dir($filename))
            $str = "d";
         else
            $str = "-";   
            
         $perms = fileperms($filename);
         $perms = $perms & 0777;

         $mask = 0700;

         for ($i = 0;$i<3;$i++)
            {
            $droits = $perms & $mask;
            if ($i == 0)
               {
               $droits = $droits >> 6;
               }
            else
               if ($i == 1)
                  {
                  $droits = $droits >> 3;
                  }
            if ($droits & 04)
               {
               $str .= "r";
               }
            else
               {
               $str .= "-";
               }
            if ($droits & 02)
               {
               $str .= "w";
               }
            else
               {
               $str .= "-";
               }
            if ($droits & 01)
               {
               $str .= "x";
               }
            else
               {
               $str .= "-";
               }
            $mask = $mask >> 3;
             }
          return $str;      
          }
}
}
// ---------------------------------------------------
function SiExtensionValideFichier ($fichier){
// retourne vrai si l'extension du fichier correspond
// au type prédéfini si dessous (html,htm,zip,...)
// sinon retourne faux
$bouts = explode(".", $fichier);
$ext = array(array_pop($bouts), implode(".", $bouts));
switch ($ext[0]) {
        case "html" : return 1;
                                  break;
        case "htm"  : return 1;
                                  break;
        case "zip"  : return 1;
                                  break;
        case "rar"  : return 1;
                                  break;
        case "exe"  : return 1;
                                  break;
        case "tar"  : return 1;
                                  break;
        case "gz"  : return 1;
                                  break;
        case "bz"  : return 1;
                                  break;
        case "swf"  : return 1;
                                  break;
        case "zone"  : return 1;
                                  break;
        case "ca"  : return 1;
                                  break;
        case "local"  : return 1;
                                  break;
        case "conf"  : return 1;
                                  break;
        case "txt"  : return 1;
                                  break;
        default     : return 0;
        }
}
  
// ----------------------------------------------------------------------------------------
function DetailArborescence($dir){
global $url_gfv;
// affiche l'arborescence du repertoire passé
// en paramètre ($dir)
$handle=opendir($dir);
        echo "<ul>";
        while ($file = readdir($handle))
                {
                        if ($file != '.' && $file != '..')
                        {
                if (! is_dir ("$GLOBALS[path]$file")) {
                                  if (SiExtensionValideFichier ($file)) {
                                    $lien =  $GLOBALS[path].rawurlencode($file);
                                        print ("<li>$file");
                                        $ok = 1;}
                                }
                        }

                        $fic_index = $GLOBALS[path].$file."/index.php";
                        //echo "REPAVANT=[$fic_index]";
                        if (is_dir($file) && $file != '.' && $file != '..' && file_exists ($fic_index))
                        {
                                    $lien =  $GLOBALS[path].$file;

                                        print ("<br><font face=Arial, Helvetica, sans-serif size=4><a name=$file></a>
<a href=$lien>$file</a></font><font face=Arial, Helvetica, sans-serif size=1> [<a href=#debut>Haut de page</a>][<a href=$url_gfv>Sommaire</a>]</font><br>");
                                        $toto = $GLOBALS["path"];
                                        $GLOBALS["path"] .= $file."/";
                                        chdir($file);
                                        $fic_index = $GLOBALS[path]."index.php";
                                        //echo "REPAPRES=[$fic_index]";
                                        if (file_exists ($fic_index) )
                                                DetailArborescence(".");
                                        $GLOBALS["path"] = $toto;
                                        chdir ("..");
                        }
                }

        echo "</ul>";
        closedir($handle);
}

//------------------------------------------------------------------------------------
function NombreDeFichiers (){
// Retourne le nombre de fichiers
// du dossier courant
$handle=opendir('.');
$cpt = 0;
while ($file=readdir($handle)) {
   if ($file != "." && $file != ".." && $file != "index.php" && !is_dir("./$file"))
      $cpt++;
      
}
closedir($handle);
return $cpt;
}

//------------------------------------------------------------------------------------
function NombreDeDossiers () {
// Retourne le nombre de dossier
// du répertoire courant
$handle=opendir('.');
$cpt = 0;
while ($file=readdir($handle)) {
   $fic_index = $GLOBALS[path].$file."/index.php";
   //echo "REP=[$fic_index]";
   if ($file != "." && $file != ".." && $file != "index.php" && is_dir("./$file") && file_exists ($fic_index))
      $cpt++;
}
closedir($handle);
return $cpt;
}

//-----------------------------------------------------------------------------------
Function AfficheDossiers () {
// Affiche les dossiers du répertoire courant
// si il existe (function NombreDeDossiers > 0)
// sinon affiche le message
$message = "Aucun dossier";
if (NombreDeDossiers() > 0)
         {
                $handle=opendir('.');
                echo "<table border=1 cellspacing=2>";
                while ($file=readdir($handle))
                {
                   echo "<tr>";
                                        $fic_index = $GLOBALS[path].$file."/index.php";
                                        //echo "REP=[$fic_index]";

                   if ($file != "." && $file != ".." && is_dir("./$file") && file_exists ($fic_index))
                   {
              $date_fic = date("G:i:s d F Y",filemtime($file));
                          $lien = rawurlencode ($file);
                      echo "<td><B><a href=$lien>$file</a></B></td><td> $date_fic &nbsp;</td>";
                   }
                   echo "</tr>";
                }
                echo "</table>";
                closedir($handle);
         }
else
                echo "<font face=Arial, Helvetica, sans-serif size=1><i><br>$message<br><br></i></font>";
}       

//-----------------------------------------------------------------------------------
Function AfficheFichiers () {
// Affiche les fichiers du répertoire courant
// si il existe (function NombreDeFichiers > 0)
// sinon affiche le message
$message = "Aucun fichier";
if (NombreDeFichiers() > 0)
        {
                $handle=opendir('.');
                echo "<table border=1 cellspacing=2>";
                while ($file=readdir($handle))
                {
                   echo "<tr>";
                   if ($file != "." && $file != ".." && $file != "index.php" && !is_dir("./$file"))
                   {
              $taille_fic = round(filesize($file) / 1024,2);
              $date_fic = date("G:i:s d F Y",filemtime($file));
              $proprio_fic = fileowner($file);
              $type_fic = filetype($file);
                          $permission = GetPermission ($file);
                          $lien = rawurlencode ($file);
                      echo "<td><B><a href=$lien>$file</a></B></td><td>$taille_fic Ko</td><td>$date_fic</td>";
                   }
                   echo "</tr>";
                }
                echo "</table>";
                closedir($handle);
        }
else
                echo "<font face=Arial, Helvetica, sans-serif size=1><i><br>$message<br><br></i></font>";
}       

//***************************************
//     FIN DE LISTE DES FONCTIONS
//***************************************
?>