<?php
// ************************************
// *** dir_functions.lib.php ***
// ************************************
// -----------------------------------------------------------------------
/*
Copyright:
==============
Dieses Script wurde ursprünglich von Dennis Riehle geschrieben - Sie dürfen
das Script frei verwenden, bearbeiten und weitergeben, solange dieser Copyright
Hinweis nicht entfernt wird.
Es erfolgt keinerlei Haftung für eventuell durch dieses Script entstandene
Schäden - die Benutzung erfolgt auf eigene Gefahr.
Beschreibung:
==============
Dieses Script enthält ein paar einzelne PHP Funktionen, welche sich bei der
Arbeit auf dem lokalen File System hilfreich zeigen können.
Inhalt:
==============
- Funktion: dir_up ( string Path )
- Funktion: dir2array ( string Path [ , bool .ht-Files [ , bool Dot-Files ] ] )
- Funktion: rm_dir_files ( string Path )
- Funktion: filesize_dir ( string Path )
Veränderungen:
==============
Die Funktion dir2array() hat bis jetzt auch Datei mit Namen wie xy.htxy ausgefiltert,
allerdings sollten nur .htxy herrausgefiltert werden, denn in der Apache verbietet
auch nur auf letztere den Zugriff über HTTP.
*/
// -----------------------------------------------------------------------
function dir_up($path)
{
// Wenn der übergebene Pfad Slashes enthalt (keine Backslashes
{
// Dann den Pfad anhand der Slashes auflösen
// Wenn das letze Element leer ist, da z.B. der $path mit / geendet hat
{
// Letztes Arrayelement löschen und neues letztes Element leeren
$dirs[ count($dirs) -
1 ] =
"";
}
// Sonst einfach nur das letzte Element im Array leeren
else
{
$dirs[ count($dirs) -
1 ] =
"";
}
// Das Array mit / verbinden und zurückliefern
}
// Ansonsten, wenn der Pfad Backslashes enthält
elseif(ereg("\\\\",
$path))
{
// Dann den Pfad anhand der Backslashes auflösen
// Wenn das letze Element leer ist, da z.B. der $path mit \ geendet hat
{
// Letztes Arrayelement löschen und neues letztes Element leeren
$dirs[ count($dirs) -
1 ] =
"";
}
// Sonst einfach nur das letzte Element im Array leeren
else
{
$dirs[ count($dirs) -
1 ] =
"";
}
// Das Array mit \ verbinden und zurückliefern
}
// In allen anderen Fällen enthält der übergebene Pfad weder Slashes noch Backslashes,
// womit das Verzeichnis eine Ebene höher, mit ./ anzusprechen wäre
else
{
// Es wird im Linuxstil zurückgegeben, da dies allgemeingültig ist
return "./";
}
}
// -----------------------------------------------------------------------
function dir2array($dirpath, $ht_files = false, $dot_files = false)
{
// Wenn das Verzeichnis nicht geöffnet werden kann, false zurück liefern
{
return false;
}
// Rückgabearray für Filenames initialisieren
// Für jeden Inhalt des Ordners...
while(($file =
readdir($handle)) !==
false)
{
// Wenn
// der Dot-File Modus aktiviert ist oder der File kein Dot-File ist
// UND
// der ht-File Modus aktiviert ist oder der File kein ht-File ist
if( ($dot_files == true OR ($file != "." AND $file != ".."))
AND
($ht_files ==
true OR !
preg_match("/^\.ht(.*)/i",
$file))
)
{
// Dann den File in das Rückgabearray hinzufügen
$files[] = $file;
}
}
// Den Handle korrekt schließen
// Das Array mit den Files sortieren
// Und das Array zurückgeben
return $files;
}
// -----------------------------------------------------------------------
function rm_dir_files($dirpath)
{
// Backslashes durch normale Slashes ersetzen - multifunktional
// Wenn das letzte Zeichen in $dirpath ein Slash ist, diesen entfernen
if(substr($dirpath, -
1,
1) ==
"/")
{
$dirpath =
substr($dirpath,
0, -
1);
}
// Wenn das Verzeichnis nicht geöffnet werden kann, false zurück liefern
{
return false;
}
// Für jeden Inhalt des Ordners...
while(($file =
readdir($handle)) !==
false)
{
// Die Einträge . und .. auslassen
if($file == "." OR $file == "..")
{
continue;
}
// Ist der aktuelle Eintrag eine Datei, diese löschen
if(is_file($dirpath .
"/" .
$file))
{
unlink($dirpath .
"/" .
$file);
}
// Sonst, wenn es ein Verzeichnis ist, dieses leeren und löschen
// (per rm_dir_files())
else
{
rm_dir_files($dirpath . "/" . $file);
}
}
// Den Handle korrekt schließen
// Das Verzeichnis selber löschen
// und true zurückliefern
return true;
}
// -----------------------------------------------------------------------
function filesize_dir($dirpath)
{
// Buffer für Dateigröße initialisieren und auf 0 setzen
$filesize = 0;
// Wenn das letzte Zeichen in $dirpath ein Slash ist, diesen entfernen
if(substr($dirpath, -
1,
1) ==
"/")
{
$dirpath =
substr($dirpath,
0, -
1);
}
// Wenn das Verzeichnis nicht geöffnet werden kann, false zurück liefern
{
return false;
}
while(($file =
readdir($handle)) !==
false)
{
// Die Einträge . und .. auslassen
if($file == "." OR $file == "..")
{
continue;
}
// Ist der aktuelle Eintrag eine Datei, Größe zum Buffer hinzuzählen
if(is_file($dirpath .
"/" .
$file))
{
$filesize +=
filesize($dirpath .
"/".
$file);
}
// Sonst, wenn es ein Verzeichnis ist, Funktion erneut aurufen
// und Rückgabewert addieren
else
{
$filesize += filesize_dir($dirpath . "/" . $file);
}
}
// Endergebnis zurückliefern
return $filesize;
}
// -----------------------------------------------------------------------
/*
ENDE
*/
?>