Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2005 Teil von April

SELFHTML Forumsarchiv
Test ob file existiert

Informationsseite
  1. Seite (PHP) Test ob file existiert von Fritz, 30. 04. 2005, 19:41
nach unten

Test ob file existiert

Die folgende Nachricht zum Thema stammt von: Fritz, 30. 04. 2005, 19:41

Hallo,

vorab schon mal die Bitte um Entschuldigung. Das Thema wurde hier und anderswo x-mal bahandelt.
Aber meine spezielle Frage konnte ich nirgends klären:

Ich prüfe auf die Erreichbarkeit eines URL mit:

$link = "http://www.example.com";
if ($handle = @fopen ($link, "rb")) {
   echo $link." existiert und ist erreichbar";
}
else {
   echo $link." nicht gefunden";
}

Soweit kein Problem.

Nun möchte ich auf die Erreichbarkeit einer bestimmten Datei prüfen.
Also:
$link = "http://de.selfhtml.org/schmarrn/kaese/butter.html";
Ergebnis:
http://de.selfhtml.org/schmarrn/kaese/butter.html nicht gefunden

Wunderbar, nicht anders erwartet.


Aber jetzt:
$link = "http://de3.php.net/schmarrn/kaese/butter.html";
Ergebnis:
http://de3.php.net/schmarrn/kaese/butter.html existiert und ist erreichbar

Hm???? Wieso denn das?

Bei verschiedenen Domains krieg ich entweder das eine, oder das andere Verhalten.

Hat jemand eine Erklärung dafür? (bin mir eigentlich fast sicher, daß ja ;-) Falls dem so ist: würder dieser jemand das hier bitte posten.



Gruß Fritz
--
ie:( br:> va:} ls:[ fo:| ss:{ de:] js:| ch:? zu:)
http://webdesign.weisshart.de

nach obennach unten

Test ob file existiert

Die folgende Nachricht zum Thema stammt von: Felix Riesterer, 30. 04. 2005, 20:25

Lieber Fritz,

genaueres weiß ich jetzt auch nicht, aber ich vermute etwas. Es wäre ja möglich, dass der HTTP-Request Deines Scripts beim Zielserver zwar "ins Leere" lief, der Server Dir aber ein gültiges Dokument ausgeliefert hat, ohne eine HTTP-Fehlernummer mit zu liefern. Damit ist für PHP das Dokument die angeforderte Seite, dein $handle bekommt eine gültige Resource und Dein Script liefert die beklagte Meldung.

Mach Doch mal einen Check, mit welcher HTTP-Header-Meldung besagte Käse-Seite an einen Browser ausgegeben wird!

Liebe Grüße aus Ellwangen,

Felix Riesterer.

nach obennach unten

Fehlerseite mit 200 ok

Die folgende Nachricht zum Thema stammt von: Fritz, 30. 04. 2005, 20:40

Hallo Felix,

»» genaueres weiß ich jetzt auch nicht, aber ich vermute etwas. Es wäre ja möglich, dass der HTTP-Request Deines Scripts beim Zielserver zwar "ins Leere" lief, der Server Dir aber ein gültiges Dokument ausgeliefert hat, ohne eine HTTP-Fehlernummer mit zu liefern. Damit ist für PHP das Dokument die angeforderte Seite, dein $handle bekommt eine gültige Resource und Dein Script liefert die beklagte Meldung.

Klar, das ist es: es wird eine Fehlerseite ausgegeben.
Und diese Fehlerseite schickt natürlich einen 200 ok mit.
Natürlich?
Da schließt sich die nächste Frage an:
Kann man Fehlerseiten so schreiben, daß ein 404 mitgegeben wird?


Gruß Fritz
--
ie:( br:> va:} ls:[ fo:| ss:{ de:] js:| ch:? zu:)
http://webdesign.weisshart.de

nach obennach unten

Fehlerseiten mit 404 not found ausliefern

Die folgende Nachricht zum Thema stammt von: Fritz, 30. 04. 2005, 20:51

Hallo,

»» Kann man Fehlerseiten so schreiben, daß ein 404 mitgegeben wird?

Hab zu schnell getippt/gefragt:
Natürlich kann man!
<?php
    header("HTTP/1.0 404 Not Found");
?>

Gruß Fritz
--
ie:( br:> va:} ls:[ fo:| ss:{ de:] js:| ch:? zu:)
http://webdesign.weisshart.de

nach obennach unten

Fehlerseiten mit 404 not found ausliefern

Die folgende Nachricht zum Thema stammt von: Candid Dauth, 30. 04. 2005, 23:32

Heißa, Fritz,

»» <?php
»»     header("HTTP/1.0 404 Not Found");
»» ?>


Besser:
<?php
  header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
?>


Sonst wechselst du die HTTP-Version. Ich weiß nicht genau, wie sich das dann auswirkt, aber ich kann es nicht leiden, wenn ich über telnet eine Seite per HTTP/1.0 anfordere und dann zum Beispiel HTTP/1.1 zurückbekomme. Also verwenden wir doch das, was angefordert wurde.



Caramba!
Grüße aus Biberach Riss,
Candid Dauth (ehemals Dogfish)

--
„Tue niemals etwas ausschließlich weil es jemand anderer tut – auch wenn dieser unter deiner tiefsten Verehrung steht.“ | Mein SelfCode

http://cdauth.de/

nach obennach unten

Fehlerseiten mit 404 not found ausliefern

Die folgende Nachricht zum Thema stammt von: Felix Riesterer, 30. 04. 2005, 23:46

Liebe(r) Candid Dauth,

»» Caramba!
<klugscheiss face="grins">Du weißt schon, dass das eben ein Fluch war?</klugscheiss>

