2009-05-19 4 views
0

jede Idee, warum Fopen Timeout für eine Datei, wenn es auf meinem Server ist und ich weiß, dass die URL korrekt ist?PHP fopen Funktion abgelaufen?

update: sorry, ich hätte erwähnen sollen, das ist in php. der Code:

fopen($url, 'r'); 

Es funktioniert, wenn ich in einem relativen Pfad für die Datei setzen, aber nicht, wenn $ url ist eine URL in meinem Server (aber es funktioniert für google.com). Danke für die Hilfe.

Alaitniks Antwort war richtig. Das Problem tritt nur auf, wenn ich über die Ethernet-Schnittstelle auf meine eigenen Serverdateien zugreife. Wie kann ich das beheben? Ich muss auf die Datei von der Ethernet-Schnittstelle zugreifen können, weil die URL dynamisch geladen wird (es wird von einem Wordpress CMS generiert, so dass die URL technisch nicht als Datei auf meinem Server existiert)

+0

Fragen Sie nach der C-Funktion fopen? Wenn dies der Fall ist, wird fopen zum Öffnen von Dateien verwendet, nicht von URLs. Und was meinst du mit "Zeitüberschreitung"? –

+0

Wie Neil angegeben hat, müssen Sie weitere Details hinzufügen. Es ist nicht offensichtlich, über welche Funktion Sie sprechen, und Sie haben nicht einmal gesagt, welche Programmiersprache Sie verwenden (das Tagging ist unzureichend). – unwind

Antwort

4

können Sie ini_set verwenden ('default_socket_timeout', 2); vor dem Öffnen der fopen $ url. Dadurch wird der Standard-Zeitlimit für die Socket-Verbindung tatsächlich festgelegt, ohne zu antworten. Stream_set_timeout legt die Zeit für den Stream fest, der über FOPN- oder Socket-Öffnungsfunktionen eingerichtet wird. Versuchen Sie, das könnte für Sie hilfreich sein.

+0

für NO Grenze init_set ('default_socket_timeout', - 1) –

+1

@ VirgiliGarcia Sie haben Tippfehler in init_set -> ini_set.Aber dann funktioniert es gut ... thx – iiic

0

Wenn Sie versuchen, den HTML-Code einer URL zu erhalten, empfehle ich, curl anstelle von fopen zu verwenden.

fopen wird am besten mit lokalen Dateien verwendet, weil es nicht weiß, wie man mit den Idiosynkrasien einer Netzwerkressource umgehen soll.

3

Es scheint, dass Sie versuchen, eine Datei von Ihrem eigenen Server mit dem HTTP-Protokoll von einem Programm auf dem gleichen Server laufen zu downloaden?

Wenn ja, ist das Timeout-Problem wahrscheinlich Web-Server oder Netzwerkkonfiguration bezogen. Timeouts passiert normalerweise nur weil entweder:

  1. der Server wirklich eine lange Zeit nimmt die Antwort zurück zu senden, oder
  2. die TCP-Verbindung

Zum Beispiel blockiert wird, kann es sein, dass Ihre lokalen Firewall-Regeln erlauben nur Zugriff auf www.example.com, wenn diese Abfragen von der Ethernet-Schnittstelle kommen, aber eine lokal hergestellte Verbindung würde versuchen, über die Loopback-Schnittstelle zu gehen.

+0

Wow, du hast Recht. Wie kann ich das beheben? Ich muss auf die Datei von der Ethernet-Schnittstelle zugreifen können, weil die URL dynamisch geladen wird (sie wird von einem Wordpress cms erzeugt, also existiert die URL technisch nicht als eine Datei auf meinem Server) –

+0

Um das zu beheben, müssen wir mehr wissen darüber, was genau den Verkehr blockiert. Was passiert, wenn Sie nach der gleichen Datei, aber mit localhost in der URL anstelle des Hostnamens fragen? Wenn dies aufgrund von namensbasiertem virtuellem Hosting nicht funktioniert, geben Sie den Namen der Website in die hosts-Datei unter Adresse 127.0.0.1 ein – Alnitak

1

vielleicht Ihre „allow_url_fopen“ auf „Off“ php.ini oder phpinfo prüfen()

0

Alter Nahm mich, dies zu lösen, aber hier fand ich es, dank Alnitak. Das Öffnen der Datei mit localhost in der URL anstelle des Hostnamens war der Trick für mich.