DerEddy

Dir.class.php

Apr 14th, 2014
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.86 KB | None | 0 0
  1. <?php
  2.   error_reporting (E_ALL | E_NOTICE);
  3.   class Dir
  4.   {
  5.     private $root;
  6.     private $filetype = array ();
  7.     private $deny     = array ();
  8.     private $files    = array ();
  9.  
  10.     // Festlegen des Startverzeichnisses
  11.     public function setRoot ($var)
  12.     {
  13.       $this -> root = $var;
  14.     }
  15.  
  16.     // Festlegen der verbotenenen Ordner
  17.     public function denyFolder ($var)
  18.     {
  19.       $this -> deny = $var;
  20.     }
  21.  
  22.     // Festlegen der erlaubten Dateitypen
  23.     public function setFiletype ($var)
  24.     {
  25.       $this -> filetype = $var;
  26.     }
  27.  
  28.     // Suche starten, gibt im Erfolgsfall $files als Array zurück
  29.     public function startSearch ()
  30.     {
  31.       $this -> doNavigate();
  32.       if ($this -> files)
  33.       {
  34.         return $this -> files;
  35.       }
  36.       else
  37.       {
  38.         return false;
  39.       }
  40.     }
  41.  
  42.     // rekursive Methode zum Durchlaufen aller Ordner und Dateien
  43.     private function doNavigate ()
  44.     {
  45.       // "temporäres" Array zum späteren sortieren
  46.       $sort = array ();
  47.       // aktuelles Verzeichnis wird geöffnet, wenn Verzeichnis vorhanden
  48.       // und Leserechte vorhanden sind
  49.       if ($handle = opendir ($this -> root))
  50.       {
  51.         // Ordern und Dateien im "temopäres" Array $sort einlesen
  52.         while ($found = readdir ($handle))
  53.         {
  54.           if ($found != '.' && $found != '..')
  55.           {
  56.             $sort[] = $this -> root.'/'.$found;
  57.           }
  58.         }
  59.         // Überprüfung auf Inhalte
  60.         if (sizeof ($sort) > 0)
  61.         {
  62.           // alphabetisch sortieren
  63.           natcasesort($sort);
  64.           // Array in Schleife durchlaufen
  65.           foreach ($sort as $var)
  66.           {
  67.             // Wenn Ordner
  68.             if (is_dir ($var))
  69.             {
  70.               // Prüfen auf erluabten Ordner
  71.               if (!$this -> checkFolder($var))
  72.               {
  73.                 // aktuelles Verzeichnis festlegen
  74.                 $this -> setFolder ($var);
  75.                 // Rekursion, Methode ruft sich selber noch einmal auf
  76.                 $this -> doNavigate();
  77.               }
  78.             }
  79.             // Wenn Datei
  80.             else if (is_file($var))
  81.             {
  82.               // Methode zum Schreiben der Informationen aufrufen
  83.               $this -> setFile ($var);
  84.             }
  85.           }
  86.         }
  87.         // Verzeichnis schließen
  88.         closedir($handle);
  89.       }
  90.     }
  91.  
  92.     // Methode, um aktuelles Verzeichnis anzupassen
  93.     private function setFolder ($folder)
  94.     {
  95.       $this -> root = $folder;
  96.     }
  97.  
  98.     // Methode zur Überprüfung der erlaubten Ordner
  99.     private function checkFolder ($folder)
  100.     {
  101.       //Schleife zur Überprüfung aller verbotenen Ordner
  102.       foreach ($this -> deny as $forbidden)
  103.       {
  104.         // Pfad in Einzelordner zerlegen
  105.         $tmp = explode ('/', $folder);
  106.         // Überprüfung des letzten Ordners
  107.         if ($tmp[count($tmp) -1] == $forbidden)
  108.         {
  109.          // wenn verboten, true zurückgeben und abbrechen
  110.           return true;
  111.         }
  112.       }
  113.     }
  114.  
  115.     // Methode zur Erfassung der gewünschten Inhalte
  116.     private function setFile ($file)
  117.     {
  118.       // Datei wird auf korrekten Typ hin überprüft
  119.       if ($this -> checkFiletype($file))
  120.       {
  121.         // Dateigröße
  122.         $filesize = filesize ($file);
  123.         // letze Änderung
  124.         $filetime = filemtime ($file);
  125.         // Position des letzen "/"
  126.         $mark = strrpos ($file, "/");
  127.         // Pfad ohne Datei
  128.         $path = substr ($file, 0, $mark);
  129.         // Dateinamen ohne Pfadangabe
  130.         $file = substr ($file, $mark + 1);
  131.         // Infos in $files schreiben
  132.         $this -> files[] = array (
  133.                                     'path' => $path,
  134.                                     'file' => $file,
  135.                                     'size' => $filesize,
  136.                                     'time' => $filetime
  137.                                  );
  138.       }
  139.     }
  140.  
  141.     // Methode zur Überprüfung der gewünschten Dateitypen
  142.     private function checkFiletype ($file)
  143.     {
  144.       //Schleife zur Überprüfung aller erlaubten Dateien
  145.       foreach ($this -> filetype as $valid)
  146.       {
  147.         // wenn Dateiendung paßt, true zurückgeben und abbrechen
  148.         if (substr ($file, -4) == $valid)
  149.         {
  150.           return true;
  151.         }
  152.       }
  153.     }
  154.   }
  155.  
  156.   // Definition aller benötigten Parameter
  157.   $filetype = array ('.htm','.php');
  158.   $folder   = array ('allgemeines');
  159.   $root     = $_SERVER['DOCUMENT_ROOT'].'/update_neu';
  160.  
  161.   // Objekt vom Typ $dir erzeugen
  162.   $dir = new Dir;
  163.   // Startverzeichnis festlegen
  164.   $dir -> setRoot ($root);
  165.   // Erlaubte Ordner festlegen
  166.   $dir -> denyFolder ($folder);
  167.   // Erlaubte Dateitypen fetslegen
  168.   $dir -> setFiletype ($filetype);
  169.   // Suche beginnen
  170.   $result = $dir -> startSearch();
  171.   // Ergebnis ausgeben
  172.   print_r($result);
  173.  
  174. ?>
Advertisement
Add Comment
Please, Sign In to add comment