Überprüfen Sie nach Dateien (Robots.txt, favicon.ico) zu einer Website -PHP
-
21-09-2019 - |
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
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:
- Ausgabe einer Kopfanfrage, die Ihnen nur die Header für die angeforderte Ressource ergibt. Vielleicht erhalten Sie auf diese Weise zuverlässigere Statuscodes
- Ü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 handeltrobots.txt
(was als bedient werden sollte alstext/plain
). Für Favicons ebenfalls. Aber ich denke einfach nach zu überprüfentext/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.