OOP mit PHP5 - Einstiegstutorial 1 - Erfassung der Dateien
1. Die Abschnitte
- Überlegungen
- Festlegen der Eigenschaften
- Einleiten der Startsequenz
- Die Navigation
- Durchlaufen der Ordner
- Erfassung der Dateien
- Zusammenfassung
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 ($file, 0, $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