Hallo,
ich möchte ein Script schreiben, welches meine mysql DB nach Links durchforstet und überprüft ob die Links "tot" sind oder nicht.
Die Ausgabe soll so aussehen, dass wenn eine Linküberprüfung "200" ergibt (Link ok), ein einfaches "(Linkname) ist ok" für diesen Link ausgegeben wird.
Ansonsten (wenn die Rückmeldung != 200) soll "(Linkname) ist tot" ausgegeben werden.
Ich bin auf den Linkchecker von Patrick Faes gestoßen und habe ihn etwas verändert. Patrick Faes hatte in seinem Skript vorgesehen, dass der Linkchecker nicht nur "checkt", sondern auch fehlerhafte Links selbst behebt und ggf. sogar löscht. Das war mir etwas zuviel, daher die von mir geplante Abweichung auf ein Script, dass lediglich überprüft und die Resultate ausgibt.
Mein Code sieht bislang so aus:
Damit habe ich nun zwei Probleme.
1)
Wenn ich das Script laufen lasse, bekomme ich folgende Fehlermeldung:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/web2/html/Sonstiges/linkchecker.php on line 7
Der Fehler soll also hier liegen:
while(list($id,$url)=mysql_fetch_row($result))
2)
Euch ist sicher aufgefallen, dass die beiden Cases 0 und 1 nicht den aktuell überprüften Linknamen ausgeben, sondern nur "Link ist ok/tot". Wie müßte ich das verändern um z.B. die Ausgabe zu erzeugen: "www.testtest.de/test/index.html ist ok"?
Für Hilfe bin ich sehr dankbar.
ich möchte ein Script schreiben, welches meine mysql DB nach Links durchforstet und überprüft ob die Links "tot" sind oder nicht.
Die Ausgabe soll so aussehen, dass wenn eine Linküberprüfung "200" ergibt (Link ok), ein einfaches "(Linkname) ist ok" für diesen Link ausgegeben wird.
Ansonsten (wenn die Rückmeldung != 200) soll "(Linkname) ist tot" ausgegeben werden.
Ich bin auf den Linkchecker von Patrick Faes gestoßen und habe ihn etwas verändert. Patrick Faes hatte in seinem Skript vorgesehen, dass der Linkchecker nicht nur "checkt", sondern auch fehlerhafte Links selbst behebt und ggf. sogar löscht. Das war mir etwas zuviel, daher die von mir geplante Abweichung auf ein Script, dass lediglich überprüft und die Resultate ausgibt.
Mein Code sieht bislang so aus:
PHP-Code:
<?php
$db = mysql_connect('host','user','pw');
mysql_select_db('dbname',$db);
$result = mysql_query('select id,uri from tabellenname');
while(list($id,$url)=mysql_fetch_row($result))
{
$test = 0;
$parts = parse_url($uri);
$fp = fsockopen($parts["host"],$parts["port"],$errno,$errstr,30); // wenn man den Port am Link schreibt
if (substr($uri,0,4) == 'http') {$port = 80;} // wenn man den Port nicht am Link schreibt
$fp = fsockopen($uri,$port); // und der Port variiert
if (!$fp)
{
$test = 1;
}
else
{
if (!empty($url_parts["path"])) {$documentpath = $url_parts["path"];}
else {$documentpath = "/";}
if (!empty($url_parts["query"])) $documentpath .= "?" . $url_parts["query"];
$host = $parts["host"];
fwrite ($fp, "HEAD ".$documentpath." HTTP/1.0\r\nHost: $host\r\n\r\n");
$antwort = fgets($fp, 40);
if ( eregi('200 OK',$antwort) ) {$test = 0;}
else {$test = 1;}
}
switch($test)
{
case '0':
echo "Link ist ok.";
case '1':
echo "Link ist tot.";
}
fclose($fp);
}
mysql_close($db);
?>
1)
Wenn ich das Script laufen lasse, bekomme ich folgende Fehlermeldung:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/web2/html/Sonstiges/linkchecker.php on line 7
Der Fehler soll also hier liegen:
while(list($id,$url)=mysql_fetch_row($result))
2)
Euch ist sicher aufgefallen, dass die beiden Cases 0 und 1 nicht den aktuell überprüften Linknamen ausgeben, sondern nur "Link ist ok/tot". Wie müßte ich das verändern um z.B. die Ausgabe zu erzeugen: "www.testtest.de/test/index.html ist ok"?
Für Hilfe bin ich sehr dankbar.
Kommentar