Script zum Einbauen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
beispiel
benutzername
button
code
datum
eingabe
erstellen
erstellt ordner
file
funktion
http
manual
null
ordner
rad
schutzmechanismen
target
url
verbessern
-
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ü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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
Jaein sorry habe keinen Plan kannst du mir hier bitte das machen, werde mich jetzt nun auch hinsetzen und selber maldaran lernen.
Gruß Tobi -
Sieh und lerne:
foreach ($ls as $f) { if (is_dir($f)) dircopy($source.'/'.$f.'/', $target.'/'.$f.'/'); else copy($source.'/'.$f, $target.'/'.$f); }
LG cookies -
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ü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 -
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 -
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ü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; } } } } ?>
-
Hä? Wo ist jetzt das zweite foreach()???
Ohne das kanns ja nich funktionieren! -
Wie welches meinst du das Beispiel, das braucht man doch nicht oder, aber ich kann mich täuschen^^?
Gruß Tobi -
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ü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); } } } } ?>
-
hmm, der Script nimmt aber wieder keine Ordner mit =)
-
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ü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) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage