Hauptmenü

Untermenü

OOP mit PHP5 - Einstiegstutorial 1 - Erfassung der Dateien

1. Die Abschnitte

2. Erste Ergänzung

Um nun die Dateien wie gewünscht zu bekommen, müssen wir zuerst unsere Methode doNavigate ergänzen. Habt ihr auch schon eine Idee wo? Genauuuu, in der foreach-Schleife. Die sieht dann so aus.


foreach ($sort as $var)
{
  if (is_dir ($var))
  {
    ...
  }
  else if (is_file($var))
  {
    $this -> setFile ($var);
  }
}

Erklärung

Bedarf eigentlich keiner weiteren Worte. else if (is_file($var)) überprüft, ob es sich um eine Datei handelt und $this -> setFile ($var); ruft die noch nicht existierende Methode setFile auf.

3. setFile

Nun wollen wir die benötigten Dateiinformationen in unser Array $files schreiben. Dazu müssen wir erst mal wissen, wie der Dateiname ($file) aufgebaut ist. Zum Beispiel so: "/srv/www/htdocs/relaunch/site/css/syntax.htm". Daraus ergibt sich dann die folgende Vorgehensweise.


private function setFile ($file)
{
  $filesize filesize ($file);
  $filetime filemtime ($file);
  $mark     strrpos ($file"/");
  $path     substr ($file0$mark);
  $file     substr ($file$mark 1);
}

Erläuterung

Über filesize und filemtime informiert ihr euch bitteschön mal selber. $mark = strrpos ($file, "/"); sucht nach der Position, wo sich ein "/" am hintersten Ende befindet. Da wisst ihr, wo die Ordner aufhören und die Datei anfängt. $path = substr ($file, 0, $mark); liefert also den Pfad zur Datei und $file = substr ($file, $mark + 1); den Dateinamen. Warum aber das + 1? Ganz einfach, $mark ist die Position des letzten "/". Daher müsst ihr substr noch eins dazuzählen, um besagtes "/" herauszufiltern. So und diese Informationen schreiben wir jetzt in unser Array $files:


private function setFile ($file)
{
  ...
  $this -> files[] = array (
                            'path' => $path,
                            'file' => $file,
                            'size' => $filesize,
                            'time' => $filetime
                            );
}

4. Überprüfung der erlaubten Dateitypen

Funktioniert im Prinzip genau so, wie bei der Überprüfung der Ordner. Der Unterschied liegt nur im Detail.


private function checkFiletype ($file)
{
  foreach ($this -> filetype as $valid)
  {
    if (substr ($file, -4) == $valid)
    {
      return true;
    }
  }
}

Erläuterung

In der foreach-Schleife durchlaufen wir unser Array $filetype mit den gewünschten Dateitypen. Wenn die letzten vier Buchstaben (also die Dateiendung, z.B. .htm) von $file damit übereinstimmen, geben wir true zurück und brechen die Schleife ab, da wir ja gefunden haben, wonach wir suchen.

Um diese Methode nun aufzurufen, müssen wir die Methode setFile entsprechend modifizieren.


private function setFile ($file)
{
  if ($this -> checkFiletype($file))
  {
    // Hier kommt der bisherige Code hinein
    ...
  }
}

5. Ausgabe

Wenn ihr alles richtig gemacht habt, so könnt ihr nun am Ende eures Codes mit einem einfachen print_r euch das Ergebnis ansehen und nach Belieben weiterverarbeiten.


...
$dir = new Dir;
$dir -> setFiletype ($filetype);
$dir -> denyFolder ($folder);
$dir -> setRoot ($root);
$result $dir -> startSearch();
print_r($result);

6. Da stimmt doch was nicht

Was aber passiert mit Dateien, die zum Beispiel so enden: ".tar.gz" und wir ".gz" als erlaubten Dateityp definiert haben? Pech gehabt. In diesem Fall funktioniert das nicht, weil wir hier nur auf Endungen mit drei(!) Buchstaben prüfen. Da wir aber in diesem Tutorial sowieso nicht sehr genau programmiert haben, fällt dieses Manko auch nicht mehr ins Gewicht. Das kommt alles beim zweiten. Bis auf die Sache mit besagter Endung. Das könnt ihr aber ganz einfach mit strrpos machen. Also selber.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt