ftp_nlist resultaat verschil in path

Pagina: 1
Acties:

  • Quinie
  • Registratie: Juli 2001
  • Laatst online: 29-07 14:53
Ik ben bezig met een backup script voor sites op externe servers. Deze wil ik gaan backuppen doormiddel van de PHP ftp functies. Het script loopt de mappen door en bouwt 2 array's op. De eerste word gevult met alle mappen de andere met alle files.

Test ik het script op ftp server 1 krijg ik andere resultaten dan op ftp server 2
Mijn vermoeden is dat ftp_nlist verschillende resultaten geeft (regel 40 script).Nu ben ik niet een PHP expert dus misschien doe ik het ook wel ergens fout.

op de eerste server word de array gevult met waardes als deze

code:
1
2
3
4
5
6
7
8
Array
(
    [0] =>
    [1] => Map 1
    [2] => Map2
    [3] => Map2/Map 1
    [4] => Map2/Map 2
)


op de 2de server krijgt ik volgend resultaat
code:
1
2
3
4
5
6
7
Array
(
    [0] => www
    [1] => test
    [2] => cms
    [3] => Discogs
)


De root folder is hier www. Zoals te zien is neemt hij wel de subfolders op in het array alleen doet hij het hier zonder het volldige path. in het eerste resultaat worden subfolders wel in het volledige path opgenomen. Ik had bij de tweede server dus ook het resultaat verwacht in de vorm van

code:
1
2
3
4
5
6
7
Array
(
    [0] => www
    [1] => www/test
    [2] => www/cms
    [3] => www/Discogs
)


Hoe kan dit verschil ontstaan? Zit het in me script of is er een andere reden.

Het script
PHP:
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
$loophasrun = 0;
$x = 1;

// Voeg header aan mailreport toe
$mailoutput .= "<h3>Backup FTP Servers</h3>";

// Loop de de diverse FTP Sites
for ($a = 0; $a < sizeof($ftpsite); $a++) {

    $folderarray = array($ftpsite[$a]['ftproot']);
    $filesarray = array();

    $conn_id = ftp_connect($ftpsite[$a]['ftphost']);
    $login_result = ftp_login($conn_id, $ftpsite[$a]['ftpuser'], $ftpsite[$a]['ftppass']);

    if ((!$conn_id) || (!$login_result)) {
          $mailoutput .=  "<b>FTP connection has failed! for: ".$ftpsite[$a]['ftphost']."</b><br/><br/>"
                      ."Attempted to connect to $ftp_server for user $ftp_user_name";
          exit;
    } else {
        while ($loophasrun <= $x) { 
            getFoldersandFiles ($conn_id, $folderarray[$loophasrun], $ftpsite[$a]['ftproot'] );
            $x = count($folderarray) -1;
        }
        print_r ($folderarray);
        makeLocalfolders ($ftpsite[$a]['ftpstoreroot'], $folderarray);
        $totaloffilesize = downloadFiles ($ftpsite[$a]['ftpstoreroot'], $conn_id, $filesarray);
        ftp_close($conn_id);

        if ($makezipftp == true) {
            $command = "7za a -r ".$backupdirmysqlftp. $ftpsite[$a]['ftphost']."_".date("Y-m-d-H-i-s") .".gz ".$ftpsite[$a]['ftpstoreroot'];
            system($command);
            removedir($ftpsite[$a]['ftpstoreroot']);
        }
        $mailoutput .=  "<b>Completed ".$ftpsite[$a]['ftphost']."</b> total of files size: ".$totaloffilesize."<br/>";
    }
}

function getFoldersandFiles ($conn_id, $folder, $ftproot) {
    $tempfolderlist = ftp_nlist ($conn_id, $folder);
    $i = 0;
    $counter = count($tempfolderlist) - 1;
    
    while ($i <= $counter) {    
        $res = ftp_size($conn_id, $tempfolderlist[$i]);
        if("$res" != "-1") {        
            $tempfilesarray = array($tempfolderlist[$i]);
            unset($tempfolderlist[$i]);
        } 
        $i++;
    }

    global $filesarray, $folderarray, $loophasrun;

    if ($tempfilesarray != "") {
        $filesarray = array_merge($filesarray, $tempfilesarray);
    }
    if ($tempfolderlist != "") {
        $folderarray = array_merge($folderarray, $tempfolderlist);
    }   
    $loophasrun++;
}

function makeLocalfolders ($ftpstoreroot, $folderarray) {
    foreach ($folderarray as $folder) {
        if ($folder != "") {
            mkdir($ftpstoreroot .$folder,0777,TRUE);
        }
    }
}

function downloadFiles ($ftpstoreroot, $conn_id, $filesarray) {
    $totaloffilessize = 0;
    foreach ($filesarray as $file) {
        $handle = fopen($ftpstoreroot.$file, 'w');
        $totaloffilessize = ftp_size($conn_id,  $file) + $totaloffilessize;
        ftp_fget($conn_id, $handle, $file, FTP_ASCII, 0);
        fclose($handle);
    }
    return $totaloffilessize;
}


http://www.Quinie.nl
http://soundcloud.com/quinie
https://www.wereoutthere.nl


  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 09:37

pietje63

RTFM

Ik kan het verschil niet zo heel snel vinden. Welke php vesies gebruik je, zit hiet misschien een verschil in? Ook lijken er wat verschillen tussen de linux en windows implementatie als je het commentaar op http://nl2.php.net/ftp_nlist bekijkt

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Kan het zijn dat de 'folders' fysiek een andere structuur hebben? Hiermee bedoel ik dat er mogelijk gelinkte folders zijn waar de functie in de knoop gaat... (weet niet of ftp_nlist() hier last van heeft)

- bemerk sksafarath at impelsys dot com en voorbeelden op php.net

[ Voor 20% gewijzigd door moozzuzz op 02-03-2007 15:10 ]


  • Quinie
  • Registratie: Juli 2001
  • Laatst online: 29-07 14:53
pietje63 schreef op vrijdag 02 maart 2007 @ 14:58:
Ik kan het verschil niet zo heel snel vinden. Welke php vesies gebruik je, zit hiet misschien een verschil in? Ook lijken er wat verschillen tussen de linux en windows implementatie als je het commentaar op http://nl2.php.net/ftp_nlist bekijkt
PHP versie is het zelfde ik test vanaf 1 machine naar 2 servers.
Ik kan me alleen nog indenken dat het met het type ftp server te maken heeft. De ene is een IIS de andere een Filezilla FTP Server (beide windows).

Het gaat in beide gevallen trouwens om fysieke mappen dus geen viruele ofzo.

De reactie van sksafarath at impelsys dot com op php.net. Doet mij voorkomen dat het tweede resultaat geen normaal resultaat is en dat hij zelfs van het eerste resultaat uitgaat en dat ondervangt door een Change Dir. Enige wat me rest is testen met een tweede IIS.


http://www.Quinie.nl
http://soundcloud.com/quinie
https://www.wereoutthere.nl