Verzeichnisse erstellen mit PHP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Verzeichnisse erstellen mit PHP

    Hi zusammen!
    Hab ein kleines Problem mit dem Erstellen von Verzeichnissen, vielleicht kann mir da jmd helfen^^

    Damit versuche ich die Ordner inklusive Unterordner zu erstellen, was auch beim ersten mal ohne Probleme funktioniert, nur wenn man nochmal den gleichen Ordner auswählt kommt ne Fehlermeldung...

    Quellcode

    1. $erster='0';
    2. for ($ia=$AnzahlDerUnterordner-1,$za=0;$ia>=$za;$ia--){
    3. //Name zur Zugehörigen Kategorien Id
    4. $name2 = tep_db_query("select categories_name from " . " categories_description" . " where categories_id = '".$Reihenfolge[$ia]."'");
    5. list($cat_name) = mysql_fetch_row($name2);
    6. if ($erster== '0') {
    7. // Pfad festlegen:
    8. $path = "./Katalog/".$cat_name."/";
    9. }
    10. elseif ($erster!=="0") {
    11. $path=$path."/".$cat_name;
    12. }
    13. if(!dirname($path)!= $path)
    14. {
    15. $pfadangelegt = mkdir($path);
    16. }
    17. }
    18. //}
    19. $erster++;
    20. }
    Alles anzeigen

    Das Problem ist, dass wenn man 2 mal den gleichen Ordner angibt folgender Fehler kommt:
    Warning: mkdir(./Katalog/test/): File exists ...
    Obwohl ich dachtemit

    Quellcode

    1. if(!dirname($path)!= $path)
    2. {
    wird das ausgeschlossen.
    Ausserdem kann man die Ordner komischerweise nicht mehr löschen, auch wenn ich ihnen 777 gebe.
    Bin grad etwas ratlos...

    MfG
  • Mit dem löschen komischerweise direkt, wenn ich versuch die Ordner im ftp-Programm zu löschen! Kommt die Meldung "Permission denied" obwohl wie gesagt chmod auf 777 steht... Sehr komisch!
    Das mit dem file_exists probier ich mal aus, allerdings erstellt er jetzt überhaupt keine Verzeichnisse mehr. Muss da irgendwo einen Fehler im $Path o.ä. haben.
    Weil sobald ich einen neuen Pfad angeb kommt die Meldung
    "Warning: mkdir(): open_basedir restriction in effect. File(/Test/test2/07.03.2007) is not within the allowed path(s):"

    Komischerweise hat er gestern ohne Probleme die Ordner erstellt, die sind ja auch noch da(man kann sie ja nicht löschen^^)

    wenn ich den Ordner im tmp-Ornder anlegt ist er zwar in den erlaubeten Pfaden, allerdings kommt die Meldung

    "Warning: mkdir(/tmp/Test/test2/07.03.2007): No such file or directory "

    Naja ist schon klar, dass es dieses Verzeichniss nicht gibt, ich wills ja erstellen :lol:

    So wird mein Pfad erstellt:
    ist in einer Schleife, die beim ersten mal /Katalog/Test und dann im weiteren verlauf die Unterordner anhängt

    Quellcode

    1. while...
    2. {
    3. if ($erster== '0') {
    4. // Pfad festlegen:
    5. $path = "/Katalog2/".$cat."";
    6. }
    7. elseif ($erster!=="0") {
    8. $path=$path."/".$cat;
    9. }
    10. erster++;
    11. }
    12. //Dann wird ncoh ein Datum angehängt
    13. $date = date("d.m.y");
    14. $path=$path."/".$date."";
    15. if(!file_exists($path))
    16. {
    17. mkdir($path);
    18. }
    Alles anzeigen


    Aber irgendwie läuft das nicht...
    Hab eigentlich alles versucht mit verschieden / \ \\ varianten oder ./Katalog/
    aber Blick da echt nicht mehr durch...
  • Hmm, du hast schon eine komische Art zu programmieren...aber egal:

    Folgendes:
    if(!dirname($path)!= $path)

    Warst du gut in Mathe? (-) * (-) = (+)
    Wenn du etwas verneintes ungleich zu etwas stellst, dann kannst du es auch direkt gleichsetzen...Versuch es mal so, vieleicht kommst du somit deinem Ziel etwas näher

    Quellcode

    1. if(dirname($path) != $path) {
    2. $pfadangelegt = mkdir($path);
    3. echo "Verzeichnis angelegt: $path";
    4. } else {
    5. echo "Verzeichnis $path existiert bereits";
    6. }
  • Hm bei mir funktioniert das nicht weil:

    Quellcode

    1. $path2 = "./Archiv/test/";
    2. mx(dirname($path2)); // Messagebox gibt aus /Archiv
    3. mx($path2); //Messagebox gibt aus /Archiv/test
    4. if(dirname($path2) != $path2) { //Deshalb ist das immer unterschiedlich auch wenn man den gleichen Pfad hat!
    5. $pfadangelegt = mkdir($path2);
    6. echo "Verzeichnis angelegt: $path2";
    7. } else {
    8. echo "Verzeichnis $path2 existiert bereits";
    9. }

    irgendwie müsste das dirname($path2) auch tiefere Ebenden erkennen können glaub ich
  • ok habs glaub ich:

    Quellcode

    1. $path2 = "./Archiv/test/bla2";
    2. $bla = file_exists($path2);
    3. mx(dirname($path2));
    4. mx($bla);
    5. if($bla != '1') {
    6. $pfadangelegt = mkdir($path2);
    7. echo "Verzeichnis angelegt: $path2";
    8. } else {
    9. echo "Verzeichnis $path2 existiert bereits";
    10. }
    Alles anzeigen

    file_exists gibt 1 aus wenn der Pfad existiert und nichts wenn er nicht vorhanden ist

    Allerdings kann ich die erstellten Ordner immer noch nicht löschen trotz 777 kommt die Meldung "Permission denied".
    Werds mal versuchen sie mit Php zu löschen, mit ftp Programmen gehts auf jeden Fall nicht :?
  • Mir ist aufgfallen dass mit mkdir() man irgendwie nur 2 Unterverzeichnisse machen kann.
    wenn

    Quellcode

    1. $path = "./Archiv/test/";
    ist funktionierts einwandfrei
    wenn

    Quellcode

    1. $path = "./Archiv/test/bla/";
    ist dann kommt die Fehlermeldung Permission denied

    Quellcode

    1. mkdir($path,"0777");

    hat da jmd schonmal Erfahrungen mit gemacht oder ist das ein spezieller Fall bei mir?

    Habs grad nochmal seperat getestet und tatsächlich gehts ab dem 2ten Unterordner nicht mehr bei mir :? :?
  • Dann führst du die Aktion so oft aus, wie du Unterordner benötigst. Meines Wissens gibt es keine Funktion in PHP, die solche Pfade für dich erledigt bzw. über einen Aufruf mehrere Ordner erstellt.
    Und solange du weist, wie viele Ordner du brauchst, kannst du das auch ohne weiteres mit zum Beispiel einer for-Schleife erledigen.

    // Edit: Du kannst auch den Pfad analysieren und je nach dem Ordner erstellen. Kleiner Tipp: http://www.php.net/manual/de/function.explode.php
  • Hm ja habs schon auch in ne for-Schleife gebaut, allerdings tritt da der gleiche Effekt auf mit Permission denied bei mehr als 3 Orndern...

    Quellcode

    1. $erster='0'; //festlegen für ersten Durchgang
    2. for ($ia=$m-1,$za=0;$ia>=$za;$ia--){ //$m-1 ist die Anzahl der Ornder
    3. //Raussuchen des Ordnernamens
    4. $name2 = tep_db_query("select categories_name from " . " categories_description" . " where categories_id = '".$Reihenfolge[$ia]."'");
    5. list($cat) = mysql_fetch_row($name2);
    6. //erster Durchgang
    7. if ($erster== '0') {
    8. // Archiv Pfad festlegen:
    9. $path = "./Archiv/".$cat."";
    10. $bla = file_exists($path); //Prüfung
    11. if($bla != '1') {
    12. mkdir($path,"0777"); //Erstellen
    13. } else {
    14. }
    15. }
    16. elseif ($erster!=='0') { //Anfangspfad bereits festgelegt 2. durchgang
    17. $path=$path_old."/".$cat; // neuen Pfad erstellen ()
    18. $bla = file_exists($path); //Prüfung
    19. if($bla != '1') {
    20. mkdir($path,"0777"); //Erstellen
    21. } else {
    22. }
    23. }
    24. $path_old = $path; //alten Pfad speichern
    25. $erster++;
    26. }
    Alles anzeigen

    Der erste Ornder geht noch, aber danach ist $path halt auch wieder zu lang!
  • Quellcode

    1. // Archiv Pfad festlegen:
    2. $path = "./Archiv/".$cat."";
    3. $bla = file_exists($path); //Prüfung
    4. if($bla != '1') {
    5. mkdir($path,"0777"); //Erstellen
    6. } else {
    7. }


    Entweder du hast hier einen Denkfehler oder ich steig da nciht ganz durch.

    Hier die Version, wie ich sie für richtig halte:

    Quellcode

    1. // Archiv Pfad festlegen:
    2. $path = "./Archiv/".$cat."/";
    3. $bla = file_exists($path); //Prüfung
    4. if($bla == true) {
    5. mkdir($path,"0777"); //Erstellen
    6. }