[php] ftp programma, stream vraag.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tom-my
  • Registratie: November 2000
  • Laatst online: 21-05 16:08

Tom-my

w03iz0rz

Topicstarter
Ik ben een beetje php aan het verkennen, normaal gesproken stoei ik met delphi dus het is erg wennen :+ (zeker casesentivity 8)7 ). Mgoed, ik zit nu dus steeds wat voorbeeld script voor mezelf te maken om er een beetje bekend mee te worden.


Ik heb het onderstaande script gemaakt (een aantal variabelen zijn postvars, die geef ik door vanaf de login pagina, en vanuit het script zelf):


Zoals je kan zien maakt het verbinding met een ftp server en geeft een directory listing van de aanwezige bestanden, links of directories (script is uiteraard vrij te gebruiken).

Ik heb het zo gemaakt (nu alleen nog voor *nix systemen), dat ik de listing in een tabelletje krijg en dat ik kan klikken op de directories zodat ik die kan gaan bezoeken.

Maar erg irritant is het dat ik dan steeds de verbinding moet verbreken (lijkt me) kan dit ook anders? En zo ja, tips zijn welkom!

(ps. ik mis mn ide :P, al is maguma studio light best geinig)

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?PHP
  $FTP_SERVER  = $server;
  $FTP_USER_NAME = $user;
  $FTP_USER_PASS = $password;
  $FTP_COMMAND   = 'ls -l';
  
  if ($directory <> ''){
   echo ""; //ff bekijken wat ik hier wilde doen :P
  }

  // Try to connect
  $fc = ftp_connect($FTP_SERVER);

  if($fc) {
      print("Connected to server $FTP_SERVER.\n");
      echo "<br>\r";
      // Login
      if(! @ftp_login($fc, $FTP_USER_NAME, $FTP_USER_PASS)) {
          print("Can't logged in as user $FTP_USER_NAME.\n");
          exit;

        } else {

          print("Logged in as user $FTP_USER_NAME.\n");
      };
      sleep(2);
      if ($directory <> ''){
       $changed = ftp_chdir($fc,$directory);
       if ($changed = TRUE){
         echo "Directory changed to: $directory";
       }
      }
      echo "<br>\r";
      echo "---------------------------------------------------------------------\r";
      echo "<br>\r";
      // Exec command
      // $sR = nl2br(@ftp_exec($fc, 'ls -s'));
      //$sR = @ftp_nlist($fc, '.');
      //get listing van ftp

      echo "<table width=\"75%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n\r";
      ////////////////////////////Directories
      print("\nDirectories in directory'\n\n");
      $list = array();
      $list = ftp_rawlist($fc, ".");
      $listcount = count($list);
      $i = 0;
      $currDir = ftp_pwd($fc);
      echo "Direcories in $currDir <br>";
      echo "<tr>";
      echo "<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td> <a href=\"directoryuitdraai.php?server=$server&user=$user&password=$password&directory=$currDir/.\">.</td>";
      echo "</tr>";
      echo "<tr>";
      echo "<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td> <a href=\"directoryuitdraai.php?server=$server&user=$user&password=$password&directory=$currDir/..\">..</td>";
      echo "</tr>";
      
      while ($i < $listcount){
        $tmplink = $list[$i];
        //convert multiple spaces to single space
        $tmplink = preg_replace("/( +)/", " ", $tmplink);
        $tmplink = explode(" ", $tmplink);
        if ($tmplink[0][0] == 'd' or $tmplink[0][0] == 'D'){
             echo "<tr>";
             echo "<td> $tmplink[0]</td><td> $tmplink[1] </td><td>$tmplink[2]</td><td> $tmplink[3]</td><td> $tmplink[4]</td> <td> $tmplink[5]</td><td> $tmplink[6]</td><td> $tmplink[7]</td><td> <a href=\"directoryuitdraai.php?server=$server&user=$user&password=$password&directory=$currDir/$tmplink[8]\">$tmplink[8]</td>";
             echo "</tr>";
             }
        $i++;
        }
      ////////////////////////////Directories

      ////////////////////////////Files
      print("\nDirectories in directory'\n\n");
      $list = array();
      $list = ftp_rawlist($fc, ".");
      $listcount = count($list);
      $i = 0;
      $currDir = ftp_pwd($fc);
      echo "Direcories in $currDir <br>";
      while ($i < $listcount){
        $tmplink = $list[$i];
        //convert multiple spaces to single space
        $tmplink = preg_replace("/( +)/", " ", $tmplink);
        $tmplink = explode(" ", $tmplink);
        if ($tmplink[0][0] == '-' or $tmplink[0][0] == 'l'){
             echo "<tr>";
             echo "<td> $tmplink[0]</td><td> $tmplink[1] </td><td>$tmplink[2]</td><td> $tmplink[3]</td><td> $tmplink[4]</td> <td> $tmplink[5]</td><td> $tmplink[6]</td><td> $tmplink[7]</td><td> $tmplink[8]</td>";
             echo "</tr>";
             }
        $i++;
        }
        echo "</table>";
      ////////////////////////////Files





      // Close connection
      ftp_quit($fc);

      print("\nConnection closed.\n");

    } else {

      print("Can't close connection to server $FTP_SERVER.\n");
  };
?>

"Then there was the man who drowned crossing a stream with an average depth of six inches."


Acties:
  • 0 Henk 'm!

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Een permanent FTP connection dus. PHP heeft daar standaard geen functie voor. Missertje? Je zou kunnen proberen dmv een sessie de connectie door te geven, maar ik denk dat het niet werkt...

Acties:
  • 0 Henk 'm!

  • Tom-my
  • Registratie: November 2000
  • Laatst online: 21-05 16:08

Tom-my

w03iz0rz

Topicstarter
hmm k, nja het lijkt me niet zo prettig voor de server namelijk. Met dat connecten en deconnecten sla je wel log files ophol :P.

"Then there was the man who drowned crossing a stream with an average depth of six inches."


Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Dat komt door het simpele fijn dat php een script engine is en dus alleen scripts uitvoert. Als je een verbinding met de ftp server wil behouden, zal je php scripts moeten draaien zoals je java servlets op in een webserver draait.

Om dat te kunnen moet je gebruik maken van SRM. Hierin blijven de scripts draaien. De scripts die je webserver uitvoert kan met die scripts communiceren en dus ook de ftp verbinding weer ophalen.

Op zich werkt die SRM best wel geinig, alleen is ie helaas nog niet stabiel en is er ook nog geen enkele host die het ondersteund.

Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

Ik ben toevallig ook bezig geweest met de ftp functie's van php, nu heb ik nog niet echt getest of het werkt maar ik was van plan om mijn ftp-client object aan een sessie variable door te geven in de hoop dat de ftp resource id gewoon zou blijven bestaan en het de timeout of de ftp_exit() zou respecteren ipv eindigen van het script.

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03 09:11
Of je gaat heel erg moeilijk doen en gebruik maken van frames, waarin in de eerste frame een loop zit die een bestand of een database checkt voor een nieuwe command, die door het tweede frame gemaakt wordt.

[ Voor 12% gewijzigd door Tom-Eric op 09-01-2003 10:35 ]

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels

Pagina: 1