<?php
class RecursiveFileDeleteClass
{
/**
* Eigenschaften deklarieren
*/
// Variable um den Pfad zu speichern
var $path;
// Parameter für den Filter - kann sowohl ein String als auch ein Array sein
var $filter;
// Flag ob Unterverzeichnisse durchsucht werden sollen
var $search_sub_dir;
// Flag ob auch die Verzeichnisse / Unterverzeichnisse gelöscht werden sollen
var $delete_dir;
// Flag ob wirklich gelöscht werden soll, oder nur ein Testmode läuft
var $mode;
// Variable für die Ausgabe, welche Dateien/Ordner gelöscht wurden
var $delete_string;
// diverser Zähler-Variablen
var $files_counter;
var $deleted_files_counter;
var $dir_counter;
var $deleted_dir_counter;
/**
* Konstruktor
*
* @param string $path: Pfad der ausgelesen werden soll
* @param string $filter: Optionaler Parameter der angibt,
* alle Dateien angezeigt werden sollen, oder ob Suchpattern erfüllt sein müssen.
* Mehrere Pattern per Semikolon trennen - Default: all - Beispiel:
* $filter = ".html;.php" würde alle Dateien berücksichtigen,
* die im Namen ein ".html" oder ein ".php" beeinhalten
* @param boolean $search_sub_dir: Optionaler Parameter der angibt,
* ob Unterordner durchsucht werden sollen - Default: true
* @param boolean $delete_dir: Optionaler Parameter der angibt,
* ob Ordner / Unterordner gelöscht werden sollen - Default: false
* @param string $mode: Optionaler Parameter der angibt, ob wirklich gelöscht werden soll,
* oder ein Testmode läuft - mögliche Werte: DELETE oder TEST - Default: DELETE
*/
function RecursiveFileDeleteClass($path, $filter = "ALL_FILES",
$search_sub_dir = true, $delete_dir = false, $mode = "DELETE")
{
// Zähler auf null setzen
$this->files_counter = 0;
$this->deleted_files_counter = 0;
$this->dir_counter = 0;
$this->deleted_dir_counter = 0;
// Pfad festlegen
$this->path = $path;
// String mit den Angaben zu den gelöschten Dateien/Ordner leeren
$this->delete_string = "";
// Filter setzen
$this->setFilter($filter);
// Unterverzeichnisse durchsuchen?
$this->setSearchSubDir($search_sub_dir);
// Ordner löschen?
$this->setDeleteDir($delete_dir);
// Wirklich löschen oder Testmode?
$this->setMode($mode);
// Ordner auslesen
$this->readDir();
$this->dir_counter++;
// Sollen Ordner gelöscht werden?
if($this->delete_dir == true)
{
// Funktion die Ordner löscht aufrufen
$this->deleteDir($this->path);
}
} // ENDE: function RecursiveFileDeleteClass
/**
* Funktion die ein Verzeichnis ausliest
*/
{
// Variable in der die Struktur hinterlegt wird
$destination_path =
dir($this->
path);
//Alles aus dem Verzeichnis auslesen und prüfen, ob es sich um
//einen Ordner oder eine Datei handelt
while($file = $destination_path->read())
{
if($file == ".") continue;
if($file == "..") continue;
// Handelt es sich um ein Verzeichnis?
if(is_dir($this->
path .
$file))
{
$this->dir_counter++;
// Pfad für das Unterverzeichnis festlegen
$this->path .= $file . "/";
// Sollen Unterverzeichnisse ausgelesen werden?
if($this->search_sub_dir == true)
{
// Unterordner auslesen
$this->readDir();
}
// Sollen Ordner gelöscht werden?
if($this->delete_dir == true)
{
// Funktion die Ordner löscht aufrufen
$this->deleteDir($this->path);
}
// Übergeordnetes Verzeichnis herausfiltern
$this->getParentDir();
}
else
{
$this->files_counter++;
// Prüfen ob ein Filter gesetzt wurde
if($this->filter != "ALL_FILES")
{
// Flag das zur Prüfung benötigt wird, ob der Filter-Wert gefunden wurde
$go = false;
foreach($this->filter as $filter_value)
{
// Filter wurde gesetzt - Prüfen ob aktuelle Datei laut Filter gültig ist
if(strstr($file,
$filter_value))
{
// Gültig
$go = true;
}
}
// Wenn kein Filter-Wert gefunden wurde, Datei nicht berücksichtigen
if($go == false)
{
continue;
}
} // ENDE: if($this->filter != "ALL_FILES")
// Funktion die Dateien löscht aufrufen
$this->deleteFile($this->path . $file);
} // ENDE: else
} // ENDE: while($file = $destination_path->read())
// Ordner schließen
$destination_path->close();
} // ENDE: function readDir()
/**
* (Hilfs)Funktion die den Filter festlegt
*
* @param string $filter: Parameter der angibt, ob alle Dateien angezeigt werden sollen,
* oder ob Suchpattern erfüllt sein müssen.
* Mehrere Pattern per Semikolon trennen - Default: all - Beispiel:
* $filter = ".html;.php" würde alle Dateien berücksichtigen,
* die im Namen ein ".html" oder ein ".php" beeinhalten
*/
function setFilter($filter)
{
// Filter festlegen
switch($filter)
{
case "ALL_FILES":
$this->filter = "ALL_FILES";
break;
default:
$this->
filter =
explode(";",
$filter);
break;
} // ENDE: switch($filter)
} // ENDE: function setFilter($filter)
/**
* (Hilfs)Funktion die festlegt, ob Unterverzeichnisse auch durchsucht werden sollen
*
* @param boolean $search_sub_dir: Parameter der angibt,
* ob Unterverzeichnisse auch durchsucht werden sollen
*/
function setSearchSubDir($search_sub_dir)
{
// Festlegen, ob Unterverzeichnisse auch durchsucht werden sollen
switch($search_sub_dir)
{
case true:
$this->search_sub_dir = true;
break;
case false:
$this->search_sub_dir = false;
break;
default:
$this->search_sub_dir = true;
break;
} // ENDE: switch($search_sub_dir)
} // ENDE: function setSearchSubDir($search_sub_dir)
/**
* (Hilfs)Funktion die festlegt, ob wirklich gelöscht werden soll, oder ein Testmode läuft
*
* @param string $mode: Parameter der angibt, ob wirklich gelöscht werden soll,
* oder ein Testmode läuft
*/
function setMode($mode)
{
// Festlegen, ob gelöscht werden soll
switch($mode)
{
case "DELETE":
$this->mode = "DELETE";
break;
case "TEST":
$this->mode = "TEST";
break;
default:
$this->mode = "DELETE";
break;
} // ENDE: switch($mode)
} // ENDE: function setMode($mode)
/**
* (Hilfs)Funktion die festlegt, ob auch Ordner gelöscht werden sollen
*
* @param boolean $delete_dir: Parameter der angibt, ob auch Ordner gelöscht werden soll
*/
function setDeleteDir($delete_dir)
{
// Festlegen, ob auch Ordner gelöscht werden sollen
switch($delete_dir)
{
case true:
$this->delete_dir = true;
break;
case false:
$this->delete_dir = false;
break;
default:
$this->delete_dir = false;
break;
} // ENDE: switch($delete_dir)
} // ENDE: function setDeleteDir($delete_dir)
/**
* Funktion die den Pfad des übergeordneten Verzeichnisses ermittelt
*/
function getParentDir()
{
// Aktuellen Pfad in ein Array aufsplitten
// Aktuellen Pfad löschen
$this->path = "";
// Übergeordneten Pfad zusammensetzen
for($i =
0;
$i <
count($tmp) -
2;
$i++
)
{
$this->path .= $tmp[$i] . "/";
}
} // ENDE: function getParentDir()
/**
* Funktion die Datein löscht
*
* @param string $file: Angabe des Dateipfades einschl. dem Dateinamen
*/
function deleteFile($file)
{
// Icon dem Ausgabestring hinzufügen
$this->delete_string .= '<img src="text.gif" border="0"> <a style="font-family: Arial; font-size: 10pt;">';
// Mode überprüfen
if($this->mode == "DELETE")
{
// Versuchen die Datei zu löschen
{
$this->deleted_files_counter++;
$this->delete_string .= 'Datei: ' . $file . ' wurde gelöscht';
}
else
{
$this->delete_string .= '<b style="color: #FF0000;">konnte Datei: ' . $file . ' nicht löschen!</b>';
}
}
else
{
// Testmode läuft
$this->delete_string .= 'jetzt würde die Datei: <b>' . $file . '</b> gelöscht werden...';
}
// a-Tag wieder schließen
$this->delete_string .= '</a><br />' . "\n";
} // ENDE: function deleteFile($file)
/**
* Funktion die Ordner löscht
*
* @param string $dir: Pfad des zu löschenden Ordners
*/
function deleteDir($dir)
{
// Icon dem Ausgabestring hinzufügen und a-Tag öffnen
$this->delete_string .= '<img src="dir.gif" border="0"> <a style="font-family: Arial; font-size: 10pt;">';
// Mode überprüfen
if($this->mode == "DELETE")
{
// Versuchen Ordner zu löschen
{
$this->deleted_dir_counter++;
$this->delete_string .= 'Ordner: ' . $dir . ' wurde gelöscht';
}
else
{
$this->delete_string .= '<b style="color: #FF0000;">konnte Ordner: <u>' . $dir . '</u> nicht löschen!</b>';
}
}
else
{
// Testmode läuft
$this->delete_string .= 'jetzt würde der Ordner: <b>' . $dir . '</b> gelöscht werden...';
}
// a-Tag wieder schließen
$this->delete_string .= '</a><br />' . "\n";
} // ENDE: function deleteDir($dir)
} // ENDE: class RecursiveFileDeleteClass
?>