Prob mit Befehl: file_exists

Hi an alle,

ich habe da ein kleines Problem. Und zwar soll mein Programm erst prüfen ob eine Seite existiert, und falls sie existiert, soll diese Seite mit „fopen“ geöffnet werden:

$url = „http://www.test.de/test/test.php“;
if(file_exists($url))
{
$offen = fopen("$url", „r“);
}

Leider scheint der Befehl „file_exists“ mit URLs nicht zu funktionieren. Der „fopen“ Befehl funzt allerdings ohne Probs mit URLs. Gibt vielleicht einen äquivalenten Befehl, der auch für die URLs funzt???

Hi,

$url = „http://www.test.de/test/test.php“;

wie Du schon richtig bemerkst, handelt es sich hierbei um eine URL,

if(file_exists($url))

nicht um eine Datei. Eine Prüfung auf Datei-Existenz ergibt also keinen Sinn.

Da der Host „www.test.de“ existiert und auf Port 80 ein HTTP-Server lauscht, bekommst Du übrigens auch tatsächlich ein Ergebnis von diesem. Es handelt sich dabei um eine Fehlerseite. Ist das aus Deiner Sicht ein „exists == true“? Aus HTTP-Sicht ist es das nämlich.

Leider scheint der Befehl „file_exists“ mit URLs nicht zu
funktionieren.

Wieso „leider“? Es ist schon schlimm genug, dass fopen() mit URLs umgehen kann - das führt nur, wie man an Dir sieht, zu vollkommen falschen Annahmen.

Ressource != Datei. Dateioperationen lassen sich auf Ressourcen nicht anwenden. Es sind zwei unterschiedliche Universen, die nicht vergleichbar sind.

Gibt vielleicht einen äquivalenten Befehl, der auch
für die URLs

Benutze die curl-Funktionen, um auf Ressourcen zuzugreifen. Lies den HTTP-Header, bewerte den Status der Antwort.

funzt???

Das Wort heißt „funktioniert“, und Fragen werden mit _einem_ Fragezeichen beendet.

Cheatah

Danke für die Antwort und die Nachhilfe in deutscher Grammatik :stuck_out_tongue:

Hallo,

natürlich kannst Du Internetseiten wie normale Dateien öffnen. Warum genau file_exists anscheinend nicht funktioniert, kann ich Dir nicht sagen. Ein ähnliches Ergebnis erreichst Du aber mit folgendem Vorgehen:

  1. $fp = @fopen($url,„r“); // [Die Variable $url muss nicht in „“ gesetzt werden!] - Durch das @ vermeidest Du Fehlermeldungen.

  2. if($fp) { weiterer Code, wenn Seite abrufbar…, wie bei Dateien; }

Und schon ist Dir bekannt, ob die DATEI existiert…

Hi,

natürlich kannst Du Internetseiten wie normale Dateien öffnen.

das ist nicht natürlich, sondern abnorm. Ressourcen haben mit Dateien nichts gemein; vielleicht davon abgesehen, dass auch sie Bytes beinhalten.

Und schon ist Dir bekannt, ob die DATEI existiert…

Woher willst Du wissen, ob es sich auf dem fremden Server um eine Datei gehandelt hat? Das kannst Du mit FTP herausfinden, nicht aber mit HTTP.

Cheatah

Hallo,

Dein Hinweis auf das FTP-Protokoll ist natürlich vorausgesetzt.
Schließlich ist jede Meldung, die vom fremden Server an das
fragende PHP-Skript gesandt wird, im Endeffekt ein Skriptfehler
oder sturkturell eine Datei. Der Skriptfehler wird per @
ausgeschaltet. Daß keine Quelldateien geöffnet werden, sondern
immer nur per GET über das HTTP-Protokoll vom Server schon
bearbeitete Daten, dürfte klar sein. Aber daß ist schließlich bei
jedem HTTP-Prozeß so.

Grüße,
Tobias