URL aus Datenbank auf Erreichbarkeit prüfen (on-/off-Bild)

Hangrefer

Mitglied
Ja kollegen, ich bin am rätzeln. Ich möchte gerne mehrere url´s aus der datenbank auf erreichbarkeit prüfen.

dazu habe ich volgendes

Prüfung auf erreichbarkeit
Code:
$fp = @fsockopen ($kunden_website,80,$errno,$errstr,2);   
  if (!$fp) {
   $onoffline = "Offline";   
   }else{   
   $onoffline = "online";   
  fclose($fp);   
  }


while schleife

Code:
$result = $db->query("SELECT * FROM bb".$n."_kundenlist ORDER BY kunden_id ASC");
	while($row = $db->fetch_array($result)){
	
		$kunden_id = $row['kunden_id'];
}
$kunde_website, ergibt sich aus der while schleife. Nur weis ich leider nicht, wie ich das hin bekomme das er das auch prüft. Den derzeit habe ich komischer weise alles ONLINE obwohl absichtlich eine url eingegeben habe in der Datenbank die nicht existiert.

kann mir da einer weiterhelfen?

Mfg...Hangrefer
 
Ist es Möglich das du uns die Adresse sagst, welche Offline seien soll?
Was du machst ist eine Verbindung zum Server herzustellen, die in der Regel so gut wie immer klappt. Vielleicht solltest du noch den Header auslesen und den Statuscode prüfen. Beginnt dieser mit einer 4, einer 5 oder ist nicht gegeben dann würde ich die Seite als nicht erreichbar einstufen. 3 Statuscodes müsste man allerdings verfolgen um zu ob die Seite erreichbar ist.

Wenn du die Möglichkeit hast eine Erweiterung zu PHP hinzuzufügen, geht das sehr leicht mit diesem hier:
http://de.php.net/manual/en/book.http.php
http://de.php.net/manual/en/function.http-get.php
http://de.php.net/manual/en/http.request.options.php
 
Die Adressen die er prüfe soll, sollen alles aus der variable $kunden_wensite geholt werden. Den die stehe alle in der Datenbank.

gibt es also keine möglichkeit, den code zum prüfen mit der while schleife zu verbinden? oder muss es so kompliziert gemacht werden? ich möchte die Adresse ja nicht manuell in die php eingeben müssen. Sondern das er diese aus der Datenbank holt. DAS klappt ja schon fast, aber dennoch steht überall ONLINE obwohl ich eine der Adressen absichtlich falsch in der Db abgelegt habe

Mfg..Hangman
 
Die Adressen die er prüfe soll, sollen alles aus der variable $kunden_wensite geholt werden. Den die stehe alle in der Datenbank.

Ist es Möglich das du uns die Adresse sagst, welche Offline seien soll?
Wenn nicht dann lassen wir die hier behandelte URL einmal http://www.hangrefer.eu sein.

gibt es also keine möglichkeit, den code zum prüfen mit der while schleife zu verbinden? oder muss es so kompliziert gemacht werden?

Doch gibt es und es ist nicht kompliziert.
Vielleicht solltest du noch den Header auslesen und den Statuscode prüfen.

muss es so kompliziert gemacht werden?

Es ist doch nur den sogenannten Header auslesen, Statuscode auslesen und prüfen:
Beginnt dieser mit einer 4, einer 5 oder ist nicht gegeben dann würde ich die Seite als nicht erreichbar einstufen. 3 Statuscodes müsste man allerdings verfolgen um zu ob die Seite erreichbar ist.


ich möchte die Adresse ja nicht manuell in die php eingeben müssen. Sondern das er diese aus der Datenbank holt. DAS klappt ja schon fast, aber dennoch steht überall ONLINE obwohl ich eine der Adressen absichtlich falsch in der Db abgelegt habe

