neue Verzeichnis-Struktur erstellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ablegen
anlegen
array
code
datei
dateiname
datum
einzelne ordner
entfernen
erstellen
inhalt
jemand
jeweilige datei
jeweilige ordner
leere verzeichnisse
ordner
pfad
problem
struktur
verzeichnis
-
Hallo
ich habe ein Script, welches mir eine Verzeichnis-Struktur erstellen soll.
und mein Problem sind dabei leere Verzeichnisse
Daten-Struktur ist so, dass ich ein 2D Array habe mit i 2ter Ebene keys: filename und content
filename gibt den Pfad und Dateiname an, in content ist der jeweilige Datei-Inhalt
es geht mir jetzt um die Werte in filename (Ordnerstruktur und Dateiname)
Daten-BSP: (ohne content)
array ( [0] => array ( [filename] = > /datei.php [content] => .... ) [1] => array ( [filename] = > /ordner1/datei.php [content] => .... ) [2] => array ( [filename] = > /ordner2/ordner3/datei.php [content] => .... ) [3] => array ( [filename] = > /ordner2/ordner3/ordner4/datei.php [content] => .... ) ... usw. )
wie kann ich jetzt die jeweilige Ordner-Struktur anlegen
um dann die Datei in den "richtigen" Ordner zu schreiben ?
bisher mache ich es so
$zielpfad = "neu/"; // ---- alles ablegen im Ordner $zielpfad --- foreach($data as $item) { // ---- Ordner finden ---- $datei = strrchr($item['filename'], "/"); $dpfad = str_replace($datei, "", $item['filename']); // ---- führende Slashes entfernen ---- $datei = trim($datei, "/"); $dpfad = trim($dpfad, "/"); // ---- End-Slashes an Pfad ---- if (!empty($dpfad)) { $dpfad = $dpfad."/"; } // ---- Neuen Pfad anlegen ---- if (!empty($dpfad) && !is_dir($zielpfad.$dpfad)) { mkdir($zielpfad.$dpfad, 0755); echo "<br />Neues Verzeichnis: <strong>".$dpfad."</strong>\r\n"; } // ---- Neue Datei in Pfad anlegen ---- $handle = fopen($zielpfad.$dpfad.$datei,"w", 0755); fwrite($handle,$item['content']); echo "<br />Neue Datei: <strong>".$datei."</strong>\r\n"; fclose($handle); }
das funktioniert aber nicht mit Ordnern ohne Datei,
also nicht wenn ein Ordner "nur" Ordner enthält !?!
also ich kann mit mkdir() nicht direkt ordner2/ordner3/ anlegen
sondern ich denke ich muss erst ordner2/ und dann ordner3/ anlegen
ok, wohl einzelne Ordner zählen und nacheinander anlegen
... aber wie am besten ?
Beitrag zuletzt geändert: 6.10.2011 11:02:10 von spiele2u -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Mach's mit explode.
pseudocode
if ($dateiArray[filename] enthält "/") { $ordnerPosition=""; $ordnerArray = explode("/",$dateiArray[filename]) for(var i=0;i<count($ordnerArray)-1;i++) { //Ordner $ordnerArray[i] in $zielpfad.$ordnerPosition anlegen $ordnerPosition.=$ordnerPosition."/"; //position merken } //letzter wert im Array ist der Dateiname (deswegen i<count($ordnerArray)-1 in der for-schleife) $Dateiname=ordnerArray[count($ordnerArray)-1] }else { $Dateiname=$dateiArray[filename]; } //Datei $Dateiname in $zielpfad.$ordnerPosition anlegen
Beitrag zuletzt geändert: 6.10.2011 9:34:33 von simuliertes -
simuliertes schrieb:
Mach's mit explode.
jo, Danke, jetzt hab ich es (glaub ich) ganz gut gelöst
// ------------------------------------- foreach($data as $filedata) { echo "<br /><u>".$filedata['filename']."</u>\r\n"; $datei = strrchr($filedata['filename'], "/"); $dpfad = str_replace($datei, "", $filedata['filename']); $datei = trim($datei, "/"); $dpfad = trim($dpfad, "/"); if (empty($datei)) { $datei = $dpfad; $dpfad = ''; } if ( strpos($dpfad, "/") ) { $subpfad = explode("/",$dpfad); $sanz = count($subpfad); $gopfad = array(); for ($i=0; $i<$sanz; $i++) { if ($i == 0) { $tmppfad = $subpfad[$i]; // ---- erste Ebene ---- $gopfad[$i] = $tmppfad; } else { $tmppfad = $tmppfad.'/'.$subpfad[$i]; $gopfad[$i] = $tmppfad; } if (!is_dir($zielpfad.$gopfad[$i])) { mkdir($zielpfad.$gopfad[$i], 0755); echo "<br />Neues Verzeichnis: <strong>".$gopfad[$i]."</strong>\r\n"; } } } else { if (!is_dir($zielpfad.$dpfad)) { mkdir($zielpfad.$dpfad, 0755); echo "<br />Neues Verzeichnis: <strong>".$dpfad."</strong>\r\n"; } } if (!empty($datei)) { if (!file_exists($zielpfad.$dpfad.'/'.$datei)) { $handle = fopen($zielpfad.$dpfad.'/'.$datei,"w", 0755); fwrite($handle,$filedata['content']); echo "<br />Neue Datei: ".$dpfad."/<strong>".$datei."</strong>\r\n"; fclose($handle); } } echo "<br /> \r\n"; echo "<hr />\r\n"; } // -------------------------------------
vielleicht kann das ja noch jemand anderes gebrauchen
ist z.B. ganz nützlich um Zip file Content zu schreiben
:)
Beitrag zuletzt geändert: 6.10.2011 11:03:47 von spiele2u -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage