[php] copy dir script

Pagina: 1
Acties:

Onderwerpen


  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 04-02-2022
hallo,
ik ben een script aan het maken in php waarmee je hele dirs kan kopieren. ik ben al best ver maar ik kom een probleem tegen. als ik een dir opgeef om te kopieren dan maakt ie eerst de dir aan en dan leest ie de source dir uit om te kijken wat hij allemaal moet copieren. als er in de sourcedir bestanden staan dan gaat alles goed die kopiert ie gewoon. maar als er in de sourcedir nog een dir staat dan gaat er iets mis. hij kopiert namelijk die dir wel met wat er in staat alleen kopiert hij hem niet naar de juiste plek namelijk de eerste dir die net aangemaakt is.
ik weet neit wat ik fout doe. ik hoop dat iemand me kan helpen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function copycut($itempath) {
    $theitem = realpath($itempath);
    if(is_dir($theitem)) {
        $dirsplit1 = explode("\\",$theitem);
        $number1 = count($dirsplit1);
        $newp .= "".$dirsplit1[$number1-1]."/";
        mkdir("d:/test2/".$newp."");
        $dirhandle = opendir($theitem);
        while(false !== ($files = readdir($dirhandle))) {
            if(($files !== ".") && ($files !== "..")) {
                if(is_dir("".$theitem."/".$files."")) {
                    $subdir = realpath("".$theitem."/".$files."");
                    copycut($subdir);
                    
                }
                elseif(is_file("".$theitem."/".$files."")) {
                    $fileinfo = pathinfo("".$theitem."/".$files."");
                    chmod("".$theitem."/".$files."",0777);
                    copy("".$theitem."/".$files."","D:/test2/".$newp."".$fileinfo['basename']."");
                }
            }
        }
        closedir($dirhandle);
        return true;
    }
    elseif(is_file($theitem)) {
        $fileinfo = pathinfo("".$theitem."");
        chmod($theitem,0777);
        copy("".$theitem."","D:/test2/".$fileinfo['basename']."");
    }
    else {
        return false;
    }
}

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je doet het al redelijk goed door je functie recursief aan te roepen in regel 13, maar je moet denk ik een extra parameter opnemen voor de doelmap waar je de zooi naartoe wil kopiëren. Dan gaat het wel goed. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 04-02-2022
ja snap ik heb nu tijdelijk voor het testen de doelmap gewoon in de code gebakken. namelijk d:\test2
maar als ik dan dus deze functie aanroep dat ie d:\test moet copieren dan komt er dit uit:
content d:\test =
- nieuwe map
--- txt1
- txt1
- txt2

en dit komt er dan uit:
d:\test2\
- nieuwe map
--- txt1
-test
-- txt1
-- txt2

maar nieuwe map moet ook in d:\test2\test\ komen :s

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 19-08 08:24

PowerSp00n

There is no spoon

Tombo_inc schreef op donderdag 23 december 2004 @ 19:48:
ja snap ik heb nu tijdelijk voor het testen de doelmap gewoon in de code gebakken. namelijk d:\test2
maar als ik dan dus deze functie aanroep dat ie d:\test moet copieren dan komt er dit uit:
content d:\test =
- nieuwe map
--- txt1
- txt1
- txt2

en dit komt er dan uit:
d:\test2\
- nieuwe map
--- txt1
-test
-- txt1
-- txt2

maar nieuwe map moet ook in d:\test2\test\ komen :s
Daarom moet je dus ook zoals -NMe- aangeeft de directory met de function meegeven, en deze bij de recursion dus de extra directory hieraan meegeven zodat deze in een map dieper gekopieerd word, en mappen daar weer in nog een map dieper etc. etc. etc :).

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Tombo_inc schreef op donderdag 23 december 2004 @ 19:48:
ja snap ik heb nu tijdelijk voor het testen de doelmap gewoon in de code gebakken. namelijk d:\test2
maar als ik dan dus deze functie aanroep dat ie d:\test moet copieren dan komt er dit uit:
content d:\test =
- nieuwe map
--- txt1
- txt1
- txt2

