<?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 ) :: ALPHA VERSION!
- Funktion: dir2array ( string Path [ , bool .ht-Files [ , bool Dot-Files ] ] )
- Funktion: rm_dir_files ( string Path )
- Funktion: filesize_dir ( string Path )
*/
// -----------------------------------------------------------------------
function dir_up($path) /* Diese Funktion ist als experimentell eingestuft!! */
{
// 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(.*)/U",
$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
*/
?>