Paul: fopen oder fsockopen

Moin moin.
Ich überprüfe, ob eine URL erreicht werden kann:

  if (!@fopen($url, 'r'))  
    die(ERROR_TEXT."Die URL \"<b>".$url."</b>\" konnte nicht erreicht werden!");

Nun meine Frage: ist hier fopen() oder fsockopen() besser geeignet?

Paul

  1. if (!@fopen($url, 'r'))

    die(ERROR_TEXT."Die URL "<b>".$url."</b>" konnte nicht erreicht werden!");

    
    >   
    > Nun meine Frage: ist hier fopen() oder fsockopen() besser geeignet?  
      
    fsockopen() - schlichtweg, weil allow\_url\_fopen oft aus ist.  
      
    Zudem ist deine Prüfung etwas mangelhaft da du ungeachtet des Statuscodes davon ausgehst, dass etwas erreichbar ist - egal ob da ein Error 500 oder sonstwas zurückkommt.  
      
    mit fsockopen() kannst du den Statuscode auch auswerten.
    
    1. Danke vielmals.

  2. Hello,

    Ich überprüfe, ob eine URL erreicht werden kann:

    if (!@fopen($url, 'r'))

    die(ERROR_TEXT."Die URL "<b>".$url."</b>" konnte nicht erreicht werden!");

    
    >   
    > Nun meine Frage: ist hier fopen() oder fsockopen() besser geeignet?  
      
    Hier wäre fsockopen() mit einem Head-Request und passend eingestellten Timeoffs sicher die passende Wahl. Wenn Du keinen Inhalt haben willst, dann brauchst Du den ja auch nicht abzufragen.  
      
    Allerdings solltest Du die Header auswerten. Wenn diese nämlich keinen Status 2xx liefern, könnte auch eine Umleitung auf der URL liegen. Dann müsstest Du eventuell nochmal nachfragen mit der neuen URL und das ggf. solange wiederholen, wie weiter Status 3xx kommt.  
      
      
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
  3. Hi!

    Ich überprüfe, ob eine URL erreicht werden kann:
    Nun meine Frage: ist hier fopen() oder fsockopen() besser geeignet?

    Mit fsockopen() allein kannst du keine URL prüfen, das baut nur Verbindungen zu Hosts auf. Da musst du noch einen HTTP-Request zusammenbauen, um gezielt auf ein Dokument zu kommen. Außerdem musst du das Ergebnis - eine vollständige Response inklusive HTTP-Header - auswerten. fopen() erledigt für dich die Arbeit mit den Request-Response-Headern. Auch file_get_contents() wäre dafür geeignet. Allerdings musst du bei beiden mit dem Stream-Kontext arbeiten, wenn du Metainformationen zum Request (z.B. den Statuscode) erhalten willst.

    Lo!