Tobi: Prüfen ob eine externe Datei existiert oder leer ist.

Hallo,

ich will einen Link (mit PHP 4.3.x) auf meiner Webseite einfügen, der nur dann erscheint, wenn die verlinkte Datei vorhanden ist bzw. auch einen Inhalt hat.
Warum funktioniert dies nicht?

  
$url = "http://www.einedomain.de/datei.txt";  
$dateiinhalt = "";  
  
$vorhandenedatei = fopen ("$url", "r");  
$dateiinhalt = fgets($vorhandenedatei,8); //andere Möglichkeit?  
  
if (!$vorhandenedatei) {  
 print "<p>Die Datei &quot;".$url."&quot; konnte nicht ge&ouml;ffnet werden.</p>\n";  
}  
else {  
 print "Die Datei &quot;".$url."&quot; ist vorhanden.</p>\n";  
}  
  
# funktioniert nicht:  
if ($dateiinhalt > 0) {  
 echo "Datei mit Inhalt.<br />\n";  
}  
else {  
 echo "Datei ist leer.<br />\n";  
}  
fclose($vorhandenedatei);  

MfG.
Tobi

  1. Hi,

    Warum funktioniert dies nicht?

    weil hinter eine HTTP-URL keine Datei sitzt, sondern eine Ressource. Es existiert kein Grund anzunehmen, eine _file_open-Funktion würde diesbezüglich sinnvolle Ergebnisse erzielen. Für alles weitere reicht Deine Fehlerbeschreibung nicht aus; "funktioniert nicht" ist keine solche.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hello,

      weil hinter eine HTTP-URL keine Datei sitzt, sondern eine Ressource. Es existiert kein Grund anzunehmen, eine _file_open-Funktion würde diesbezüglich sinnvolle Ergebnisse erzielen. Für alles weitere reicht Deine Fehlerbeschreibung nicht aus; "funktioniert nicht" ist keine solche.

      Diese Antwort halte ich für sehr abgehoben.
      PHP ist eine mächtige Sprache und stellt auch Wrapper (Hüllfunktionen) für durchaus komplexe Zugriffsnethoden zur Verfügung. Es wäre daher auch denkbar, dass über eine solche "Wrapper-Function" auch das Vorhandensein eines "Inhalts" einer entfernten "Ressource" geprüft werden könnte.

      Deine Antwort kann sich daher nur auf den Status Quo beziehen, der aber weder logisch noch menschlich nachvollziehbar sein muss.

      Ich würde mir wünschen, dass auch Du dich manchmal selber hinterfragtest.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
    2. weil hinter eine HTTP-URL keine Datei sitzt, sondern eine Ressource. Es existiert kein Grund anzunehmen, eine _file_open-Funktion würde diesbezüglich sinnvolle Ergebnisse erzielen. Für alles weitere reicht Deine Fehlerbeschreibung nicht aus; "funktioniert nicht" ist keine solche.

      Hallo,
      leider kann ich als "PHP-Anfänger" mit Deiner Antwort nicht viel anfangen... :-(

      [code lang=php]
      ...

      funktioniert nicht:

      if ($dateiinhalt > 0) {
      echo "Datei mit Inhalt.<br />\n";
      }
      else {
      echo "Datei ist leer.<br />\n";
      ...
      [code]

      PHP zeigt mir immer "Datei ist leer." an.

      Dabei soll PHP nur feststellen, ob in der Datei ein Inhalt vorhanden ist oder nicht.

      MfG.
      Tobi

      1. Hi,

        ich jetzt folgende Lösung gefunden:

          
        if (strlen($dateiinhalt) > 0) {  
         # mach was ...  
        }  
        
        

        MfG.
        Tobi

  2. Hi,

    versuche es mit folgenden Funktionen:
    file_exists()
    filesize()

    MfG Hopsel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    1. Moin Hopsel,

      file_exists()

      schlechter Rat, ich hatte es dieser Tage erst gepostet:

      Anmerkung: Diese Funktion kann nicht mit entfernten Dateien arbeiten, da der Zugriff auf die Datei, die bearbeitet werden soll, über das Dateisystem des Servers möglich sein muss

      regds
      Mike©

      --
      Freunde kommen und gehen. Feinde sammeln sich an.
      1. Hi,

        Diese Funktion kann nicht mit entfernten Dateien arbeiten, da der Zugriff auf die Datei, die bearbeitet werden soll, über das Dateisystem des Servers möglich sein muss

        was sind "entfernte Dateien"? Wenn ich auf eine Datei zugreife, kann ich doch davon ausgehen, solange sie existiert, dass das Dateisystem des Servers ebenfalls Zugriff hat, oder?

        Welche Funktion würdest du empfehlen?

        MfG Hopsel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        1. Moin Hopsel,

          was sind "entfernte Dateien"? Wenn ich auf eine Datei zugreife, kann ich doch davon ausgehen, solange sie existiert, dass das Dateisystem des Servers ebenfalls Zugriff hat, oder?

          das sind Dateien welche nicht auf dem gleichen Server liegen wie das PHP Script.

          Welche Funktion würdest du empfehlen?

          Ich würde es mit fopen() versuchen.

          regds
          Mike©

          --
          Freunde kommen und gehen. Feinde sammeln sich an.
    2. file_exists()

      filesize()

      Hallo!

      Danke für die Hilfe, jedoch funktioniert dies -wie von Mike beschrieben- nicht mit externen Dateien.

      MfG.
      Tobi

  3. Hallo,

    wenn die externe Datei nicht existiert bekomme ich diese Fehlermeldungen:

    Warning: fopen(): HTTP request failed! HTTP/1.1 404 in ...
    Warning: fopen(http://...): failed to open stream: No error in ....php on line ...
    Warning: fgets(): supplied argument is not a valid stream resource in ....php on line ...

    mit einem @ kann ich die Meldungen unterdrücken...
    Wie kann ich dieses Problem besserer lösen?

    MfG.
    Tobi

    1. Moin Tobi,

      wenn die externe Datei nicht existiert bekomme ich diese Fehlermeldungen:

      Warning: fopen(): HTTP request failed! HTTP/1.1 404 in ...
      Warning: fopen(http://...): failed to open stream: No error in ....php on line ...
      Warning: fgets(): supplied argument is not a valid stream resource in ....php on line ...

      du kannst prüfen ob ein gültiges Dateihandel erstellt werden konnte.

      $pointer=@fopen($Request_URL,"r");

      if ( $pointer )
         # Tu was
      else
         # das wir nix

      regds
      Mike©

      --
      Freunde kommen und gehen. Feinde sammeln sich an.