Führt eine cURL-Anfrage durch, um zu prüfen, ob eine Website existiert / online ist
Technik #1
<?php
if (isDomainAvailible('https://css-tricks.de'))
{
echo "Up and running!";
}
else
{
echo "Woops, nothing found there.";
}
//returns true, if domain is availible, false if not
function isDomainAvailible($domain)
{
//check, if a valid url is provided
if(!filter_var($domain, FILTER_VALIDATE_URL))
{
return false;
}
//initialize curl
$curlInit = curl_init($domain);
curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curlInit,CURLOPT_HEADER,true);
curl_setopt($curlInit,CURLOPT_NOBODY,true);
curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
//get answer
$response = curl_exec($curlInit);
curl_close($curlInit);
if ($response) return true;
return false;
}
?>
Technik #2
<?php
function Visit($url){
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";$ch=curl_init();
curl_setopt ($ch, CURLOPT_URL,$url );
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch,CURLOPT_VERBOSE,false);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch,CURLOPT_SSLVERSION,3);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
$page=curl_exec($ch);
//echo curl_error($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode>=200 && $httpcode<300) return true;
else return false;
}
if (Visit("http://www.google.com"))
echo "Website OK"."n";
else
echo "Website DOWN";
?>
Technik #3
<?php
ini_set("default_socket_timeout","05");
set_time_limit(5);
$f=fopen("https://css-tricks.de","r");
$r=fread($f,1000);
fclose($f);
if(strlen($r)>1) {
echo("<span class='online'>Online</span>");
}
else {
echo("<span class='offline'>Offline</span>");
}
?>
Bei Technik #2 sollte es wahrscheinlich heißen
... && $httpcode<400) return true;anstelle von
... && $httpcode<300) return true;Andernfalls würde eine Weiterleitung als „Server down“ betrachtet werden.
Hallo NetHawk.
Ich habe es getestet und Sie haben absolut Recht. $httpcode<300 gibt immer „server down“ zurück.
Ich habe jedoch eine kleine Änderung vorgenommen, damit ich mehrere Seiten testen kann, aber manchmal erscheinen Seiten zufällig offline. Was könnte falsch sein, wenn Sie mir helfen können? Ich habe versucht, dies für einen Cronjob zu tun.
CODE
=200 && $httpcode”.$sitio.””;
else
echo “DOWN->”.$sitio.””;
}
?>
Es scheint, als wäre der Code abgeschnitten worden… Wie auch immer, die einzige Änderung, die ich vorgenommen habe, war, URLs in ein Array zu packen und dann eine nach der anderen in einer foreach-Schleife zu testen.
Hier ist eine Alternative zu dieser Methode: http://www.softwaregeneration.org/downforeveryoneorjustme
wie benutzt man das????????
was ist die Methode
Kopieren Sie den Code aus Beispiel #2 in eine Textdatei. Geben Sie ihr die Erweiterung .php. Verschieben Sie die Datei auf Ihren Webserver und rufen Sie die URL auf, die auf die Datei verweist. Wenn Sie einen PHP-fähigen Server haben (die meisten sind es), prüft der Code, ob Google erreichbar ist (wahrscheinlich immer).
Sie können von dort aus weitermachen, aber Sie benötigen grundlegende PHP-Kenntnisse.
Welche Technik ist besser zu verwenden? Vorteile? Nachteile?
#1 prüft, ob die URL gültig ist, was ein großer Vorteil ist, wenn die URLs von einem Benutzer eingegeben werden und nicht aus einer Datenbank oder einer Liste bekanntermaßen gültiger URLs stammen.
#2 hingegen sendet einen User-Agent-String. Ohne diesen antworten einige Server auf die Anfrage mit einem Fehler 403 (verboten) oder 405 (Methode nicht erlaubt).
Fazit: Ich schlage #2 vor, aber mit dem Filtertest von #1.
Eigentlich sollte Chris etwas dazu sagen, denn er betreibt aremysitesup.com, einen Dienst, der diese Technik wahrscheinlich nutzt (siehe Schaltfläche in der Fußzeile dieser Seite – großartiger Service, sehr empfehlenswert).
Wir verwenden tatsächlich Ruby und einige komplexere Methoden =). Aber das Prinzip ist dasselbe.
Danke! Ich frage mich, ob http://www.checksite.us die gleiche Methode verwendet?
Auch, was ist der Zweck des Agenten?
Checksite.us basiert wahrscheinlich auf einem ähnlichen Mechanismus, obwohl nicht klar ist, welche Sprache verwendet wird.
Der UserAgent ist ein String, der von jedem Browser gesendet wird, um sich zu identifizieren. Zumindest war das die Absicht. Heutzutage lügen viele Browser über die Details. Solange jedoch ein UserAgent gesendet wird, betrachtet der Webserver eine Anfrage normalerweise als legitim. Auch Bots, z. B. Google, haben UserAgent-Strings, um sie zu identifizieren.
Wenn kein UserAgent-String gesendet wird, lassen einige Webserver Sie aus irgendeinem Grund nicht auf die Website zugreifen (sie mögen die Vorstellung, dass ein Tool oder ein anderer Server direkt auf ihre Seiten zugreift, wahrscheinlich nicht).
Sie können den UserAgent-String Ihres Browsers (neben anderen Informationen) auf dieser Seite sehen
http://browser.delucamarketing.ch/
Sie verwenden PHP und ich denke, der Code ähnelt dem Beispiel, aber mit einigen Änderungen. HTTP ist in ihrem Formular nicht erforderlich und im Beispiel auf dieser Website erforderlich, aber es ist einfach, eine Funktion hinzuzufügen, die HTTP:// oder andere Teile entfernen oder hinzufügen kann, z. B. wenn Sie Unterdomänen nicht überprüfen möchten, wie alexa.com Teile von URLs ersetzt...
checksite.us hat eine index.php-Datei, also verwendet es PHP, zu 99% sicher: http://www.checksite.us/index.php?url=www.awesomehosting.nl Ich habe Skripte, um Informationen über Websites anzuzeigen und Informationen zu extrahieren, die von ihren Servern gesendet werden...
Danke fürs Teilen!
Keine dieser Techniken scheint wirklich zu funktionieren… jedes Mal, wenn ich etwas wie http://www.adfsfdasffsfasfsf.com überprüfe, kommt immer 200 heraus… kennt jemand eine Möglichkeit herauszufinden, ob eine Website nicht verfügbar ist, wie *hust* *hust* GoDaddy *hust* *hust*?
Es ist eine einfache Whois-Abfrage. Sie müssen eine Socket-Verbindung auf Port 43 erstellen. Es geht nur darum, PHP dazu zu bringen, sich mit genau demselben Whois-Server zu verbinden, den das Terminal verwendet, wenn Sie eine Whois-Abfrage durchführen.
Es ist eine einfache Whois-Abfrage. Sie müssen eine Socket-Verbindung auf Port 43 erstellen. Es geht nur darum, PHP dazu zu bringen, sich mit genau demselben Whois-Server zu verbinden, den das Terminal verwendet, wenn Sie eine Whois-Abfrage durchführen.
Entschuldigung, aus irgendeinem Grund wird der Code nicht angezeigt. Sie finden ein gutes Tutorial unter http://www.phptoys.com/e107_plugins/content/content.php?content.38, das beschreibt, wie man einen erstellt.
Es gibt eine weitere Lösung, die Sockets verwendet
http://neo22s.com/check-if-url-exists-and-is-online-php/
Hallo Chris,
Haben Sie eine Idee, wie ich prüfen kann, ob eine Reihe von URLs gültig sind? Zum Beispiel. Ich muss 1000 Twitter-Profile überprüfen und wissen, ob sie aktiv oder ungültige URLs sind. Ich möchte die gesamte Liste der Twitter-URLs einfügen und prüfen können, ob es sich um gültige Seiten handelt.
Schön,
Aber gibt es eine API von who.is, um das zu überprüfen? Ich denke, die Verwendung von Webdiensten würde dem Anliegen effektiver dienen. Wie ich es beim Abrufen des Alexa-Ranges getan habe,
http://tutology.net/category/how-php/get-alexa-rank-php-and-alexa-api
Tolle Konzepte
Mir scheint, dass diese Skripte bei einer Weiterleitung nicht wirklich funktionieren würden. Daher könnten „facebook.com“ und „www.facebook.com“ unterschiedliche Ergebnisse liefern, auch wenn die Seite online war.
Nein?
Weiß jemand, wie „downforeveryoneorjustme.com“ das macht? Dieses Skript scheint jedes Mal zu funktionieren, mit oder ohne Weiterleitungen…
Diese Codes sind nicht narrensicher. Ich habe verschiedene Domains unter isitdownrightnow.com getestet und das Skript schlägt bei einigen Domains fehl. ask.com ist ein solches Beispiel.
http://www.downforeveryoneorjustme.com/ask.com
Bei doj.me funktioniert es jedoch… Ich bin mir nicht sicher, welche Methode sie verwenden…
http://doj.me/?url=ask.com
Hallo,
Danke für die Tutorials. Aber eine Frage: Wie stellen Sie sicher, dass nicht Ihre Internetverbindung getrennt wurde?
Vielen Dank.
Wenn das der Fall gewesen wäre, hätten Sie gar keine Verbindung zum Server herstellen können, um das Skript auszuführen : )
Hallo
Keines dieser Skripte funktioniert bei mir!
Ich versuche, das Skript dazu zu bringen, mir zu sagen, ob mein Server online ist. Ich habe keine Domain, also verwende ich die IP (und manchmal einen Port).
Wenn ich die IP zu meinem Server eingegeben habe, wird gesagt, dass er online ist.
Auch; wenn ich den Server abschalte, wird er immer noch als online angezeigt…
Wie kann ich das beheben? Irgendwelche Ideen?
– Mystic
Das ist eine gute Technik und eine sehr ähnliche Technik wird hier gepostet: http://geeks-wiki.blogspot.com/2012/10/how-to-check-if-url-is-up.html, ich denke, diese Technik ist ähnlich und dennoch effektiv.
Beste Grüße,
Patrick
Danke
Es ist ein sehr nützlicher Trick #2
Es löst mein Problem mit dem Überprüfen von 500 URLs gleichzeitig
So schwer :D Danke
Ich habe die Situation, dass die URL zu einer anderen toten URL weiterleitet. Wie kann ich diese Art von Fehlern überprüfen?
Ich habe mit Technik 1 begonnen und einige Links wurden nicht richtig gemeldet, also habe ich Technik 2 hinzugefügt und die *Kombination* scheint gut zu funktionieren
„Availible“ ist kein Wort.
Es ist ein Wort
Grammar Police, das ist eine falsche Verhaftung! „Availible“ ist kein Grammatikfehler, also hast du keine Zuständigkeit.
Tippfehlerpolizei, Ruhe bewahren; Rechtschreibpolizei, verhaften Sie diesen Straftäter sofort!
Die gegebenen Skripte sind sehr nützlich. Ich habe nach einem solchen Skript gesucht, um zu prüfen, ob die Website live ist oder nicht. Aber vielleicht ein paar weitere Dinge, wenn Sie hinzufügen können. Einige Websites sind online, aber geparkt. Gibt es eine Möglichkeit, das zu prüfen? Websites sind richtig auf dem Server gehostet und nicht geparkt.
Hmm… keine der obigen Methoden funktioniert bei mir? aka
Methode 1 und 2 geben immer True zurück und die 3. wirft Fehler wie ein Boss.
EDIT: Methode 2 funktioniert, aber sie ist für mich invertiert (True -> DOWN, False -> UP)… fragen Sie mich nicht warum
Hallo Leute..
Ich denke, benutzen Sie einfach diesen hier..
http://www.phpservermonitor.org/
Dies kann nur sagen, ob der Server erreichbar oder nicht erreichbar ist
Kann aber nicht wirklich sagen, ob die Website nicht erreichbar ist, gesperrt, 500 Fehler und so weiter
Ich sehe hier viele Leute mit Problemen.
Seien Sie sicher, dass Sie, wenn Sie Beispiel zwei verwenden, NetHawks Kommentar beachten, um 200<=$httpcode<400 zu machen.
Außerdem ist es gute Praxis, Funktionen mit einem Kleinbuchstaben am Anfang zu deklarieren.
Viel Liebe für CSS Tricks hier.
Curtis
Ich habe ein Formular, in dem die Website angegeben werden muss. Wir müssen prüfen, ob die Website gültig ist oder nicht. Wo soll ich die Codes einbetten? Das heißt, bei #1 muss die URL manuell eingegeben werden. Aber ich brauche es automatisch. Wie soll ich das machen?
Ich habe getestet und Sie haben absolut Recht, aber ich hatte Zweifel. Diese Skripte werden für eine Domain verwendet. Aber ich muss wissen, ob 50 Domains gleichzeitig funktionieren oder nicht.
Bitte antworten
Hallo,
Zunächst einmal vielen Dank für die Skripte. Sie sind sehr nützlich.
Ich habe Ihr Skript #1 auf einer Website verwendet, um zu prüfen, ob eine bekannte JSON-Quelle verfügbar war und andernfalls zu einem Backup wechseln. Ich habe die 300er-Antwort nicht auf 400 geändert, wie oben erwähnt, da beide Websites mir bekannt sind und von mir kontrolliert werden, also nicht weitergeleitet werden.
Das Problem, das ich neulich hatte, war, dass ein AWS-Server hing. Ich fand heraus, dass die Verbindung hergestellt wurde, da dieses Skript CURLOPT_CONNECTTIMEOUT verwendet, und das Skript blieb dann einfach offen und wartete auf eine Antwort. Da die Website immer mehr Seiten geöffnet hatte, füllte sich der PHP-Speicher und die Website ging schließlich offline. Sobald ich den AWS-Server ausgeschaltet hatte, behandelte das Skript die Antwort wie vorgesehen.
Danach habe ich nach einer Lösung für das Hängen des Servers gesucht. Ich habe eine Testseite basierend auf Ihrem Skript #2 (aus irgendeinem Grund funktioniert #1 auf dieser Website nicht). Ich habe gerade die mittlere Zeile unten hinzugefügt: –
$agent = “Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)”;$ch=curl_init();
curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT_MS,500);
curl_setopt ($ch, CURLOPT_URL,$url );
Ist die Verwendung von $curlInit korrekt in Verbindung mit den $ch-Zeilen?
Mit Skript #1, könnte ich die
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 2000);
oder sollte ich es so machen: –
curl_setopt($curlInit, CURLOPT_TIMEOUT_MS, 2000);
Schließlich kann ich den Server leicht testen, indem ich ihn in der EC2-Konsole ausschalte, aber wissen Sie, wie ich testen kann, was passiert, wenn der Server hängt? Gibt es irgendwo einen „gut hängenden“ Server, mit dem ich mich zu Testzwecken verbinden kann?
Entschuldigung, so viele Fragen und so wenig Wissen meinerseits!
Sie können eine Online-Alternative verwenden >>>>https://downforeveryoneorjust.me/ zum Überprüfen