Gut dann führe ich dich jetzt an die Lösung heran:
Lies dir das erste Beispiel (dort: "Example") bei fsockopen auf php.net an (http://de.php.net/manual/en/function.fsockopen.php) und wende es zunächst auf die hier behandelte URL (siehe oben) an.
Statt einem GET wie es dort steht schreibt du ein HEAD.
Und statt der Ausgabe per echo schreibst du es in eine Variable ($var = ...).
Diesen Ansatz zeigst du dann bitte.

Und dazu auch die Ausgabe für die obige URL und/oder eine weitere Ausgabe für eine Adresse deiner Wahl.
 
Zuletzt bearbeitet:
Oki, ich war arbeiten... Jetzt habe ich deinen Beitrag gelesen, und denke auch fast verstanden. Ich teste das nun gleich auch einmal aus, und berichte dir dann was raus gekommen ist. Bis hierher danke ich dir recht herzlich!....


Edit: 03.05.2009

also habe das nun mal testen können. Er gibt mir nichts aus. Lediglich wenn ich das echo lasse zeigt der mir was (keine Fehlermeldung). Dies ist aber auch nicht ONLINE oder OFFLINE. Aber wenn ich eine Variabel vergebe, ist nicht zu sehen.

hier das habe ich gemacht?!.. ist doch richtig oder?

Code:
$fp = fsockopen("www.hangrefer.eu", 80, $errno, $errstr, 5);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "HEAD / HTTP/1.1\r\n";
    $out .= "Host: www.hangrefer.eu\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        $onoffline = fgets($fp, 128);
    }
    fclose($fp);
}
Mfg...Hangrefer
 
Zuletzt bearbeitet:
also ich habe jetzt mal $onoffline wieder nur in echo gemacht. Ausgeben tut er mir dies hier


HTTP/1.1 200 OK Date: Wed, 06 May 2009 19:06:29 GMT Server: Apache/2.2.4 (Linux/SUSE) X-Powered-By: PHP/5.2.4 Connection: close Content-Type: text/html HTTP/1.1 200 OK Date: Wed, 06 May 2009 19:06:29 GMT Server: Apache/2.2.4 (Linux/SUSE) X-Powered-By: PHP/5.2.4 Connection: close Content-Type: text/html HTTP/1.1 200 OK Date: Wed, 06 May 2009 19:06:29 GMT Server: Apache/2.2.4 (Linux/SUSE) X-Powered-By: PHP/5.2.4 Connection: close Content-Type: text/htm

Mit echo $onoffline; ggeht garnichts. Versucht habe ich auch nur $onoffline =" Online"; und das selbe nur in offline.

Hier ist mal mein gesammter versuch.

PHP:
	$result = $db->query("SELECT * FROM bb".$n."_kundenlist");
	while($row = $db->fetch_array($result)){

           $kunden_website = $row['kunden_website'];

$fp = fsockopen($row['kunden_website'], 80, $errno, $errstr, 5);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "HEAD / HTTP/1.1\r\n";
    $out .= "Host: ".$row['kunden_website']."\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        $onoffline = fgets($fp, 128);
    }
    fclose($fp);
}

So habe ich das im Moment. Aber geht leider nicht wie ich will^^...
den dann gibt der mir was Fahlerhaftes aus....

Warning: fsockopen() [function.fsockopen]: unable to connect to http://www.google.de:80 (Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?) in /var/www/web44/html/codebase/acp/kundenlist.php on line 33
Unable to find the socket transport "http" - did you forget to enable it when you configured PHP? (-1222790701)


das http://www.google.de, ZIEHT der sich aus der datenbank. Also das scheint ja zu Funktionieren das der sich die Adresse aus der Db holt. Nur mit dem HTTP:// hat der probleme. Ist http:// vor einer url dann ist die immer offline. Ist aber kein Http:// davor ist die seite ONLINE aber auch dann ONLINE, wenn es die adresse ja nichtmal gibt!.. Woran liegt das den nun wieder?
 
Zuletzt bearbeitet:
das HTTP-Protokoll wird von fsockopen nicht unterstützt, was auch die Fehlermeldung besagt.
Wenn du das http:// weglässt, wird das Standardprotokoll verwendet(TCP) verwendet...weswegen es dann auch funktioniert.

Warum da dann immer ONLINE steht, lässt sich nur sagen, wenn man sieht, wo du dieses "Online" ausgibst...was derzeit nicht zu Erkennen ist.
 
Zurück