en dit komt er dan uit:
d:\test2\
- nieuwe map
--- txt1
-test
-- txt1
-- txt2

maar nieuwe map moet ook in d:\test2\test\ komen :s
Daarom zeg ik dus ook dat je die map niet hard in je code moet zetten, maar als parameter mee moet geven in de recursieve aanroep van je functie... :P
edit:
Damn, must...go...faster.... :+
PowerSp00n :w

[ Voor 6% gewijzigd door NMe op 23-12-2004 19:56 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Tombo_inc schreef op donderdag 23 december 2004 @ 19:35:
hallo,
ik ben een script aan het maken in php waarmee je hele dirs kan kopieren.
Best een leuke oefening natuurlijk, maar waarom gebruik je niet gewoon de tools die bij je OS zitten? Onder windows heb je xcopy en onder Unix 'cp -a'. Gewoon aanroepen via system() lijkt me een stuk handiger ;-)

  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 04-02-2022
@ nme + powerspoon
ok ik zal het proberen maar kunne jullie mssn een voorbeeldje posten?

@ xenna
ik wist niet eens dat die er waren :o bedankt. maar idd dit is wel een leuk oefening.

*edit

Weeeeeehoooo, ja het werkt!
hartstikke bedankt :D hier ben ik echt heel blij mee. ik had me al suf gezocht naar wat de oorzaak was maar het is eigenlijk best logisch B) . errug bedankt mensen _/-\o_ :*)

[ Voor 37% gewijzigd door tombo_inc op 23-12-2004 20:06 ]

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


Acties:
  • 0 Henk 'm!

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

uhuh, zou je misschien het werkende script hier kunnen plaatsen? ik heb er wel interesse in :)

It's scientifically known, that base improves the tase of cheezes!


Acties:
  • 0 Henk 'm!

  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 04-02-2022
nou vooruit dan. voor de liefhebbers hier het werkende script.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
#####################################################
# Copy All script v1.0                              #
# Door: Tombo                                       #
# Dit script copiert alles wat je opgeeft           #
#####################################################

function rcopy($itempath,$topath,$overwrite) {
    $theitem = realpath($itempath);
    if(is_dir($theitem)) {
        $dirsplit1 = explode("\\",$theitem);
        $number1 = count($dirsplit1);
        $newp .= "".$dirsplit1[$number1-1]."/";
        chmod($topath,0777);
        if(mkdir("".$topath."/".$newp."")) {$mdir = true;}
        $dirhandle = opendir($theitem);
        while(false !== ($files = readdir($dirhandle))) {
            if(($files !== ".") && ($files !== "..")) {
                if(is_dir("".$theitem."/".$files."")) {
                    $subdir = realpath("".$theitem."/".$files."");
                    rcopy($subdir,"".$topath."/".$newp."");
                }
                elseif(is_file("".$theitem."/".$files."")) {
                    $fileinfo = pathinfo("".$theitem."/".$files."");
                    chmod("".$theitem."/".$files."",0777);
                    chmod("".$topath."/".$newp."",0777);
                    if(copy("".$theitem."/".$files."","".$topath."/".$newp."".$fileinfo['basename']."")) {$cfile = true;}
                }
            }
        }
        closedir($dirhandle);
        if(($mdir == true) || ($cfile == true)) {return true;}
    }
    elseif(is_file($theitem)) {
        $fileinfo = pathinfo("".$theitem."");
        chmod($theitem,0777);
        chmod($topath,0777);
        if($overwrite) {
            $name = str_replace($fileinfo['extension'],"",$fileinfo['basename']);
            echo($name);
            //if(copy("".$theitem."","".$topath."/".$fileinfo['basename']."".."")) {return true;}
        }
        else {
            if(copy("".$theitem."","".$topath."/".$fileinfo['basename']."")) {return true;}
        }
    }
    else {
        return false;
    }
}

rcopy("jouwsourcefile","jouwdest","overschrijf als bestaat true of false");

//overschrijf functie werkt nog niet :p

?>

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition

Pagina: 1