Hallo zusammen,
ich möchte ein Verzeichnis einlesen und dabei Ordner sowie Dateien als Array listen und in einer Textdatei Speichern. Das geschieht bisher über folgendes Script:
PHP-Code:
/**
* Finds path, relative to the given root folder, of all files and directories in the given directory and its sub-directories non recursively.
* Will return an array of the form
* array(
* 'files' => [],
* 'dirs' => [],
* )
* @author sreekumar
* @param string $root
* @result array
*/
function read_all_files($root = '.'){
$files = array('files'=>array(), 'dirs'=>array());
$directories = array();
$last_letter = $root[strlen($root)-1];
$root = ($last_letter == '\\' || $last_letter == '/') ? $root : $root.DIRECTORY_SEPARATOR;
$directories[] = $root;
while (sizeof($directories)) {
$dir = array_pop($directories);
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if ($file == '.' || $file == '..') {
continue;
}
$file = $dir.$file;
if (is_dir($file)) {
$directory_path = $file.DIRECTORY_SEPARATOR;
array_push($directories, $directory_path);
$files['dirs'][] = $directory_path;
} elseif (is_file($file)) {
$files['files'][] = $file;
}
}
closedir($handle);
}
}
return $files;
}
$output = read_all_files('Laberecke_PHPKIT-1.6.6_V3.3-Autosource');
echo "<pre>";
var_dump($output);
echo "</pre>";
Ausgabe:
In Datei speichern:
PHP-Code:
$string_data = serialize($output);
file_put_contents("file.txt", $string_data);
Inhalt Textdatei:
So scheint das wohl zu funktionieren (Es wird aber mehr gelöscht, als sollte):
PHP-Code:
echo "<br /><br />Unserilized:";
$ar=unserialize(file_get_contents("file.txt"));
echo "<pre>";
var_dump($ar);
echo "</pre>";
/*
* php delete function that deals with directories recursively
*/
function delete_files($target) {
if(is_dir($target)){
$files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned
foreach( $files as $file ){
delete_files( $file );
}
rmdir( $target );
} elseif(is_file($target)) {
unlink( $target );
}
}
array_walk_recursive($ar, "delete_files");
var_dump($ar);
Das Problem ist , dass gewisse Ordner mitgelöscht werden, die eben erhalten bleiben müssen und das dringend. Diese Ordner, die erhalten bleiben müssen, stehen in einer extra Datei:
PHP-Code:
return array(
'admin',
'cache',
'captcha',
'data',
'docs',
'includes',
'lang',
'templates',
'admin\images',
'admin\plugins',
'captcha\backgrounds',
'captcha\fonts',
'data\database',
'data\media',
'data\thumbnails',
'data\tmp_media',
'data\tmp_thumbnails',
'data\database\default',
'lang\deutsch',
'lang\english',
'lang\spanish',
'lang\deutsch\email',
'lang\english\email',
'lang\spanish\email',
'templates\default_960px',
'templates\default_960px\icons',
'templates\default_960px\images',
'templates\default_960px\images_english',
'templates\default_960px\images_spanish',
'templates\default_960px\media',
);
Das Bedeutet eigentlich folgendes: (Versuche das mal grafisch darzustellen):
ROT = Darf nicht gelöscht werden
GRÜN = Darf gelöscht werden
Code:
array(2) {
["files"]=>
array(5) {
[0]=>
string(52) "Laberecke_PHPKIT-1.6.6_V3.3-Autosource\Anleitung.txt"
[1]=>
string(54) "Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Config.xml"
[2]=>
string(63) "Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Deinstall_addon.xml"
[3]=>
string(61) "Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Install_addon.xml"
[4]=>
string(68) "Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\bbcode\font.gif"
}
["dirs"]=>
array(3) {
[0]=>
string(48) "Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\"
[1]=>
string(53) "Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\"
[2]=>
string(60) "Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\bbcode\"
}
}
Vorgehensweise:
- Dateien in Array Laden
- Array in Textdatei speichern
- Textdatei einlesen und an array übergeben
- Anhand der oben aufgeführten Datei, überprüfen welche Ordner nicht gelöscht werden dürfen und nur dessen Inhalt
- Dateien und Folder dementsprechend löschen
Versuch:
PHP-Code:
#Lösche alle Verzeichnisse, beginnend mit der tiefsten Struktur
$this->pKAsceDirs = $this->pKCFGAsceData('asce_pkdir');
foreach ($STRTMP as $DelDirs) {
if (is_dir(ROOT_PATH . $DelDirs)) {
if (!in_array($DelDirs, $this->pKAsceDirs)) {
//$FTP_LOG .= $this->SetFtpCMD(array('ftp_rmdir', ROOT_PATH . $DelDirs . "/"));
if(!rmdir(ROOT_PATH . $DelDirs))
{
$FTP_LOG .= $this->infotext(2, "Error Delete $DelDirs folder");
}
else
{
$FTP_LOG .= $this->infotext(1, "Success Delete $DelDirs folder");
}
}
}
}
}
}
return $FTP_LOG;
}
private function pKCFGAsceData($File = '')
{
if (!empty($File)) {
if (file_exists(ROOT_PATH . "includes/" . $File . "php")) {
return require ROOT_PATH . "includes/" . $File . "php";
}
}
}
Scheint nicht zu funktionieren...
Danke im Voraus.