PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Verzeichnisse kopieren (https://www.php-resource.de/forum/php-developer-forum/10957-verzeichnisse-kopieren.html)

andik2000 05-09-2002 15:29

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

faustus 05-09-2002 15:34

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 ...

andik2000 05-09-2002 15:58

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

faustus 05-09-2002 17:14

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

andik2000 05-09-2002 17:33

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 :D

Grüße, Andi

faustus 06-09-2002 09:54

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);
}
}

andik2000 06-09-2002 10:59

Das sieht schon genau danach aus, was ich suche.

Allerdings funktioniert es nicht richtig :confused:

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

faustus 06-09-2002 11:16

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_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);
}
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($dir0777))
echo 
"Failed creating directory: $dir\n";
else
echo 
"Created directory: $dir\n";
}
}
}
}
?>


andik2000 06-09-2002 12:16

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

:goth:

faustus 06-09-2002 14:32

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

andik2000 06-09-2002 15:38

Schade, trotzdem vielen Dank!

Gruß, Andi

slarti 06-09-2002 16:36

...hmm, ich würde es ja mit exec() probieren,
bei unix-systemen z.B
PHP-Code:

exec("cp -r $quelle $ziel"); 


andik2000 06-09-2002 17:05

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

alefu 08-11-2002 13:03

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

TBT 08-11-2002 13: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


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:55 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG