kostenloser Webspace werbefrei: lima-city


Script zum Einbauen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    t****k

    Hey,


    Wer kann mir diesen Script einbauen:

    <?php
    	function dircopy ($dir, $dest)
    	{
    		$handle = opendir($dir);
    		while ($file = readdir($handle))
    		{
    			if (!copy($dir.$file, $dest.$file))
    				return false;
    		}
    		return true;
    	}
    	//Beispiel:
    	dircopy('ein_verzeichnis/', 'ein_anderes_verzeichnis/'); // / am Ende ist wichtig!
    ?>


    ----------------------------------------------------------------------------------------------------------

    Hier müsste der Script eingebaut werden, und das alte Copy & Paste entfernt werden:
    // kopiert die daten
    foreach ( $ls as $f ) {copy ("$source/$f", "$target/$f");}
    } else {


    <?php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    error_reporting(E_ALL);
    
    // Abfragen des Usernamen
    echo "<form method=\"POST\">
    Gib deinen Namen ein: <input type=\"text\" name=\"user\" value=\"\" title=\"Namen eingeben\" />
    <input type=\"submit\" name=\"create_folder\" value=\"Ordner erstellen\" />
    </form>";
    
    // Ist Button "Ordner erstellen" gedrückt
    if ( isset ($_POST['create_folder']) ) {
      // Die eingabe ist leider leer.
      if ( empty ($_POST['user']) or strlen (trim ($_POST['user'])) == 0 ) {
        echo "Die eingabe ist leider leer.";
      } else {
        // Erstelle Ordner mit Benutzernamen
        $user = $_POST['user'];
        if ( preg_match ('/\./', $user) || preg_match ('/\//', $user) ) { // Schutzmechanismus - Könnte man noch verbessern
          echo "Benutzername ung&uuml;ltig!";
        } else {
    
          // listet den quellordner in $ls[]
          $ls     = null;
          $source = "./Galleryplayer/";
          foreach ( glob ("$source*") as $f ) {$ls[] = basename ($f);}
          # exit ("<pre>".print_r ($ls, true));
    
          // erstellt ordner WENN NOETIG
          if ( !is_dir ($target = "./User/$user/") ) {
            mkdir ($target, 0755);
            echo "Ordner: <strong>$user</strong> wurde erfolgreich erstellt!";
    
            // kopiert die daten
            foreach ( $ls as $f ) {copy ("$source/$f", "$target/$f");}
          } else {
            echo "Ordner: <strong>$user</strong> existiert bereits!";
          }
        }
      }
    }
    
    ?>


    Beitrag zuletzt geändert: 12.4.2010 20:04:55 von tobitk
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Naja, dann werd ich dir wohl doch mal helfen!
    Du musst einfach in dieser foreach()-Schleife prüfen, ob die Datei ein Ordner ist oder nicht (mit is_dir()).
    Wenn sie ein Ordner ist, wendest du meine Funktion dircopy() an (Beispiel hab ich ja mit hin geschrieben), wenn nicht, dann verwendest du das normale copy().
    Jetzt solltest du es aber hinbekommen, wenn du wenigstens PHP-Anfängerwissen hast und if kennst.

    LG cookies
  4. Autor dieses Themas

    t****k

    Jaein sorry habe keinen Plan kannst du mir hier bitte das machen, werde mich jetzt nun auch hinsetzen und selber maldaran lernen.

    Gruß Tobi
  5. Sieh und lerne:
    foreach ($ls as $f)
    {
    	if (is_dir($f))
    		dircopy($source.'/'.$f.'/', $target.'/'.$f.'/');
    	else
    		copy($source.'/'.$f, $target.'/'.$f);
    }


    LG cookies
  6. Autor dieses Themas

    t****k

    So, vielen Dank ist er so ok=) ?

    //EDIT: Script weißt einen kleinen Fehler auf:
    Ordner: Tobii wurde erfolgreich erstellt!
    Warning: copy() [function.copy]: The first argument to copy() function cannot be a directory in /home/webpages/lima-city/tobitk/html/Gallery/useranmelde.php on line 43

    <?php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    error_reporting(E_ALL);
    
    // Abfragen des Usernamen
    echo "<form method=\"POST\">
    Gib deinen Namen ein: <input type=\"text\" name=\"user\" value=\"\" title=\"Namen eingeben\" />
    <input type=\"submit\" name=\"create_folder\" value=\"Ordner erstellen\" />
    </form>";
    
    // Ist Button "Ordner erstellen" gedrückt
    if ( isset ($_POST['create_folder']) ) {
      // Die eingabe ist leider leer.
      if ( empty ($_POST['user']) or strlen (trim ($_POST['user'])) == 0 ) {
        echo "Die eingabe ist leider leer.";
      } else {
        // Erstelle Ordner mit Benutzernamen
        $user = $_POST['user'];
        if ( preg_match ('/\./', $user) || preg_match ('/\//', $user) ) { // Schutzmechanismus - Könnte man noch verbessern
          echo "Benutzername ung&uuml;ltig!";
        } else {
    
          // listet den quellordner in $ls[]
          $ls     = null;
          $source = "./Galleryplayer/";
          foreach ( glob ("$source*") as $f ) {$ls[] = basename ($f);}
          # exit ("<pre>".print_r ($ls, true));
    
          // erstellt ordner WENN NOETIG
          if ( !is_dir ($target = "./User/$user/") ) {
            mkdir ($target, 0755);
            echo "Ordner: <strong>$user</strong> wurde erfolgreich erstellt!";
          } else {
            echo "Ordner: <strong>$user</strong> existiert bereits!";
          }
        foreach ($ls as $f)
        {
    	if (is_dir($f))
    		dircopy($source.'/'.$f.'/', $target.'/'.$f.'/');
    	else
    		copy($source.'/'.$f, $target.'/'.$f);
        }
    	}
    	
      }
    }
    
    ?>


    Beitrag zuletzt geändert: 13.4.2010 20:02:25 von tobitk
  7. Wenn die zu kopierenden Ordner auch noch Ordner enthalten, muss die Funktion umgebaut werden:
    <?php
    	function dircopy ($dir, $dest)
    	{
    		$handle = opendir($dir);
    		while ($file = readdir($handle))
    		{
    			if (is_dir($dir.$file))
    			{
    				if (!dircopy($dir.$file.'/', $dest.$file.'/'))
    					return false;
    			}
    			else
    			{
    				if (!copy($dir.$file, $dest.$file))
    					return false;
    			};
    			
    		}
    		return true;
    	}
    	//Beispiel:
    	dircopy('ein_verzeichnis/', 'ein_anderes_verzeichnis/'); // / am Ende ist wichtig!
    ?>


    LG cookies
  8. Autor dieses Themas

    t****k

    Sieht nun so aus =) nimmt die Daten aber nicht mit Ordner legt es an.

    <?php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    // http://lokalbook.onpw.de/Gallery/useranmelde.php
    error_reporting(E_ALL);
    
    // Abfragen des Usernamen
    echo "<form method=\"POST\">
    Gib deinen Namen ein: <input type=\"text\" name=\"user\" value=\"\" title=\"Namen eingeben\" />
    <input type=\"submit\" name=\"create_folder\" value=\"Ordner erstellen\" />
    </form>";
    
    // Ist Button "Ordner erstellen" gedrückt
    if ( isset ($_POST['create_folder']) ) {
      // Die eingabe ist leider leer.
      if ( empty ($_POST['user']) or strlen (trim ($_POST['user'])) == 0 ) {
        echo "Die eingabe ist leider leer.";
      } else {
        // Erstelle Ordner mit Benutzernamen
        $user = $_POST['user'];
        if ( preg_match ('/\./', $user) || preg_match ('/\//', $user) ) { // Schutzmechanismus - Könnte man noch verbessern
          echo "Benutzername ung&uuml;ltig!";
        } else {
    
          // listet den quellordner in $ls[]
          $ls     = null;
          $source = "./Galleryplayer/";
          foreach ( glob ("$source*") as $f ) {$ls[] = basename ($f);}
          # exit ("<pre>".print_r ($ls, true));
    
          // erstellt ordner WENN NOETIG
          if ( !is_dir ($target = "./User/$user/") ) {
            mkdir ($target, 0755);
            echo "Ordner: <strong>$user</strong> wurde erfolgreich erstellt!";
          } else {
            echo "Ordner: <strong>$user</strong> existiert bereits!";
          }
    	function dircopy ($dir, $dest)
    	{
    		$handle = opendir($dir);
    		while ($file = readdir($handle))
    		{
    			if (is_dir($dir.$file))
    			{
    				if (!dircopy($dir.$file.'/', $dest.$file.'/'))
    					return false;
    			}
    			else
    			{
    				if (!copy($dir.$file, $dest.$file))
    					return false;
    			};
    			
    		}
    		return true;
    	}
        }
    	}
    	
      }
    
    ?>
  9. Hä? Wo ist jetzt das zweite foreach()???
    Ohne das kanns ja nich funktionieren!
  10. Autor dieses Themas

    t****k

    Wie welches meinst du das Beispiel, das braucht man doch nicht oder, aber ich kann mich täuschen^^?


    Gruß Tobi
  11. Das ist eine Funktion. Und die macht nichts, wenn man sie nicht aufruft!
    <?php
    	function dircopy ($dir, $dest)
    	{
    		$handle = opendir($dir);
    		while ($file = readdir($handle))
    		{
    			if (is_dir($dir.$file))
    			{
    				if (!dircopy($dir.$file.'/', $dest.$file.'/'))
    					return false;
    			}
    			else
    			{
    				if (!copy($dir.$file, $dest.$file))
    					return false;
    			};
    			
    		}
    		return true;
    	}
    
    error_reporting(E_ALL);
    
    // Abfragen des Usernamen
    echo "<form method=\"POST\">
    Gib deinen Namen ein: <input type=\"text\" name=\"user\" value=\"\" title=\"Namen eingeben\" />
    <input type=\"submit\" name=\"create_folder\" value=\"Ordner erstellen\" />
    </form>";
    
    // Ist Button "Ordner erstellen" gedrückt
    if ( isset ($_POST['create_folder']) ) {
      // Die eingabe ist leider leer.
      if ( empty ($_POST['user']) or strlen (trim ($_POST['user'])) == 0 ) {
        echo "Die eingabe ist leider leer.";
      } else {
        // Erstelle Ordner mit Benutzernamen
        $user = $_POST['user'];
        if ( preg_match ('/\./', $user) || preg_match ('/\//', $user) ) { // Schutzmechanismus - Könnte man noch verbessern
          echo "Benutzername ung&uuml;ltig!";
        } else {
    
          // listet den quellordner in $ls[]
          $ls     = null;
          $source = "./Galleryplayer/";
          foreach ( glob ("$source*") as $f ) {$ls[] = basename ($f);}
          # exit ("<pre>".print_r ($ls, true));
    
          // erstellt ordner WENN NOETIG
          if ( !is_dir ($target = "./User/$user/") ) {
            mkdir ($target, 0755);
            echo "Ordner: <strong>$user</strong> wurde erfolgreich erstellt!";
          } else {
            echo "Ordner: <strong>$user</strong> existiert bereits!";
          }
        foreach ($ls as $f)
        {
    	if (is_dir($f))
    		dircopy($source.'/'.$f.'/', $target.'/'.$f.'/');
    	else
    		copy($source.'/'.$f, $target.'/'.$f);
        }
    	}
    	
      }
    }
    
    ?>
  12. Autor dieses Themas

    t****k

    hmm, der Script nimmt aber wieder keine Ordner mit =)
  13. yo mey!
    womit der spruch 'das rad erfinden' wieder einmal zum einsatz kommt. das rad rollte bei den roemer schon mit 100%-iger siherheit, also lasst es einfach rollen. und das geht so:
    1. google suche nach 'php dir copy recursive'
    2. das erstbeste was da steht ist (1. stelle!): function.copy.php
    3. der neueste beitrag (1. stelle!): info ]t[ intalo [.] de
    4. [leicht anpassen: weil der lümmel nicht einrücken kann; und weil man wariablen nicht '$__...' nennt (wegen php-interna)]
    5. DAS WARS. das rad rollen lassen. arbeitsaufwand max. 5min.
    6. wenn man vom ganzen noch ein lerneffekt erwartet, man kann den ausgeliehenen kode zerlegen, wiederzusammentun, modifizieren ... kurz spielen damit. beste lernmethode! blos nicht switzen. ein guter programmierer ist ein fauler programmierer ;o)

    das ergebnis:
    <?php
    error_reporting(E_ALL);
    
    // Abfragen des Usernamen
    echo "<form method=\"POST\">
    Gib deinen Namen ein: <input type=\"text\" name=\"user\" value=\"\" title=\"Namen eingeben\" />
    <input type=\"submit\" name=\"create_folder\" value=\"Ordner erstellen\" />
    </form>";
    
    // Ist Button "Ordner erstellen" gedrückt
    if ( isset ($_POST['create_folder']) ) {
      // Die eingabe ist leider leer.
      if ( empty ($_POST['user']) or strlen (trim ($_POST['user'])) == 0 ) {
        echo "Die eingabe ist leider leer.";
      } else {
        // Erstelle Ordner mit Benutzernamen
        $user = $_POST['user'];
        if ( preg_match ('/\./', $user) || preg_match ('/\//', $user) ) { // Schutzmechanismus - Könnte man noch verbessern
          echo "Benutzername ung&uuml;ltig!";
        } else {
    
          // listet den quellordner in $ls[]
          $ls     = null;
          $source = "./Galleryplayer/";
          foreach ( glob ("$source*") as $f ) {$ls[] = basename ($f);}
          # exit ("<pre>".print_r ($ls, true));
    
          // erstellt ordner WENN NOETIG
          if ( !is_dir ($target = "./User/$user/") ) {
            mkdir ($target, 0755);
            echo "Ordner: <strong>$user</strong> wurde erfolgreich erstellt!";
          } else {
            echo "Ordner: <strong>$user</strong> existiert bereits!";
          }
          smartCopy ($source, $target);
        }
      }
    }
    
    
    # **** function smartCopy ******************************************************
    # **** source: http://www.php.net/manual/de/function.copy.php#93953 ************
    # **** kleine aenderung: czibere ***********************************************
    #   variablen $__dest umbenannt: $_dest
    #   neu beautified (?: http://onlinedictionary.datasegment.com/word/beautified)
    # ******************************************************************************
    # source=file & dest=dir => copy file from source-dir to dest-dir
    # source=file & dest=file / not there yet => copy file from source-dir to dest and overwrite a file there, if present
    
    # source=dir & dest=dir => copy all content from source to dir
    # source=dir & dest not there yet => copy all content from source to a, yet to be created, dest-dir
    function smartCopy ($source, $dest, $folderPermission = 0755, $filePermission = 0644) {
    
      $result = false;
       
      if ( is_file ($source) ) { # $source is file
        if ( is_dir ($dest) ) { # $dest is folder
          if ( $dest[strlen ($dest) - 1] != "/") # add "/" if necessary
            $_dest=$dest . "/";
          $_dest .= basename ($source);
        } else { # $dest is (new) filename
          $_dest = $dest;
        }
        $result = copy ($source, $_dest);
        chmod ($_dest, $filePermission);
      } elseif ( is_dir ($source) ) { # $source is dir
        if ( !is_dir ($dest) ) { # dest-dir not there yet, create it
          @mkdir ($dest, $folderPermission);
          chmod ($dest, $folderPermission);
        }
        if ( $source[strlen ($source) - 1] != "/") # add "/" if necessary
          $source = $source . "/";
        if ( $dest[strlen ($dest) - 1] != "/") # add "/" if necessary
          $dest = $dest . "/";
    
        # find all elements in $source
        $result    = true; # in case this dir is empty it would otherwise return false
        $dirHandle = opendir ($source);
        while ( $file = readdir ($dirHandle) ) { # note that $file can also be a folder
          if ( $file !== "." && $file !== "..") { # filter starting elements and pass the rest to this function again
    #                echo "$source$file ||| $dest$file<br />\n";
            $result = smartCopy ($source.$file, $dest.$file, $folderPermission, $filePermission);
          }
        }
        closedir ($dirHandle);
      } else {
        $result = false;
      }
      return $result;
    }
    
    ?>


    schlussbemerkung:
    wenn man die zeit nehmen will, man kann eine viel kürzere, funktion (ab php5) schreiben. viel viel kürzer und übersichtlicher (siehe lerneffekt oben. aber was rollt, gilt schon als rad! ;o)
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!