Julian Hofmann: Abfrage, ob URL existiert

Hallo,

Meine Situation:
Aus einer Datenbank werden Linkdaten ausgelesen. Leider kommt es aber vor, daß die externen Link manchmal gar nicht mehr existieren.

Mein Problem:
Aus obigem Grund möchte ich vor der Ausgabe einen Linkcheck mit PHP ausführen lassen, nur habe ich keine Ahnung in welcher Richtung ich anfangen muß ein Script zu basteln. Hat jemand eine Idee?

Vielen Dank im voraus.

Grüße aus Bayreuth
Julian

  1. Hallo!

    Aus einer Datenbank werden Linkdaten ausgelesen. Leider kommt es aber vor, daß die externen Link manchmal gar nicht mehr existieren.

    Hinter jedem Link steht auch eine Datei. In PHP gibt es dafür eine Funktion, und zwar file_exists().
    http://www.php.net/manual/function.file-exists.php

    mfg, André Laugks

    1. Hallo André,

      das geht so nicht,

      ....Funktion, und zwar file_exists().
      [link:http://www.php.net/manual/function.file-exists.php]

      denn

      file_exists() will not work on remote files; the file to be examined must be accessible via the server's filesystem.

      gehen tut:
        if($fp=fopen("http://www.domain.de/seite.htm,"w"))
        {  echo "Seite da;
           fclose($fp);
        }

      Problem könnte werden, dass das recht lange dauern kann wenn der Server breit ist.

      Gruss,
      Carsten

      1. Hi,

        gehen tut:

        »»   if($fp=fopen("http://www.domain.de/seite.htm,"w"))
        »»   {  echo "Seite da;
        »»      fclose($fp);
        »»   }

        das loesst aber nciht das Problem eines 404 oder aehnlichen Fehlers, da in dem Fall auch eine HTML seite gesendet wird.

        mann muesste die zurueckgegebene Seite auf 404 Error oder Aehnliches untersuchen.

        Jan

        PS: eine instanloesung hab ich zu spaeter stunde leider nicht bereit, sorry

        1. Hi,

          das loesst aber nciht das Problem eines 404 oder aehnlichen Fehlers, da in dem Fall auch eine HTML seite gesendet wird.

          mann muesste die zurueckgegebene Seite auf 404 Error oder Aehnliches untersuchen.

          Nun, ich habe soetwas einmal in Perl programmiert. Dort kann man Requests schicken. Statt einem "GET"
          (wie beschrieben) zu schicken, der ja eine existierende Datei laden soll, und entsprechend eine Fehlerseite
          bringt, wenn die Datei eben nicht existiert, kann man einen "HEAD"-Request schicken. Wenn dieser
          erfolgreich ist, existiert die Seite/Datei.

          Was das jetzt hilfreich? Ich muß zugeben keine Ahnung von PHP zu haben...

          Gruß,
          Slyh

        2. Hallo Jan,

          erster Fehler:

          »»   if($fp=fopen("http://www.domain.de/seite.htm,"w"))

          r    !!

          das loesst aber nciht das Problem eines 404 oder aehnlichen Fehlers, da in
          dem Fall auch eine HTML seite gesendet wird.

          klar, nicht dran gedacht... also zu Fuss Header holen:

          function head($host,$loc)
          {
            $fp = fsockopen($host, 80, &$errno, &$errstr, 15);

          if($fp)
            {
              fputs($fp,"HEAD $loc HTTP/1.0\r\n");
              fputs($fp,"Host: $host\r\n");
              fputs($fp,"\r\n");

          while(!feof($fp))
              {
                $c=fgets($fp,128);

          if(strpos("~".$c,"HTTP")==1)
                  $status=0+substr($c,strpos($c," ")+1,3);
              }
              fclose($fp);

          if($status!=200)
                echo " Error! Status:$status Errno:$errno Errstr:$errstr\n";
              
              return $status;  // 200 =OK;  404 =not Found etc.
            }
            else
            {
              echo "No Connection to Host $host\n";
              return 0;
            }
          }

          geht bestimmt auch eleganter, ich hab das ausm Programm von mir rauskopiert
          und zusammengestrichen. (_so_ ungetestet, handelt keine redirects ...)

          Gruss,
          Carsten

        3. das loesst aber nciht das Problem eines 404 oder aehnlichen Fehlers, da in dem Fall auch eine HTML seite gesendet wird.

          mann muesste die zurueckgegebene Seite auf 404 Error oder Aehnliches untersuchen.

          Simpel, ich habe eine komplette PHP HTTP Bibliothek geschrieben, inklusive URI Parser. Leider bin ich zu faul eine Dokumentation zu schreiben, daher ist diese unveröffentlicht. Bei interesse, insbesondere zur konstruktiven Kritik, kann ich das, bei Anfrage per Mail, Interessierten zukommen lassen. Feedback ist allerdings Pflicht.

      2. Hallo!

        das geht so nicht,

        ....Funktion, und zwar file_exists().
        http://www.php.net/manual/function.file-exists.php

        denn

        file_exists() will not work on remote files; the file to be examined must be accessible via the server's filesystem.

        Ich dachte Du meintest innerhalb Deines Server bzw. URL, so eine Art Linkchecker, falls Du Referenzen gespeichert hast.. Wenn es sogar fremde Server sind, würde ich auf den Tipp vom Jan setzen.
        Hast Du mal in der FAQ http://www.koehntopp.de/php/ vom Köhntopp geschaut?

        mfg, André Laugks