Ik heb een PHP-scriptje geschreven welke de URL opent welke ik hem geef, en hieruit alle '<a href=*>'-jes pakt. Vervolgens gaat hij al deze gevonden links downloaden, mits deze aan een bepaalde extensie voldoen. Tot hier geen enkel probleem.
Nu gebruik ik voor zowel het uitlezen van de pagina, als het 'downloaden' van de bestanden, de functie fsockopen(). Ik schrijf de HTTP-headers weg om het bestand dat ik wil te krijgen, sluit de socket, en sla het bestand op. Dit opnieuw en opnieuw voor elk bestand.
Nu vraag ik mij af of dit niet veel efficienter kan.
is het niet mogelijk om 1x een socket-verbinding naar de host te sturen, en deze open te houden tot je alle bestanden hebt welke je wilt. Volgens mij scheelt dat een hoop 'overhead', en gaat dit veel sneller.
Nu gebruik ik bijvoorbeeld om een bestand te downloaden;
Maar stel ik wil 100 bestanden vanaf datzelfde domein. Kan dat, en zo ja, hoe?
Kan me voorstellen dat ik iets met de 'connection: close' header moet doen, maar kom er niet uit. Iemand een idee of het kan?
Nu gebruik ik voor zowel het uitlezen van de pagina, als het 'downloaden' van de bestanden, de functie fsockopen(). Ik schrijf de HTTP-headers weg om het bestand dat ik wil te krijgen, sluit de socket, en sla het bestand op. Dit opnieuw en opnieuw voor elk bestand.
Nu vraag ik mij af of dit niet veel efficienter kan.
is het niet mogelijk om 1x een socket-verbinding naar de host te sturen, en deze open te houden tot je alle bestanden hebt welke je wilt. Volgens mij scheelt dat een hoop 'overhead', en gaat dit veel sneller.
Nu gebruik ik bijvoorbeeld om een bestand te downloaden;
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| function getFile($host, $file) { $fp = fsockopen($host, 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET $file HTTP/1.1\r\n"; $out .= "Host: $host\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $line = ""; while (!feof($fp) ) { $line .= fgets($fp, 128); } saveasfile($line); fclose($fp); } } |
Maar stel ik wil 100 bestanden vanaf datzelfde domein. Kan dat, en zo ja, hoe?
Kan me voorstellen dat ik iets met de 'connection: close' header moet doen, maar kom er niet uit. Iemand een idee of het kan?
[ Voor 6% gewijzigd door frickY op 26-08-2004 22:18 ]