Uranjitsu
04.08.2018, 10:09
Hat sich erledigt, mal wieder lag es nur an einem Satzzeichen, was nicht gesetzt wurde.
Daher ist die Anfrage bzgl array, textdatei etc. völlig überflüssig und ich kann anhand der Datei die Pfade bestimmen.
Aus
private function pKCFGAsceData($File = '')
{
if (!empty($File)) {
if (file_exists(ROOT_PATH . "includes/" . $File . "php")) {
return require ROOT_PATH . "includes/" . $File . "php";
}
}
}
wurde
private function pKCFGAsceData($File = '')
{
if (!empty($File)) {
if (file_exists(ROOT_PATH . "includes/" . $File . ".php")) {
return require ROOT_PATH . "includes/" . $File . ".php";
}
}
}
LG
Ursprüngliche Anfrage:
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:
/**
* 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:
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\"
}
}
In Datei speichern:
$string_data = serialize($output);
file_put_contents("file.txt", $string_data);
Inhalt Textdatei:
a:2:{s:5:"files";a:5:{i:0;s:52:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\Anleitung.txt";i:1;s:54:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Config.xml";i:2;s:63:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Deinstall_addon.xml";i:3;s:61:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Install_addon.xml";i:4;s:68:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\bbcode\font.gif";}s:4:"dirs";a:3:{i:0;s:48:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\";i:1;s:53:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\";i:2;s:60:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\bbcode\";}}
So scheint das wohl zu funktionieren (Es wird aber mehr gelöscht, als sollte):
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:
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
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:
#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.
Daher ist die Anfrage bzgl array, textdatei etc. völlig überflüssig und ich kann anhand der Datei die Pfade bestimmen.
Aus
private function pKCFGAsceData($File = '')
{
if (!empty($File)) {
if (file_exists(ROOT_PATH . "includes/" . $File . "php")) {
return require ROOT_PATH . "includes/" . $File . "php";
}
}
}
wurde
private function pKCFGAsceData($File = '')
{
if (!empty($File)) {
if (file_exists(ROOT_PATH . "includes/" . $File . ".php")) {
return require ROOT_PATH . "includes/" . $File . ".php";
}
}
}
LG
Ursprüngliche Anfrage:
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:
/**
* 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:
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\"
}
}
In Datei speichern:
$string_data = serialize($output);
file_put_contents("file.txt", $string_data);
Inhalt Textdatei:
a:2:{s:5:"files";a:5:{i:0;s:52:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\Anleitung.txt";i:1;s:54:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Config.xml";i:2;s:63:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Deinstall_addon.xml";i:3;s:61:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\ASCE_Install_addon.xml";i:4;s:68:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\bbcode\font.gif";}s:4:"dirs";a:3:{i:0;s:48:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\";i:1;s:53:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\";i:2;s:60:"Laberecke_PHPKIT-1.6.6_V3.3-Autosource\includes\test\bbcode\";}}
So scheint das wohl zu funktionieren (Es wird aber mehr gelöscht, als sollte):
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:
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
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:
#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.