Verwijderd schreef op 28 juni 2004 @ 15:21:
[...]
Als ik jou was, zou ik 2 aparte scripts schrijven die:
1. Verbind met de FTP server en de contents van de remote directory in een textfile zet (maar die heb je dus al

)
2. De inhoud van de textfile uitleest en er (X)HTML van maakt.
Anders is het echt heel langzaam
Ik heb het script ff aangepast zodat de output naar een text-file gaat:
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
| <?
$ftp1 = ftp_connect('$server') or die("Couldn't connect to server");
ftp_login($ftp1,'$user','$pass');
ftp_pasv($ftp1, TRUE);
echo "Collecting Files on Server<br>";
$dir = "";
$path = "images";
ftp_chdir($ftp1, "public_html");
ftp_chdir($ftp1, "$path");
print ftp_pwd($ftp1); echo "<br>";
function filecollect($dir,$filelist)
{ global $ftp1;
$files = ftp_nlist($ftp1,$dir);
foreach ($files as $file) {
$isfile = ftp_size($ftp1, $file);
if($isfile != "-1") {
$num = $num+1;
$filelist[$num] = $file;
}
}
return $filelist;
ftp_close (ftp1);
}
$filelist = filecollect($dir,$filelist);
$aantal = count($filelist);
$x = 1;
$filename = "directorycontents.txt";
$outputfile = fopen($filename, 'w');
$outputlines = "";
while ($x <= $aantal)
{
$outputlines .= "http://www.linkshandigegitaren.nl/$path/$filelist[$x];";
$x = $x+1;
}
$outputlines .= "EOF";
fwrite($outputfile, $outputlines);
fclose($handle);
?> |
Zal ook nog wel ff snel een script maken die het voor je uitleest en er HTML van maakt

Ik ben vast dom, maar ik zie niet wat hier sneller aan is. Je hebt nml alleen maar een extra loop geintroduceerd: ipv 2 (listen en dan printen naar HTML), heb je er nu 3 (listen, printen naar file, lezen van file).
Ik weet niet of het in PHP ook kan, maar in C zou ik de functie uitbreiden met een extra parameter: een functie die je file neemt als parameter. Dan heb je maar 1 loop nodig: tijdens het listen voer je meteen de functie uit.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| function filecollect($dir,$filelist, $func)
{
global $ftp1;
$files = ftp_nlist($ftp1,$dir);
foreach ($files as $file) {
$isfile = ftp_size($ftp1, $file);
if($isfile != "-1") {
$num = $num+1;
$filelist[$num] = $file;
$func($file);
}
}
ftp_close (ftp1);
return $filelist;
}
function print($file)
{
....
}
$filelist = filecollect($dir,$filelist, print); |
Verder zal dit niet goed gaan:
PHP:
1
2
| return $filelist;
ftp_close (ftp1); |
Zo wordt je ftp verbinding natuurlijk nooit gesloten; die return haalt je nml direct uit de functie. Eventjes omwisselen.