frankx: Web-Bild lokal speichern

Beitrag lesen

Hellihello zusammen,

Ich würde die Blockgröße eher kleiner halten, als 8k, auch wenn das bei den normalen gepufferten Lesevorgängen die Puffergröße ist. Beim Lesaen aus einem Socket habe ich da schon öfter Probleme gehabt, während kleinere Einheiten (128 bytes) bisher immer geklappt haben. Ich habe noch nicht nachgeschaut, woran das liegen könnte. Jedenfalls wären es mehrere Pakete, die in 8k reinpassen...

$response = explode( "\r\n\r\n", $response, 1 );

Was passiert eigentlich, wenn man    explode('$a', false)   aufruft?

Mh, die 1 am Ende, das Limit habe ich weggelassen, sonst hat er mir nämlich header und jpg-info noch zusammengelassen.

so klappt es jetzt (inklusive Portangabe im fsockopen()):

  
<?php  
$host = 'example.com';  
$file = '/bilder/test.jpg';  
  
// Verbindung zum Webserver aufbauen  
$fh = fsockopen( $host, 80 );  
  
// sonst läuft die whileschleife ewig bei nichverbindung  
if ($fh) {  
// Anfrage für http://example.com/bilder/test.jpg absetzen  
fputs( $fh, 'GET '. $file . " HTTP/1.1\r\n" );  
fputs( $fh, 'Host: '. $host . "\r\n" );  
fputs( $fh, "Connection: close\r\n\r\n" );  
  
// Antwort vom Webserver lesen  
$response = '';  
while( !feof( $fh ) )  
  $response .= fread( $fh, 128 );  
  
// Verbindung schliessen  
fclose( $fh );  
  
// header von content separieren  
//$response = explode( "\r\n\r\n", $response, 1 );  
$response = explode( "\r\n\r\n", $response );  
$header = explode( "\r\n", $response[0] );  
$content = isset( $response[1] ) ? $response[1] : null;  
  
// an dieser Stelle könnte mit den Headern gearbeitet werden  
// z.B. Location Header verfolgen, Fehlerbehandlung falls Datei nicht vorhanden, etc  
var_dump($response);  
var_dump($content);  
// Datei vom Server lokal speichern  
  
  
//vielleicht noch eine abfrage, ob $content inhalt hat vorher  
$lfh = fopen( 'C:\test.jpg', 'w' );  
//kleine kontrollmeldung  
echo "done";  
fwrite( $lfh, $content );  
fclose( $lfh );  
}  
?>  
  

Dank und Gruß,

frankx