phpbar.de logo

Mailinglisten-Archive

[php] Dateizugriff von Fremddomain

[php] Dateizugriff von Fremddomain

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Sep 20 20:14:54 CEST 2005


Hi Alex,

Musik-Alex schrieb:
> Das habe ich nun ausprobiert, aber es funktioniert auch nicht. Hier ein
> Source-Schnipsel:
>
> $bol=file_exists("http://www.beispielzwei.de/daten.csv");
> if($bol)
> {

Du hast doch jetzt mehrfach gelesen, daß file_exists() nicht auf entfernte
(remote) Dateien anzuwenden ist. :-) $bol wird daher in diesem Fall immer
FALSE enthalten, womit dann alle Operationen in dem if($bol)-Zweig nicht
ausgeführt werden.

Lass die Abfrage doch einfach weg. Alle Funktionen, mit denen Du entfernte
(remote) Dateien einlesen kannst, liefern FALSE zurück, wenn es nicht
klappt. Das reicht doch. :-)


> $datei=fopen("http://www.beispielzwei.de/daten.csv","r");
> if($datei)
> {
> $dateigroesse=filesize("http://www.beispielzwei.de/daten.csv");
> [...]
>
> Auch wenn ich die erste "file_exists"-Abfrage weglasse, streikt der
> Befehl. Wie kann ich das - mit einfachen Mitteln - anders lösen?

Die Mittel sind - zumindest teilweise - richtig. Du weißt nur noch nicht,
sie auch richtig einzusetzen. Lies Dir mal die Handbuchseite zu fopen()
durch:

     http://de3.php.net/manual/de/function.fopen.php

Da ist auch ein Beispiel, wie die Datei dann ausgelesen wird, denn fopen()
liefert nur die Resource zurück. Je nachdem, was Du vorhast, möchtest Du
aber vielleicht anstatt fopen() und Co. die Funktion file() verwenden, die
Dir die Datei direkt in einem Array serviert:

     http://de3.php.net/manual/de/function.file.php

Mit implode() erhältst Du dann den Inhalt des Arrays, also der Datei, in
einer String-Variable.

Ab PHP 4.3.0 geht es übrigens noch einfacher: anstatt file() + implode()
kannst Du ganz einfach file_get_contents() verwenden. ;-)

Was die Funktion filesize() betrifft, so hättest Du auch hier einen Blick
in das Handbuch werfen sollen. ;-) Dann hättest Du festgestellt, daß hier
dieselbe Einschränkung wie bei file_exists() gilt: Die Funktion ist nicht
auf entfernte Dateien anwendbar.

Bleibt die Frage: Wie kommst Du dennoch an die Dateilänge? Wenn ich das
richtig sehe, müßte das über die Länge des Strings mit dem Dateiinhalt
gehen. So in etwa:

     $dateigroesse = strlen(implode("\n",
file("http://www.beispielzwei.de/daten.csv")));

Jedenfalls für den ASCII-Datensatz sollte das zutreffen. Ich meine, einmal
gelernt zu haben, daß dort 1 Buchstabe bzw. Zeichen = 8 Bits = 1 Byte
gilt. Inwieweit das auch auf UTF-8 usw. übertragbar ist, kann sicherlich
hier noch jemand beantworten. So genau kenne ich mich da nicht aus. Ich
habe es noch nicht benötigt. Daher die Wissenslücke. :-)))


Viele Grüße

Lutz


php::bar PHP Wiki   -   Listenarchive