Problem mit Linkchecker-Script

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Linkchecker-Script

    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:
    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($fp40);

            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);
    ?>
    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.
    Zuletzt geändert von Hatchetman; 09.04.2006, 15:08.

  • #2
    Re: Problem mit Linkchecker-Script

    Original geschrieben von Hatchetman
    Der Fehler soll also hier liegen:

    while(list($id,$url)=mysql_fetch_row($result))
    http://www.php-resource.de/forum/sho...threadid=50454

    Wie müßte ich das verändern um z.B. die Ausgabe zu erzeugen: "www.testtest.de/test/index.html ist ok"?
    Die URLs liest du doch weiter oben aus der DB aus ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: Problem mit Linkchecker-Script

      Original geschrieben von Hatchetman
      Der Fehler soll also hier liegen:

      while(list($id,$url)=mysql_fetch_row($result))
      Naja, beim scharfen Hinsehen bedeutet es ja nichts anderes, als das irgendwo in der While-Schleife der Fehler steckt. Und da die Funktion nur aus dieser einen While-Schleife besteht...

      Kommentar


      • #4
        PHP-Code:
        $result mysql_query('select id,uri from tabellenname'); 
        Was müßte in meinem Fall anstelle von

        PHP-Code:
        'select id,uri from tabellenname' 
        stehen?

        Das Problem mit dem Linknamen habe ich so versucht zu lösen:

        PHP-Code:
        switch($test)
                 {
                 case 
        '0':
                         echo 
        "$parts["path"] ist ok.";
                 case 
        '1':
                         echo 
        "$parts["path"] ist tot.";
                 } 
        Da das Script aber bislang nicht läuft konnte ich das noch nicht testen.
        Zuletzt geändert von Hatchetman; 09.04.2006, 16:21.

        Kommentar

        Lädt...
        X