Liebe Grüße aus Ellwangen,

Felix Riesterer.

nach obennach unten

Fehlerseiten mit 404 not found ausliefern

Die folgende Nachricht zum Thema stammt von: Candid Dauth, 01. 05. 2005, 00:25

Heißa, Felix,

»» <klugscheiss face="grins">Du weißt schon, dass das eben ein Fluch war?</klugscheiss>

Selbstverständlich weiß ich das. Aber irgendwie hat das so gut da hingepasst, das klingt so gut – „Heißa, Caramba“ ;-)

Ansonsten:
$kill = array (
  "whom" => "Felix",
  "cause" => "wrote unvalid HTML code ;-)"
);


Caramba!
Grüße aus Biberach Riss,
Candid Dauth (ehemals Dogfish)

--
„Tue niemals etwas ausschließlich weil es jemand anderer tut – auch wenn dieser unter deiner tiefsten Verehrung steht.“ | Mein SelfCode

http://cdauth.de/

nach obennach unten

Fehlerseiten mit 404 not found ausliefern

Die folgende Nachricht zum Thema stammt von: Felix Riesterer, 01. 05. 2005, 00:47

Lieber Biberacher,

»» „Heißa, Caramba“
Das erinnert mich an das Kinderlied "Heißa, Kathreinerle" ...

Liebe Grüße aus Ellwangen,

Felix Riesterer.

nach obennach unten

Test ob file existiert

Die folgende Nachricht zum Thema stammt von: Tom, 30. 04. 2005, 20:57

Hello,

du solltest Nur einen HEAD-Request senden oder einen OPTIONS-Request. Zweiterer wird aber nicht von jedem HTTP-Server beantwortet. Ein HEAD-Request gehört aber zum Standardumfang und wird mMn viel zu selten eingesetzt. Außerdem kannst Du dann das Timeout für das Öffnen der Ressource und das Timeout für den Erhalt von Inhalten einstellen und beachten. Zusätzlich könntest Du noch Rücksicht auf ein bestehendes Lock auf dem Zielserver nehmen, indem Du nicht auf die Freigabe der Ressource wartest, sondern die Fehlermeldung auswertest.

Die notwendigen Methoden hierfür sind alle im PHP-Manual beschrieben. Man muss zugegbenerweise etwas danach suchen.


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

Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau

nach obennach unten

Test ob file existiert

Die folgende Nachricht zum Thema stammt von: Fritz, 02. 05. 2005, 12:30

Hallo Tom,

danke für Deine Antwort

»» du solltest Nur einen HEAD-Request senden
»» Die notwendigen Methoden hierfür sind alle im PHP-Manual beschrieben. Man muss zugegbenerweise etwas danach suchen.

Meinst Du fsockopen() ?


Gruß Fritz
--
ie:( br:> va:} ls:[ fo:| ss:{ de:] js:| ch:? zu:)
http://webdesign.weisshart.de

nach obennach unten

Test ob file existiert

Die folgende Nachricht zum Thema stammt von: Tom, 02. 05. 2005, 14:27

Hello,

»» »» du solltest Nur einen HEAD-Request senden
»» »» Die notwendigen Methoden hierfür sind alle im PHP-Manual beschrieben. Man muss zugegbenerweise etwas danach suchen.
»»
»» Meinst Du fsockopen() ?

Ja, damit kann man das selber implementieren.
Es gibt aber vielleicht auch fertige Klassen dafür.


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

Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau

nach obennach unten

Test ob file existiert

Die folgende Nachricht zum Thema stammt von: MudGuard, 03. 05. 2005, 19:21

Hi,

»» Nun möchte ich auf die Erreichbarkeit einer bestimmten Datei prüfen.
»» Also:
»» $link = "http://de.selfhtml.org/schmarrn/kaese/butter.html";

Was jetzt? Eine Datei? Oder eine URL? http hat nichts mit Dateien zu tun.

»» http://de.selfhtml.org/schmarrn/kaese/butter.html nicht gefunden
»» Aber jetzt:
»» $link = "http://de3.php.net/schmarrn/kaese/butter.html";
»» Ergebnis:
»» http://de3.php.net/schmarrn/kaese/butter.html existiert und ist erreichbar
»» Hm???? Wieso denn das?

Der Server antwortet mit (im Wesentlichen)
302 Found
Location: http://de3.php.net/search.php?show=quickref&lang=de&pattern=schmarrn%2Fkaese%2Fbutter.html

Er leitet den Request also auf eine andere HTTP-Ressource weiter - ohne eine Fehlerseite oder einen Fehlerstatus zu senden.
Wird diese Ressource angefordert, geschieht das gleiche Spielchen nochmal, es kommt wieder

302 Found
Location: http://de3.php.net/manual-lookup.php?pattern=schmarrn%2Fkaese%2Fbutter.html&lang=de

Also eine weitere Weiterleitung auf eine andere URL.
Wird diese Ressource angefordert, kommt
200 OK
samt der Seite.

Es existiert also eine Ressource, die unter der genannten URL erreichbar ist (wenn auch auf Umwegen).
Auf de.selfhtml.org existiert eben keine derartige Umleitung, also kommt auch das Ergebnis "gibtsnicht".

»» Hat jemand eine Erklärung dafür?

http. Das hat nichts mit Dateien zu tun.
Aus irgendwelchen Gründen meinten die PHP-Leute, daß sie die PHP-Nutzer verwirren müssen und haben es daher ermöglicht, auf http-Ressourcen mit Datei-Funktionen zugreifen zu können.

cu,
Andreas
--
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter

Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2005 Teil von April

© 1998-2006 Seite Impressum, Software: Classic Forum