Archiv verlassen und diese Seite im Standarddesign anzeigen : Welchen fehler erzeugt fopen?
marvinlol
20.07.2009, 12:54:23
Hi,
ich habe eine Abfrage in meinem Script, indem gefragt wird, ob eine .txt Datei vorhanden bez. zu öffnen ist.
Wenn die Datei vorhanden ist läuft auch alles perfekt, doch wenn die Datei nicht vorhanden ist oder einen anderen Namen hat, leitet mich das Scipt auf meine Error Seite weiter. (Die Error Seite wird von CMS ausgeführt)
Mein Script sieht so aus:
<?php
header('Content-type: text/html; charset=ISO-8859-1');
$handle = @fopen("http:/www.url.de/datei.txt", "r");
if ($handle == NULL) {
echo "geht nicht!";
}
else {
while ( $inhalt = @fgets ($handle, 4096 ))
{
echo "$inhalt";
}
@fclose($handle);
}
?>
Vielleicht weiß ja jemand von euch, welchen Fehler fopen dabei erzeugt (z.B. 404,403 o.ä) und wie man ihn umgehen kann?
Damir
20.07.2009, 13:06:24
Hi,
also du solltest vor dem fopen erst einmal prüfen ob die Datei existiert!!!!
http://www.selfphp.de/funktionsreferenz/dateisystem_funktionen/file_exists.php
Damir
marvinlol
20.07.2009, 13:11:16
Meines wissens nach geht "file_exists" nicht bei externen Dateien oder?
Ich habe oben auch vergessen zu erwähnen, dass die .txt Datei auf einem externen Server liegt.
cortex
20.07.2009, 13:13:49
beachte bitte die einordung deiner fragen ins passende unterforum. ich denke, dass
Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken
nicht auf dich passt. darüber hinaus habe ich mich in deinem anderen thread (http://www.selfphp.de/forum/showthread.php?p=129361#post129361) bereits geäussert.
[mod: verschoben]
cx
DokuLeseHemmung
20.07.2009, 13:14:21
file_exists() arbeitet nicht über den HTTP-Wrapper.
Wenn du den Statuscode möchtest, dann soltest du dieses mal lesen:
The stream allows access to the body of the resource; the headers are stored in the $http_response_header variable. Since PHP 4.3.0, the headers are available using stream_get_meta_data().
Aus: http://de2.php.net/manual/en/wrappers.http.php
PS:
@ ist IMMER eine schlechte Idee
marvinlol
20.07.2009, 13:26:17
ah okay..
Kann ich den Statuscode über den header bekommen?
Wenn ja - Wie?
danke
Damir
20.07.2009, 13:26:41
Meines wissens nach geht "file_exists" nicht bei externen Dateien oder?
Ich habe oben auch vergessen zu erwähnen, dass die .txt Datei auf einem externen Server liegt.
Oh, das habe ich glatt in deinem Beispiel übersehen.....
Alternativ kannst du natürlich auch mit CURL (http://de2.php.net/manual/en/book.curl.php) arbeiten, da du hier sehr viele Informationen zurück bekommst...
DokuLeseHemmung
20.07.2009, 13:39:56
ah okay..
Kann ich den Statuscode über den header bekommen?
Wenn ja - Wie?
danke
Habe ich dir schon mitgeteilt !!!
Augen auf und Posting #5 nochmal aufmerksam lesen.
marvinlol
20.07.2009, 13:40:58
Okay danke.
Die Frage ist ja jetzt, wie ich mein CMS dazu bringen kann, dass es nicht die Error Seite aufruft, sondern wie in meinem Beispiel "geht nicht" ausgibt.
Ich benutze das CMS Contenido.
Damir
20.07.2009, 14:10:57
if (!$handle) {
echo "geht nicht!";
}
else {
while ( $inhalt = @fgets ($handle, 4096 ))
{
echo "$inhalt";
}
marvinlol
20.07.2009, 14:17:30
Funktioniert leider auch nicht.
Ich werde immernoch auf die Error-Seite weitergeleitet.
Ich bin mal dem Tipp von DokuLeseHemmung nachgegangen aber ich weiß nicht, was ich jetzt von dem Ergebnis halten soll. Ich bekomme so viele Daten zurück, dass ich nicht weiss was ich damit anfangen soll. Vielleicht könnt ihr das ja entschlüssen :P
Array ( [wrapper_data] => Array ( [0] => HTTP/1.1 302 Moved Temporarily [1] => Date: Mon, 20 Jul 2009 11:07:54 GMT [2] => Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.2635 [3] => Cache-control: post-check=0, pre-check=0, private, no-cache [4] => ETag: 0bd43e95efd5ae0de84e3720d726cf3e [5] => Expires: Mon, 20 Jul 2009 12:07:54 GMT [6] => Pragma: no-cache [7] => X-Powered-By: PHP/5.2.8 [8] => Set-Cookie: sid_1_1=e9e4671ddf5fa1adf1861ec7a03dfde0; path=/ [9] => Last-Modified: Mon, 20 Jul 2009 11:07:54 GMT [10] => Location: /?error=1 [11] => Connection: close [12] => Content-Type: text/html [13] => HTTP/1.1 302 Moved Temporarily [14] => Date: Mon, 20 Jul 2009 11:07:54 GMT [15] => Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.2635 [16] => Cache-control: post-check=0, pre-check=0, private, no-cache [17] => ETag: 467c0b19f39ef530b6fcaa7f14d6b9df [18] => Expires: Mon, 20 Jul 2009 12:07:55 GMT [19] => Pragma: no-cache [20] => X-Powered-By: PHP/5.2.8 [21] => Set-Cookie: sid_1_1=a6a4237945c77cb9eb4c1d2cbb5e5eb7; path=/ [22] => Last-Modified: Mon, 20 Jul 2009 11:07:55 GMT [23] => Location: /sitemap/?errorno=1 [24] => Connection: close [25] => Content-Type: text/html; charset=iso-8859-1 [26] => HTTP/1.1 200 OK [27] => Date: Mon, 20 Jul 2009 11:07:55 GMT [28] => Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.2635 [29] => Cache-control: post-check=0, pre-check=0, private, no-cache [30] => ETag: 3d505f71b89ef93f3cda9a75073d3052 [31] => Expires: Mon, 20 Jul 2009 12:07:55 GMT [32] => Pragma: no-cache [33] => X-Powered-By: PHP/5.2.8 [34] => Set-Cookie: sid_1_1=2aff6506ab5962549a1982e84af24769; path=/ [35] => Last-Modified: Mon, 20 Jul 2009 11:07:55 GMT [36] => Connection: close [37] => Content-Type: text/html; charset=iso-8859-1 ) [wrapper_type] => http [stream_type] => tcp_socket/ssl [mode] => r+ [unread_bytes] => 0 [seekable] => [uri] => http://www.pixelcreation.de/inc/impressum23.txt [timed_out] => [blocked] => 1 [eof] => )
Damir
20.07.2009, 14:24:22
Hmmm,
das nächste mal solltest du schon genauer erklären was du machst denn wir können ja nicht wissen was du denkst... im Beispiel verleitest du auf eine TXT-Datei, und die Ausgabe ist von einer anderen Seite, die wiederum andere Seite auflistet....
Interessant sind für dich:
HTTP/1.1 302 Moved Temporarily (dauerhafte Weiterleitung der Datei)
oder
HTTP/1.1 200 OK (alles ok)
Wie gesagt, ich hätte CURL genommen aber ich weiß ja auch nicht was du da machen willst....
marvinlol
20.07.2009, 14:33:55
Ich erkläre jetzt erstmal mein Vorhaben.
Ich möchte auf "fremden" ("Kunden") Seiten im Impressum einen Include machen, in dem dann Daten von mir stehen. Wenn sich z.B. mal meine Telefonnummer ändern sollte, muss ich nur die "impressum.txt" auf meinem Server ändern und auf den Seiten bleibt alles aktuell. Wenn die besagte "impressum.txt" mal nicht existier oder mein Server offline ist, soll im Impressum der anderen Seiten nicht "garnichts" stehen sondern da soll dann ein Alternativ-Kontakt stehen.
Ich habe "file_exists" und "include" nicht genommen, da diese ja nicht bei externen Dateien funktionieren.
Wie würdet ihr das am besten angehen?
Bei den CURL Funktionen konnte ich nichts passendes finden.
Damir
20.07.2009, 14:43:55
Ich habe "file_exists" und "include" nicht genommen, da diese ja nicht bei externen Dateien funktionieren.
Wer sagt denn sowas?????
<?php
include("http://www.microsoft.de");
?>
natürlich funktioniert auch ein include auf fremde Seiten wenn allow_url_fopen auf on steht..... hat aber nicht jeder aktiviert....
CURL ist wie gesagt wohl eine sehr gute Alternative, allerdings muss das auch auf dem Server mit drin sein
DokuLeseHemmung
20.07.2009, 14:52:58
Doppelte, oder gar dreifache Weiterleitung... oje
Resourcen verplemerung in Reinform.
Und dann auch noch mit nicht standard konformen Location Headern...
Pack das Impressum überall hin, wo es auch hingehört!
Per rsync kannst du das "up to date" halten.
Aber, du kannst mir nicht erzählen dass sich das dauernd ändert.
Das unsägliche Weiterleitungsgehampel und der http_wrapper Klimmzug ist ganz sicher unnötig.
Damir
20.07.2009, 15:01:07
Und noch etwas....
Wäre ich dein Kunde und du würdest das bei mir machen wollen, würde ich dich je nach Tageszeit entweder steinigen oder kreuzigen;-)
Was haben Deine Informationen auf einer fremden Impressum-Seite zu suchen? Das Impressum ist keine Werbeseite, sondern dient einem anderen Zweck...
marvinlol
20.07.2009, 15:07:04
Wenn ich der Betreiber der Seite bin, dann habe ich auch im Impressum zu stehen oder nicht?
Damir
20.07.2009, 15:13:15
Hmm, jetzt verstehe ich gar nichts mehr.... warum willst du dann von einem fremden Server deine Daten holen???
marvinlol
20.07.2009, 15:15:27
Ihr habt das "fremd" flasch verstanden.
Die Seiten sind von mir nur der Server ist fremd -.-
Ich will ja auch garnicht so oft weiterleiten sonder einfach nur if und else ausführen.
Wenn die Datei mit den aktuellen Daten auf dem Server ist, soll er die nehmen.
Wenn nicht, dann soll er Daten nehmen, die veraltet sein könnten.
Damir
20.07.2009, 15:40:09
Schau dir mal das Posting #8 an, da habe ich soetwas mal mit CURL erklärt:
http://www.selfphp.de/forum/showthread.php?t=21360&highlight=CURL
marvinlol
20.07.2009, 16:12:11
Wie kann ich Checken, ob curl auf meinem server aktiv ist ?
Damir
20.07.2009, 16:17:20
<?php
phpinfo();
?>
vBulletin® v3.8.3, Copyright ©2000-2024, Jelsoft Enterprises Ltd.