Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

fopen läd keine Url und Skript läuft nicht unbegrenzt lange

Hi,

meine erste Frage hier :)

Also, ich hab mir einen kleinen IRC-Bot in PHP gebastelt.
Jaja, PHP ist nicht dafür ausgelegt, aber die Sprache kenne ich am besten und ich wollte nur ne Kleinigkeit programmieren.
Außerdem bietet mir die Sprache ja auch alle nötigen Funktionen.

Jetzt stellen sich mir aber zwei Probleme:

Das erste und schlimmste ist dass das Skript nicht unendlich lange läuft sondern nur ca. 1,5-2 Stunden. Für einen Bot ist dass natürlich nicht so gut. Ich habe set_time_limit(0); und in der php.ini max_execution_time auf 0 und default_socket_timeout auf -1 gesetzt. Daran sollte es auch nicht liegen, zumal das Skript für ein PHP-Skript ja sehr lange läuft.
Genaugenommen läuft es sogar unendlich lange, es antwortet nur nicht mehr auf einen PING Befehl vom Server (schätze mal das Skript kann nicht mehr auf die Verbindung zugreifen). Kennt da irgendjemand eine Problemlösung für?

Und der zweite Fehler tritt auf wenn ich eine Internetseite laden will (für einen !google Befehl).

Zitat:
Warning: fopen(http://waf.doolao.de): failed to open stream: HTTP request failed! in /home/dft/irc/test.php on line 2
Folgende zwei Zeilen Code:
Code:                   In Zwischenablage kopieren (nur IE)
1">

Wohlgemerkt, ich kann eine Verbindung zum IRC-Server herstellen. Gibt es ne Möglichkeit das irgendwie zu ändern, oder auch nur festzustellen was genau falsch läuft?

Ich hab versucht ne Verbindung zu google.de herzustellen mit fsocketopen und meinem eigenem HTTP-Request abzuschicken aber auch das funktioniert nicht (gibt keine Fehlermeldung..fsocketopen funktioniert, fwrite funktioniert, aber fread liest einfach keine Daten aus..

mfg und dankbar für alle Hilfe,
dft
Hier gehts zum Orginal Eintrag "fopen läd keine Url und Skript läuft nicht unbegrenzt lange" im Forum

Antworten

Das soll fortschrittlich sein..???
Nee... *verschieb*

1. DauerläuferScripte haben im Webserver Umfeld erstmal nix zu suchen
Ruf das Script auf der Kommandozeile auf

2. wenn fopen mit Urls auf die Nase fällt....
Du konntest die Stream Kontext Parameter ändern
oder besser sofort mit Curl oder Snoopy die Sache angehen..

Ansonsten ist mir fsockopen als sehr zuverlässig bekannt.
Dein Request ist höchstwahrscheinlich Schrott.
Oder eine Firewall, oder so funkt dir dazwischen


Ansonsten:
Zuwenig Info........
Wie wäre es mit einem möglicht knappen Beispielcode, so daß man wenigstens die Chance hat, den Fehler reproduzieren.. :D
Sonst bleibts ein stochern im Nebel...



ps:
Dieses tuts auf jeden Fall ganz prächtig bei mir:
Code:                   In Zwischenablage kopieren (nur IE)
2">




2.

Hi,

danke für die Antwort.

Natürlich läuft das Skript auf der CLI, und der gesamte Quelltext tuts bei mir aufm Heimrechner auch..nur aufm Webserver zickt es rum (Disconnect nach 2 Stunden). Ich hab das ins fortgeschrittene Forum geschrieben weil ich davon ausgehe dass es nur eine Konfigurationsfrage des Webservers ist (scheint kein Streamwrapper für http installiert zu sein (heißt doch streamwrapper, oder?)).

Warum das Skript nach ein paar Stunden nicht mehr auf Pings antwortet..keine Ahnung. Ich kürze mal den Code aufs wichtigste zusammen:

Code:                   In Zwischenablage kopieren (nur IE)
3">

So, sollte nachvollziehbar sein. Ich sehe keinen Grund warum der nach 2 Stunden nicht mehr auf PING antwortet, ich schätze mal es liegt irgendwo am Server. Auf dem läuft btw. keine Firewall.

Vielleicht hat ja jemand ne Idee woran es liegen könnte..

Meinen HTTP-Query hab ich aus der RFC kopiert (ftp://ftp.isi.edu/in-notes/rfc2616.txt Punkt 5.1.2 Request-URI: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1) und nur die URI geändert.

Werd mal weiter rumprobieren, vielleicht finde ich den Fehler ja.

mfg dft


3.

Code:                   In Zwischenablage kopieren (nur IE)
4">

Um den Krams brauchst du dich bei einem CLI Script nicht zu kümmern...

Das der http-url-wrapper nicht funktioniert.......
Naja.. oft verwenden Web und CLI Versionen unterschiedliche php.ini, kontrolliere das evtl mal...
Weiterhin: Es sind auch http_get CURL und snoopy extra dafür gebaut worden, um HTTP Requests abzusetzen..


Warum nimmst du nicht einen von den vielen GOOGLE: "irc bot php class"


4.

Jo, ich hab die beiden Funktionen trotzdem drin. Schaden wirds wohl nicht.
Und ja, CLI und CGI benutzen unterschiedliche .ini Dateien, aber in der ist alle aktiviert.
Ich glaube eher dass vergessen wurde den Wrapper mit einzukompilieren.
Naja, ich habs jetzt mit fsockopen und eigenem http-request hinbekommen.
Ich hoffe mal dass jetzt auch der Bot nicht mehr abbricht (hab ne Einstellung in der ini doch nicht geändert..vim war nicht im 'einfügen'-Modus -.-).

@Bot-Klasse: Gleicher Grund warum ich nicht einen der zahllosen vorhandenen Bots benutze, weil ich das als Programmierübung sehe. Jetzt weiß ich halt wie ich mit Netzwerkverbindungen programmiere.

mfg dft


5.

Aha, Fehler gefunden:

[CODE]function getRawMessage() {
/*
* Nachricht vom Server empfangen
*/
$tmpString = fread($this->connection, 1024);
return $tmpString;
}

Das Problem ist fread, ich hätte fgets benutzen sollen. fgets liest nur bis zu einem Zeilenumbruch aus, fread genau so weit wie man angeben hat. Wenn jetzt jemand etwas schreibt direkt bevor der PING vom irc-Server kommt liest fread beides gemischt aus, und im schlimmsten Fall wird der PING "zerschnitten", ich bekomme also die Nachricht die irgendjemand geschrieben hat mit einem angehängtem PIN. Und beim nächsten auslesen bekomme ich ein G. Das erkennt mein Skript nicht und antwortet somit kein PONG. So kamen auch die merkwürdigen Zeiten zustande, also dass das Skript manchmal nach 30 Minuten, 2 Stunden, 5 Stunden, 2 Minuten, etc. "ping timeout"ete. Es musste ja direkt vor dem PING irgend eine andere Nachricht vom Server kommen.

Also, Problemlösung ist fgets, jetzt wird jede Zeile einzelt ausgelesen und ich verpasse keinen PING mehr, und siehe da - das Skript bleibt online.

Nur falls mal jemand so ein ähnliches Problem hat, benutze fgets.

mfg dft

[edit]
Die Website konnte ich nicht laden weil ich ein \r\n hinter dem Query vergessen habe. Hätte im Anfängerforum posten sollen, sind ja alles Anfängerfehler ~~
[/edit]


Hier gehts zum Orginal Eintrag "fopen läd keine Url und Skript läuft nicht unbegrenzt lange" im Forum
 
phpforum.de | Impressum | Handy Bundles