Ankündigung

Einklappen
Keine Ankündigung bisher.

suche Funktion "überprüfe ob Link erreichbar ist"

Einklappen

Neue Werbung 2019

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

  • #31
    Zitat von jspit Beitrag anzeigen
    Wetterfrosch
    Dann reicht wohl ein Timeout für file_get_contents zu setzen:
    PHP-Code:
    $url "http://tgftp.nws.noaa.gov/data/observations/metar/stations/LFSB.TXT";

    $context stream_context_create(
    array(
    'http' => array('timeout' => 2// Timeout in seconds
    )
    )
    ;

    $content = @file_get_contents($url,false,$context);
    if(
    $content === false) {
    echo 
    'Datei auf Server nicht verfügbar';
    } else {
    //weiterverarbeiten
    var_dump($content);

    Ausgabe:
    string( 68 ) "2018/05/29 13:00 LFSB 291300Z VRB02KT 9999 SCT033 23/13 Q1015 NOSIG "

    Es ist übrigens ein string den du bekommst, kein Array.
    Und wie bei all solchen Abragen an fremde Server bietet sich an, die Antworten zu cachen (zu speichern).
    Dann wird das bei häufigen Zugriffen schneller und du kannst bei kurzen Ausfällen auf eine kürzlich gespeicherte Antwort zurückgreifen.

    BlackScorp : Das true hab ich übersehen. Macht das aber nicht einfacher.
    Danke für das Script, werde es gleich mal anpassen und einbauen.
    frage:
    Wenn ich die if/Else Abfrage anders herum haben möchte, kann ich das dann so schreiben:

    PHP-Code:
    if($content != false) {
    //weiterverarbeiten
    } else {
    echo 
    'Datei auf Server nicht verfügbar';

    oder muss ich das "ungleich" so setzten !== ?

    Bezüglich Cache,

    ich lade den Inhalt der TXT-Datei beim Aufruf in einen Cache und dieser wird nur alle 30 Minuten erneuert, d.h. wenn Cache beim Aufruf älter als 30 Minuten ist, wird TXT-Datei neu abgefragt.

    Kommentar


    • #32
      PHP-Code:
      if($content != false
      wenn etwas nicht false ist dann ist es true, demnach
      PHP-Code:
      if($content == true
      was man dann vereinfacht zu
      PHP-Code:
      if($content
      kürzen kann.

      Kommentar


      • #33
        Ich Dummerle, darauf hätte ich auch selber kommen, wenn ich schreibe wenn etwas NICHT false ist dann ist es natürlich true, sorry für die blöde Frage.

        Kommentar


        • #34
          Zitat von Wetterfrosch Beitrag anzeigen

          frage:
          Wenn ich die if/Else Abfrage anders herum haben möchte, kann ich das dann so schreiben:

          PHP-Code:
          if($content != false) {
          //weiterverarbeiten
          } else {
          echo 
          'Datei auf Server nicht verfügbar';

          oder muss ich das "ungleich" so setzten !== ?
          Nimm besser einen typsicheren Vergleich für einen solchen Fall, also besser
          PHP-Code:
          if($content !== false) {
          //weiterverarbeiten
          } else {
          echo 
          'Datei auf Server nicht verfügbar';

          file_get_contents() liefert im Erfolgsfall einen String und du weist nicht immer was da drin steht. Der Inhalt kann beim typschwachen Vergleich (!=) wenn du Pech hast auch als false gewertet werden.
          Im Fehlerfall liefert file_get_contents() ein bool(false) zurück. Deshalb hier immer typsicher vergleichen!

          Zitat von Wetterfrosch Beitrag anzeigen

          Bezüglich Cache,

          ich lade den Inhalt der TXT-Datei beim Aufruf in einen Cache und dieser wird nur alle 30 Minuten erneuert, d.h. wenn Cache beim Aufruf älter als 30 Minuten ist, wird TXT-Datei neu abgefragt.
          Das ist ok so !

          Kommentar


          • #35
            file_get_contents() liefert im Erfolgsfall einen String und du weist nicht immer was da drin steht. Der Inhalt kann beim typschwachen Vergleich (!=) wenn du Pech hast auch als false gewertet werden.
            Im Fehlerfall liefert file_get_contents() ein bool(false) zurück. Deshalb hier immer typsicher vergleichen!
            ist jetzt echt komisch, habe die if/else Bedingung mit true anstatt mit "nicht else" geschrieben, doch wenn ich das so umsetze wie du schreibst, dann liefert mir das Script false anstatt true als Ergebnis:

            PHP-Code:
            if($content === true) {
            //weiterverarbeiten
            } else {
            echo 
            'Datei auf Server nicht verfügbar'// diese Meldung wird mir angezeigt, obwohl Datei auf dem Server erreichbar ist

            gebe ich es jedoch nur mit 2x = ein, dann funktioniert die Bedingung, d.h. wenn Link erreichbar, dann wird true ausgegeben, wenn nicht erreichbar kommt false:

            PHP-Code:
            if($content == true) {
            //weiterverarbeiten
            } else {
            echo 
            'Datei auf Server nicht verfügbar';

            Also es ist somit genau umgekehrt wie du geschrieben hast, kann das sein?

            Kommentar


            • #36
              jspit hat doch geschrieben "!==". file_get_contents gibt niemals true zurück, weswegen du !== schreiben musst.

              Kommentar


              • #37
                ok, das mit dem true habe ich nur deswegen gemacht, weil man mir es weiter oben hier im Thread so erklärt hatte, gugst du:

                Zitat von protestix Beitrag anzeigen
                PHP-Code:
                if($content != false
                wenn etwas nicht false ist dann ist es true, demnach
                PHP-Code:
                if($content == true
                was man dann vereinfacht zu
                PHP-Code:
                if($content
                kürzen kann.

                Kommentar


                • #38
                  Gemeint ist hier etwas anderes.
                  Es stimmt zwar was ich geschrieben habe, aber manche Funktionen geben 0 als auch FALSE zurück.
                  In diesem Fall muss man auf striktem Vergleich bestehen, da sonst 0 zu FALSE ausgewertet wird und dies zu unerwarteten Ergebnissen führen kann.

                  Also statt $content != false dann besser $content!== false.

                  Mehr unter http://php.net/manual/de/language.types.boolean.php

                  Kommentar

                  Lädt...
                  X