Verzeichnisse kopieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verzeichnisse kopieren

    Schönen guten Tag.

    Kann ich denn mit PHP einen ganzen Ordner samt Unterordner von einem Verzeichnis ins andere kopieren. Wohlgemerkt kopieren - nicht verschieben.

    Wie lautet denn dafür der Befehl, falls das so einfach mit einem Befehl machbar ist?

    Gruß, Andi

  • #2
    Es gitb zwei Lösungsansätze,

    Alles in Arrays einlesen und wonaders zurückspeichern, oder den FTP Befehlssatz benutzen. Den findest du im php buch unter Umagang mit dateien ...

    Kommentar


    • #3
      Da ich das Verzeichnis auf dem selben Server kopieren möchte, wo auch mein PHP-Code liegt, wäre FTP glaube ich unsinnig.

      Wie würde es denn mit Hilfe des Arrays funktionieren?
      Gibt es da ein Beispiel-Script?

      Ich habe einen Order DATA, in dem liegt der Ordner SCRIPTE.
      SCRIPTE enthält meine PHP-Programmierung.
      Dann gibts in DATA auch noch TEMP und ONLINE.
      Ich möchte nun von SCRIPT aus den gesamten Inhalt von TEMP nach ONLINE verschieben, wobei vorher alles aus ONLINE gelöscht werden soll.

      Für einen kleine Programmierschnipsel wäre ich auf ewig Dankbar.

      Gruß & Dank, Andi

      Kommentar


      • #4
        die ftp befehle sind kein unsinn. das sind die selben wie die linuxbefehle, wenn du ein verzeichnis auf dem server in einer konsole kopierst.

        steht im php buch unter

        http://www.php-resource.de/manual.php?p=function.copy

        Kommentar


        • #5
          Ich meine mit Unsinn ja auch nur, dass es womöglich viel schneller geht die Dateien über das Filesystem direkt zu kopieren, als per FTP eine Verbindung herzustellen, die erst den User checkt und dann die Dateien kopiert.

          Danke für die copy-Funktion, die ist mir schon bekannt.
          Mir gehts viel mehr darum, wie ich denn ermittle, welche Ordner und Dateien in meinem obersten Ordner sind und wie weiss mein Code, ob noch weitere Ordner verschachtelt sind, die mitkopiert werden müssen.

          Ein einzelner Befehl nützt mir da wenig, ich bräuchte schon ein bisschen mehr, denn ich weis momentan gar nicht, wie ich das angehen soll.

          Vielleicht hat ja jemand so was schon mal so was gecoded und könnte das hier freundlicherweise posten

          Grüße, Andi

          Kommentar


          • #6
            Habe da was gefunden, das genau das kann was du brauchst. Wnn nicht, dann weiss ich auch nciht genau was du willst:

            Dieses Beispiel kopiert eine Directory mit allen Unterordnern und Files:

            -----


            function rec_copy ($from_path, $to_path) {
            mkdir($to_path, 0777);
            $this_path = getcwd();
            if (is_dir($from_path)) {
            chdir($from_path);
            $handle=opendir('.');
            while (($file = readdir($handle))!==false) {
            if (($file != ".") && ($file != "..")) {
            if (is_dir($file)) {

            rec_copy ($from_path.$file."/", $to_path.$file."/");
            chdir($from_path);
            }
            if (is_file($file)){
            copy($from_path.$file, $to_path.$file);
            }
            }
            }
            closedir($handle);
            }
            }

            Kommentar


            • #7
              Das sieht schon genau danach aus, was ich suche.

              Allerdings funktioniert es nicht richtig

              Ich rufe die Funktion mit rec_copy("temp/","live/"); auf.
              Alles was es mir dan macht, ist den Ordner "live" anzulegen und bringt dann mehrere Fehlermeldungen:
              Unable to open 'temp/text.php4' for reading: No such file or directory
              MkDir failed (No such file or directory)
              ChDir: No such file or directory (errno 2)

              Ich finde aber leider den Fehler nicht.

              Ich hatte ursprünglich bei dem Funktionsaufruf die Slashes weggelassen, aber da hatte er mir "Unable to open 'temptext.php4..." angezeigt. Hat also die Trennug, zwischen Datei und Verzeichnis nicht erkannt.
              Aber jetzt mit dem Slash erkennt das Script trotzdem nichts.

              Wo kann der Fehler sein?

              Grüße, Andi

              Kommentar


              • #8
                Sorry, die funktion geht nur bis zu einem Level ...

                Hier eine erweiterte variante, die mehr kann

                PHP-Code:
                <?
                $date = date ("Ymd");
                $from_path = "c:/program files/easyphp/ccl_www";
                $to_path = "c:/tmp/cp/to/$date/ccl_www";

                ##### No trailing slash #########
                ##### "/" used instead of "\\" #####

                #######################################
                if (!is_dir($to_path))
                {
                echo "Creating destination path\n";
                create_path($to_path);
                }
                #######################################
                if(!is_dir($from_path))
                {
                echo "failed";
                exit;
                }
                else
                {
                rec_copy($from_path, $to_path);
                echo "Files copied from $from_path and backed up to $to_path\n";
                }

                ##############################################
                function rec_copy($from_path, $to_path)
                {
                if (!is_dir($to_path))
                mkdir($to_path, 0777);

                $this_path = getcwd();

                if (is_dir($from_path))
                {
                chdir($from_path);
                $handle = opendir('.');

                while (($file = readdir($handle)) !== false)
                {
                if (($file != ".") && ($file != ".."))
                {
                if (is_dir($file))
                {
                rec_copy ($from_path."\\".$file, $to_path."\\".$file);
                chdir($from_path);
                }
                if (is_file($file))
                {
                copy($from_path."\\".$file, $to_path."\\".$file);
                }
                }
                }
                closedir($handle);
                }
                else
                {
                echo "if (is_dir($from_path))\n";
                }
                }
                ##############################################
                ##############################################
                function create_path($to_path)
                {
                $path_array = explode('/', $to_path); // split the path by directories
                /*
                echo '<pre>'; // show everything in the $path_array variable
                var_dump($path_array);
                echo '</pre>';
                */
                $dir=''; // start with empty directory
                foreach($path_array as $key => $val) {
                // echo "$key => $val\n";
                if (!strpos($val, ':')) { // if it's not a drive letter
                $dir .= '/'. $val;
                if (!is_dir($dir)) {
                // echo "Not a dir: $dir\n";
                if (!mkdir($dir, 0777))
                echo "Failed creating directory: $dir\n";
                else
                echo "Created directory: $dir\n";
                }
                }
                }
                }
                ?>

                Kommentar


                • #9
                  Also irgendwie meint es das Schicksal schlecht mit mir

                  Ich erhalte einen Parse-Error in Zeile 5, habe es jetzt mal alles Zeilenweise nach unten geschoben um zu sehen in welcher Zeile genau. Da kam ich dann auf Zeile 37: rec_copy ($from_path."\".$file, $to_path."".$file);
                  Dort habe ich dann mal den Backslash herum gedreht, dann hats mir keinen Parse error mehr angezeigt, dafür aber wieder die bekannten Fehler, siehe meinen vorherigen Thread.
                  Slebst wenn ich aus dem Backslash ein \\ mache, für den Fall, dass einer als Vorzeichen für z.B. \n interpretiert wir, läufts nicht.

                  Please, wie bekomme ich das Ding zum laufen.

                  Verzweifelte Grüße, Andi

                  Kommentar


                  • #10
                    Hi,

                    das problem ist, das script ist nicht von mir.

                    Ich habe es mir jetzt 30 min angeschaut. Das Script funktioniert nur mit absoluten Pfaden. auf deinem webserver benutzt du aber relative pfade.

                    Ich kann dir leider nicht helfen bei der anpassung. Sorry

                    Kommentar


                    • #11
                      Schade, trotzdem vielen Dank!

                      Gruß, Andi

                      Kommentar


                      • #12
                        ...hmm, ich würde es ja mit exec() probieren,
                        bei unix-systemen z.B
                        PHP-Code:
                        exec("cp -r $quelle $ziel"); 
                        eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

                        Kommentar


                        • #13
                          HURRA, das ist es!

                          Gibt es so einen Befehl auch für nicht UNIX-Systeme, z.B. NT-Server?
                          Aber wichtig, dass es erst mal bei mir läuft.

                          Dank & Gruß,
                          Andi

                          Kommentar


                          • #14
                            Verzeichnis kopieren

                            hab das mit exec ausprobiert. Kommt zwar keine Fehlermeldung aber gehen tuts auch nicht...

                            <?PHP
                            $quelle="localhost/digishop/flash";
                            $ziel="localhost/flash";
                            exec("cp -r $quelle $ziel");
                            ?>

                            kanns mir mal einer erklären?

                            Suche auch eine Lösung um Dateien auf dem Server in einen Temp. Ordner zu kopieren, den dann zu zippen und zum download bereitzustellen...

                            Hat jemand ne Lösung?

                            In den Standart ftp- bzw. Verzeichnisfunktionen find ich nix.

                            Danke aus dem grauen Wü

                            Alex
                            na lecker...
                            alex

                            Kommentar


                            • #15
                              das zuerst gepostete Script arbeitet einwandfrei, man muß die function nur richtig aufrufen!
                              PHP-Code:
                              function rec_copy ($from_path$to_path){
                                  
                              mkdir($to_path0777);
                                  
                              $this_path getcwd();
                                  if (
                              is_dir($from_path)){
                                      
                              chdir($from_path);
                                      
                              $handle opendir('.');
                                      while ((
                              $file readdir($handle)) !== false){
                                          if ((
                              $file != ".") && ($file != "..")){
                                              if (
                              is_dir($file)){
                                                  
                              rec_copy ($from_path $file "/"$to_path $file "/");
                                                  
                              chdir($from_path);
                                              }
                                              if (
                              is_file($file)){
                                                  
                              copy($from_path $file$to_path $file);
                                              }
                                          }
                                      }
                                      
                              closedir($handle);
                                  }
                              }

                              rec_copy(dirname(__FILE__).'/../template/standard/',dirname(__FILE__).'/../template/new/'); 
                              kopiert Unterverzeichnisse mit...
                              einziger Fehler, wenn ein Verzeichniss/Datei schon existiert, kommt ne Fehlermeldung. Aber das sollte man per @ abschalten können
                              TBT

                              Die zwei wichtigsten Regeln für eine berufliche Karriere:
                              1. Verrate niemals alles was du weißt!


                              PHP 2 AllPatrizier II Browsergame

                              Kommentar

                              Lädt...
                              X