Frage

Ich möchte auf eine Remote -Website überprüfen, ob sie einige Dateien enthält. Z.B. Robots.txt, oder favicon.ico. Natürlich sollten die Dateien zugänglich sein (Lesemodus).

Also, wenn die Website lautet: http://www.example.com/ Ich möchte überprüfen, ob http://www.example.com/robots.txt.

Ich habe versucht, die URL zu holen wie wie http://www.example.com/robots.txt. Und manchmal können Sie sehen, ob die Datei vorhanden ist, da Sie keine Seite gefunden haben, die keinen Fehler im Header gefunden haben.

Einige Websites verarbeiten diesen Fehler jedoch und alles, was Sie erhalten, ist ein HTML -Code, der besagt, dass die Seite nicht gefunden werden kann.

Sie erhalten Header mit Statuscode 200.

Also eine Idee, wie man prüft, ob eine Datei wirklich vorhanden ist oder nicht?

Danke, Granit

War es hilfreich?

Lösung

Wenn sie eine Fehlerseite mit HTTP 200 dienen, bezweifle ich, dass Sie eine zuverlässige Möglichkeit haben, dies zu erkennen. Unnötig zu erwähnen, dass es extrem dumm ist, Fehlerseiten auf diese Weise zu servieren ...

Du könntest es versuchen:

  1. Ausgabe einer Kopfanfrage, die Ihnen nur die Header für die angeforderte Ressource ergibt. Vielleicht erhalten Sie auf diese Weise zuverlässigere Statuscodes
  2. Überprüfen Sie den Header vom Typ Inhalt. Wenn es text/html Sie können annehmen, dass es sich um eine benutzerdefinierte Fehlerseite anstelle von a handelt robots.txt (was als bedient werden sollte als text/plain). Für Favicons ebenfalls. Aber ich denke einfach nach zu überprüfen text/html wäre hier der zuverlässigste Weg.

Andere Tipps

Ich verwende eine schnelle Funktion mit Curl, um dies zu tun. Bisher geht es in Ordnung, auch wenn der Server der URL versucht, umzuleiten:

function remoteFileExists($url){
$curl = curl_init($url);
    curl_setopt($curl, CURLOPT_NOBODY, true);
    $result = curl_exec($curl);
    $ret = false;
    if ($result !== false) {
        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  
        if ($statusCode == 200) {
            $ret = true;   
        }
    }
    curl_close($curl);
    return $ret;
}

$url = "http://www.example.com";
$exists = remoteFileExists("$url/robots.txt");
if($exists){
    $robottxt = file_get_contents("$url/robots.txt");
}else{
    $robottxt = "none";
}

Wenn die Website Ihnen eine Fehlerseite mit einem Erfolgsstatuscode bietet, können Sie nicht viel dagegen tun.

Natürlich, wenn Sie kurz danach sind robots.txt oder favicon.ico oder etwas anderes sehr spezifisches, Sie können einfach überprüfen, ob das Antwortdokument in korrekter Form ist ... wie robots.txt sollte sein text/plain mit Sachen das enthalten robots.txt darf enthalten und favicon.ico sollte eine Bilddatei sein.

Der Header-Inhaltstyp für eine .txt-Datei sollte Text/Ebene sein. Wenn Sie also Text/HTML erhalten, handelt es sich nicht um eine einfache Textdatei.

Um zu überprüfen, ob ein Bild ein Bild ist, müssen Sie den Inhaltstyp abrufen, da es normalerweise Bild/PNG oder Bild/GIF ist. Es besteht auch die Möglichkeit, die GD -Bibliothek von PHP zu verwenden, um zu überprüfen, ob es sich tatsächlich um ein Bild handelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top