Andre: Ordner kopieren und eins hochzählen PHP

Hallo,

ich suche eine Möglichkeit, einen Ordner mit einem Inhalt auf einem Server eine bestimmte Anzahl "zu klonen". Blöd formuliert, als Beispiel:

Ich habe einen Ordner "3515" mit einem beliebigem Inhalt im Pfad /webseiten/temp/wp/uploads Nun möchte ich diesen Ordner genau 200 mal kopieren, aber so, dass der Ordnername immer 1 ansteigt, also quasi 3516, 3517, 3518 usw. Der Inhalt sollte mitkopiert werden. Alternativ ginge auch zu sagen: Kopiere den Ordner bis zur Zahl 3819.

Ist das irgendwie möglich? Danke für Hilfe und viele Grüße

  1. Moin!

    Ich habe einen Ordner "3515" mit einem beliebigem Inhalt im Pfad /webseiten/temp/wp/uploads Nun möchte ich diesen Ordner genau 200 mal kopieren, aber so, dass der Ordnername immer 1 ansteigt

    Ist das irgendwie möglich?

    Technisch ist das gar kein Problem.

    Aber:

    Es ist ein "eher ungewöhnlicher" Wunsch. Und weil es technisch derart einfach ist glaube ich, dass wir Dir eine sehr viel bessere Lösung anbieten können, wenn wir das eigentliche Problem kennen würden, welches Du durch die Vielzahl der Kopien lösen willst.

    Also: Wofür brauchst Du das?

    Jörg Reinholz

    1. Also: Wofür brauchst Du das? Jörg Reinholz

      Moin Jörg :)

      Ich habe ein Wordpress Plugin , dass verschiedene Maps Locations in einer Karte darstellt (Stores). Ich kann für jeden Store einen eigenen Marker-Icon vergeben, z.b. einen für Sport, einen für öff. Einrichtungen usw. Jeder Store hat eine eigene ID (z.b. 3515). Leider speichert das Plugin den Pfad zum Bild und das Bild nicht in der Datenbank, so dass man immer wieder darauf verweisen kann. Das Plugin geht so vor, dass es einen Ordner 3515 anlegt, und darin das Icon ablegt. Das macht er für jeden Store, und leider nicht für jede Kategorie. Ich muss aber insg. 30000 Stores in die DB importieren, also lege ich sie nicht manuell an. Daher mein Problem :/

      Wie wäre denn die "einfache" Lösung?

      Danke und Grüße André

      1. Moin!

        Wie wäre denn die "einfache" Lösung?

        Aus Gründen der Einfachheit habe ich kurzerhand einen Shell-Befehl verwendet, das läuft nur unter Linux und Unixoiden.

        Ich habe nicht alle möglichen Fehler abgefangen und das Skript ist auch nicht schön. Es dürften sich viele Kritikpunkte finden. Es ist "schnell und schmutzig", funktioniert aber wenn die Voraussetzungen stimmen.

        Soll das Skript was ausgeben, dann schreib was rein.

        <?php
        ## Konfiguration
        
        # Welches Verzeichnis soll kopiert werden?
        define('ModelDir', '/tmp/0' ); # Ändern
        
        # Verzeichnis mit den zu kopierenden Verzeichnissen:
        define ('BaseDir', '/tmp/test2'); # Ändern
        
        # Anzahl neuer Ordner
        define ('AnZahl', '10'); # Ändern
        
        ## Programm
        
        # suchen des Ordners mit der gößten Nummer
        if (! is_dir(BaseDir) ) { die ( BaseDir . "ist kein Verzeichnis!\n" ); }
        $d = dir( BaseDir );
        $groessteNummer=0;
        while (false !== ($entry = $d->read())) {
           # Nur Einträge deren Namen nur aus Ziffern bestehen:
           if ( preg_match('/^[0-9]+$/', $entry) ) {
              $entry=intval($entry);
              if ( $entry > $groessteNummer ) { $groessteNummer = $entry; }
           }
           $start = $groessteNummer + 1;
           $ende  = $start + AnZahl;
        }
        $d->close();
        for ($i=$start; $i<=$ende; $i++) {
           $newDir= BaseDir .'/'. $i;
           mkdir ($newDir);
           $sys='cp -r ' . ModelDir . "/* $newDir/";
           #echo "$sys\n";
           $dummy=`$sys`;
        }
        

        Jörg Reinholz

        P.S. Ich entseuche gerne, schnell und zuverlässig Wordpress-Installationen. Speichern Sie meine Adresse und halten Sie den Nutzername und das Kennwort für ssh bereit.

        1. HiJörg,

          vielen Dank dafür. Was mir nicht ganz klar ist: Wieso suchst du den ordner mit der größten Nummer? Ich würde gerne eine Nummer vorgeben, die einfach kopiert werden soll... Oder verstehe ich da was falsch? Vielen lieben Dank

          1. Moin!

            Wieso suchst du den ordner mit der größten Nummer? Ich würde gerne eine Nummer vorgeben, die einfach kopiert werden soll...

            Ganz einfach. Du hast diese Vorgabe nicht gemacht und ich habe also die wahrscheinlichste (sinnvollste) Aufgabe angenommen.

            Außerdem wäre das dann ein ganz unspektakulärer "Einzeiler" für die Shell (bash) geworden:

            for i in {10..20}; do cp -r /tmp/0 /tmp/test2/$i; done;
            

            den man in php einpacken kann:

            <?php
            $start=10;
            $ende=20;
            for ($i=$start; $i<=$ende; $i++) {
                $sys='cp -r /tmp/0 /tmp/test2/' . $i;
                echo $sys, "\n";
                $dummy=`$sys`;
            }
            echo "fertig\n";
            

            Genau genommen habe ich nicht gewusst, wo denn das Problem bei der eigentlich sehr einfachen Sache sein soll.

            Jörg Reinholz