Philipp Hasenfratz: ... hallo PHP-ler, gibt es eine einfachere Möglichkeit?

Beitrag lesen

Halihallo diplomsiedler

ich dachte, dass hätte ich schon.

Nun, "Bekomme ich nicht hin" klingt mir nicht nach einer Frage und zeugt von höchster
ungedult und unbereitwilligkeit das Problem auch _selber_ anzugehen.

ich nix wissen, wie mit hilfe von fsockopen den 404er check machen kann, wie du zuvor beschrieben hast?!

_Das_ ist eine Frage. Unter http://www.php.net/manual/de/function.fsockopen.php
findest du dieses Beispiel:

<?php
$fp = fsockopen ("www.example.com", 80, &$errno, &$errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fputs ($fp, "GET / HTTP/1.0\r\n\r\n");
    while (!feof($fp)) {
        echo fgets($fp,128);
    }
    fclose($fp);
}
?>

Dieses Stellt eine Verbindung mit www.example.com her (die du bitte durch den Server
mit dem fremden Bild ersetzt) und öffnet '/' (also in den meisten Fällen /index.html)

für dein Beispiel: fputs ($fp, "GET /images/existiert.gif HTTP/1.0\r\n\r\n");

dann wird versucht die Ressource http://www.example.com/images/existiert.gif zu laden.

das was dort über echo fgets($fp,128); ausgegeben wird, kannst du in eine Variable
"umleiten" (du möchtest nicht auf dem Bildschirm lesen, was der fremde Server antwortet,
sondern du möchtest wissen, ob da ein "Status: 404" drinne steht, dazu musst du die
Ausgabe in einer Variablen speichern):

$response .= fgets($fp,128);

Nun, wo steht nun der gewünschte "Status: 404 ..."? - Der wird vom Webserver _in_ dieser
$response gespeichert. Nun stellt sich natürlich die Frage, wie du diesen Status-Code
extrahieren kannst. Hierzu möchtest du dich über RegularExpressions informieren, dies
tust du z. B. unter http://www.php.net/manual/de/function.preg-match.php.
Sieh dir z. B. dort das Beispiel 3 "Getting the domain name out of a URL" an und passe
es etwa so an:

preg_match("/Status: (.*?)(\r|\n)$/i",$host,$matches);

in $matches[0] hast du dann entweder '404', das heisst "Ressource nicht gefunden", das
fragliche Bild befindet sich also _nicht_ auf dem fremden Server, oder du hast z. B.
'200' was ein 'OK' bedeutet (die Ressource [=>Bild] ist vorhanden); natürlich gibt's
noch viele andere HTTP-Status-Codes, die du bitte über google.ch nachschlägst.

Viele Grüsse

Philipp