martin: Datei existiert

Hallo, mit file_exists() kann ich auf meinem Server überprüfen, ob eine Datei existiert. Wie kann ich aber überprüfen, ob die Datei auf einem fremden Server vorhanden ist (z.B. htto://www.max-mustermann.de/dateien/text.pdf)?
MfG martin

  1. Also das was ich jetzt schreibe ist nicht getestet...

    function file_exists_extern($url)
    {
     // Fake the browser type
     ini_set('user_agent','MSIE 4.0b2;');

    if($dh = fopen("$url",'r'))
        {
         fclose($dh);
         return TRUE;
        }
        return FALSE;
    }

    1. Also das was ich jetzt schreibe ist nicht getestet...

      function file_exists_extern($url)
      {
       // Fake the browser type
       ini_set('user_agent','MSIE 4.0b2;');

      if($dh = fopen("$url",'r'))
          {
           fclose($dh);
           return TRUE;
          }
          return FALSE;
      }

      Ups, fällt mir jetzt erst auf...
      Man sollte

      if($dh = @fopen("$url",'r'))

      machen, da sonst eine Fehlermeldung ausgegeben wird, wenn die Datei nicht existiert....

      Gruß

      P.S. Gibt's hier eigentlich eine Editier-Funktion und ich find' sie bloß nicht?

      1. Hallo, vielen Dank für die schnelle Antwort.
        Ich habe die Funktion verwendet und danach einen Dateidownload durchgeführt.
        Wenn die Datei existiert, dann  klappt alles wunderbar. Ansonsten wird die Fehlerseite des Servers downloaded und keine!!! Fehlermeldung ausgegeben.
        MfG martin

      2. Hallo,

        if($dh = @fopen("$url",'r'))

        für was sind die Anführungszeichen um $url?

        machen, da sonst eine Fehlermeldung ausgegeben wird, wenn die Datei nicht existiert....

        ich würde das ganze auch nicht mir fopen machen, sondern mit fsockopen versuchen eine Verbindung aufzubauen (siehe die Benutzerkommentare auf http://www.php.net/file_exists).

        P.S. Gibt's hier eigentlich eine Editier-Funktion

        nein, die gibt es hier nicht.

        Grüße aus Nürnberg
        Tobias

    2. Hallo,

      unabhängig davon, ob es funktionieren wird.
      Einen kleinen Verbesserungsvorschlag habe ich (ohne klugscheissern zu wollen).
      Ich habe die Erfahrung gemacht, dass es besser ist in einer Funktion _ein_ "return" zu haben.

      function file_exists_extern($url)
      {
        $answer = FALSE;
       // Fake the browser type
       ini_set('user_agent','MSIE 4.0b2;');

      if($dh = fopen("$url",'r'))
          {
           fclose($dh);
           $answer = TRUE;
          }

      return $answer;
      }

      Gruss,
      Turtle

      1. Hallo Turtle!

        Ich habe die Erfahrung gemacht, dass es besser ist in einer Funktion _ein_ "return" zu haben.

        Wieso?

        function file_exists_extern($url)
        {
          $answer = FALSE;
        [...]

        Deine modifizierte Version ist eigentlich ineffizienter als das ursprüngliche, da du eine Variable mehr verwendest -- also mehr Resourcen verbrauchst.

        Gut, bei nur einer booleanischen Varibalen ist das vielleicht kein Argument, aber ansonsten kann ich kein Vorteil erkennen, nur ein "return" zu verwenden.

        Übersichtlicher macht deine Version den Quellcode auch nicht, da er ja länger ist.

        Funktional sind sie aber beide gleichwertig.

        1. Hallo Turtle!

          Ich habe die Erfahrung gemacht, dass es besser ist in einer Funktion _ein_ "return" zu haben.

          Wieso?

          Eine Funktion sollte an einer Stelle den return haben, weil es - finde ich - bei grossen Funktionen einfach übersichtlicher, kompakter und "schöner" ist.

          So hat die Funktion _einen_ Einstieg und einen _Ausstieg_.

          Was ist eine mainung dazu?

          Gruss,
          Turtle

          1. Hallo Turtle!

            Eine Funktion sollte an einer Stelle den return haben, weil es - finde ich - bei grossen Funktionen einfach übersichtlicher, kompakter und "schöner" ist.

            So hat die Funktion _einen_ Einstieg und einen _Ausstieg_.

            Was ist eine mainung dazu?

            Das ist aber nur eine Seite. Prinzipell ist es schon gut, wenn eine Funktion am Ende mit _einem_ Return endet und bringt ersteimal eine verbesserte Übersicht. Aber wenn man dies so praktiziert, so muss man mit zusätzlichen Varibalen arbeiten, die wiederum die Übersicht etwas verschlechtert und zu dem zusätzlich Resourchen verbraucht -- wenn auch nur marginal mehr.

            Letztendlich ist es sicherlich Geschmackssache bzw. hängt von dem eigenen Programmierstil ab.

            Meine Philosophie bei Programmen ist die Efizientheit und die vermeidung von zusätzlichen Variablen oder Code-Zeilen mit ausreichenden Kommentaren.

            Bei den Systemen bzw. bei der Hardware die heutzutage zur Verfügung stehen ist der Resourchenverbrauch bzw. die Rechenzeit eigentlich nicht mehr ausschlaggebend. Es sei den, es muss eben für diese Faktoren gezahlt werden oder die Applikation erfordert eine hohe Verfügbarkeit oder sie wird stark ausgelastet.

            Web-Anwendungen können eben die letzten beiden Faktoren u.U. erfüllen -- Anspruch auf hohe Verfügbarkeit bei gleichzeitiger hoher Auslastung...

            Aber das schweift jetzt etwas ab und trifft auch wohl eher nicht auf das Anwendungsbeispiel zu.

            1. Hi,

              aber trotzdem interessant.
              danke

              Turtle