Portal > Foren > PHP > PHP-Programmierung > Chat - Ausgabe bricht ab
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 04.10.2005, 19:55 Nach oben    #1
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard Chat - Ausgabe bricht ab

Hallo, nun poste ich doch mal bei den Profis
ich habe selbst folgendes Problem:
Ich bin an den letzten Entwicklungen für einen PHP-Chat. Ja, ich weiß dass PHP dafür überhaupt nicht geeignet ist, aber ich möchte hier nicht darüber diskutieren, wer sich ansehen will warum ich PHP doch nutze soll mal die Suche auf php.de mit "vStreams" benutzen.

Nun, zum eigenlichen Problem.
Es klappt soweit alles wunderbar, nur an der Chatausgabe haperts. Denn die setzt nach einer bestimmten Zeit einfach aus (welches Zeitintervall dies ist habe ich noch nicht herausgerunden). Nun, erster Gedanke: max_execution_time. Die steht bei meinem Hoster auf 30, das Script braucht aber mehr als 10 (15?) Minuten bis es abbricht. Woran kann dies liegen? Hier mal ein Ausschnitt aus der relevanten Datei:
PHP-Code:
<?php
if($user['login'] == TRUE AND $user['chatroom'] != '') {

                  function 
kill_thread() {
                           GLOBAL 
$mysql$_BENCH;
                           
#$mysql -> query("KILL " . $mysql -> thread_id);
                           
benchStop();
                           
                           
mail($_BENCH['__mail'],
                                
"Sag-Ich-Dir.Net - ChatHasEnded",
                                
date('d.m H:i'time()) . mysql_error() . mysql_errno() . benchShow(),
                                
$header);
                  }
                  
// Alles zum ausprobieren - ini_set greift nicht, und set_time_limit ebenfalls nicth (bekomme eine Warnung aus), SAFE MODE
                  
ob_end_flush();
                  
set_time_limit(0);
                  
ini_set('max_execution_time'0);
                  
ignore_user_abort(1);
                  
register_shutdown_function('kill_thread');
                  
benchStart();

/*
   ...
*/
        // Hier beginnt die Chatausgabe
        
while( (connection_aborted() == FALSE AND connection_status() == 0) AND
               ( ( 
time() - $chat -> get_lastaction($user['id']) ) < 1200) AND
               (
$chat -> get_room($user['id']) != '')) {
               
                
$newposition $chat -> get_last_messageid($user['chatroom']);
                
// Hier werden nur die Messages ausgelesen - irrelevant,
                // da hier das Script nicht terminiert werden kann (die, exit...)
                        
echo "\r\n";
                }
                
#echo ' '; // Damit flush() auch was zum senden hat..
                
                
$lastposition $newposition;
                
                
flush();
                
sleep(1);
        }

        
// Falls etwas schiefgelaufen ist
        
if( (connection_aborted() == TRUE) OR
            ( ( 
time() - $chat -> get_lastaction($user['id']) ) >= 1200 ) OR
            (
$chat -> get_room($user['id']) == '') OR $chat -> wasKicked($user['id'])) {
                     
// Hier beginnt dann der Errorhandler
                     
echo '<!-- Has Ended -->';
           }
                
?>
Etwas zum Errorhandler - im Quelltext finde ich nirgends <!-- Hase Ended -->, von daher bricht das Script auch nicht an dieser Setlle ab... Nach der While-Schleife hatte ich auch eine Ausgabe (zum Testen) angegeben - aber auch hier wird nichts ausgegeben.

An was liegt das, dass das Script eifnach so (ohne Felermeldung) abbricht? (PHP 4.4.0, error_reporting(E_ALL), display_errors auf true) ..
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.10.2005, 22:22 Nach oben    #2
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

set_time_limit (0); sollte da eventuell helfen, denn wenn ein max_execution_time vorliegt, dann wird der Chat IMMER nach einer gewissen zeit abbrechen.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.10.2005, 22:35 Nach oben    #3
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Ganz gefährlich. Mit Relativ-Endlos-Skripten, wie einem Chat der dank nicht vorhandem Zeitlimit endlos läuft, hat man keine Freude.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.10.2005, 23:38 Nach oben    #4
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

@Lars: Wenn das Script vernünftig programmiert ist, passiert es entweder a) garnicht erst und / oder b) es wird korrekt abgefangen. Die Möglichkeiten dazu gibt es jedenfalls.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 11:18 Nach oben    #5
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
Zitat von MrNiceGuy
@Lars: Wenn das Script vernünftig programmiert ist, passiert es entweder a) garnicht erst und / oder b) es wird korrekt abgefangen. Die Möglichkeiten dazu gibt es jedenfalls.
Und genau so ist es. An jeder Ecke und an jedem Ende wird aufjedenfall ein Abbruch abgefangen und der User in der Datenbank als "offline" beschrieben, bzw die MySQL-Verbindung geschlossen wird. set_time_limit(0) hatte ich schon versucht - mein Hoster erlaubt mir dies allerdings nicht, bzw der Safe-Mode ist hier mein Problem.

max_execution_time liegt hier vor, ja, allerdings mit 30 Sekunden, und mein Script bricht manchmal nach 10-15 Minuten ab - die Betonung liegt hier auf manchmal, manhcmla läuft es nämlich auch einfach ohne Probleme - ein anderesmal kommen gleich 2-3 Fehler hintereinander (naja, keine Fehler, die in register_shutdown_function eingetragene Funktion wird aufgerufen, und in dieser wird zum debuggen eine Mail an mich gesendet, mit mysql_error, jedoch besteht hier auch kein mysqlFehler), und das Script bricht ab / läuft weiter.

//edit
Mit ist gestern abend noch folgnedes aufgefallen:
Wie schon beschrieben wird der User, insofern das Script terminiert, in die DB als offline geschrieben. Das hat bisher bei Fehlern auch immer funktioniert. Bei diesem Fehler ist dies anders - ich kann noch Text schreiben, und dieser wird sogar in die Datenbank eingetragen - der User wird also nicht als offline gesetzt. Das einzige was sich also beendet ist das Auslesen der Texte aus der Datenbank (siehe dem Code oben)...
__________________
http://www.ChrisDiary.De

Geändert von Chr!s (05.10.2005 um 11:22 Uhr).
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 12:58 Nach oben    #6
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.183
Standard

hmm mal nen anderen browser ausprobiert, bzw umleitung der ausgabe in eine datei und geschaut, ob vieleicht ienfach der browser nach ner zeit nix mehr annimmt ?
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 16:50 Nach oben    #7
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

//edit
So, ich weiß jetzt (denke ich) zumindest an was es liegt. Ich hab nämlich mal den Speicherverbrauch des Scriptes mit memory_get_usage() mitloggen lassen - und siehe da, dieser steigt stetig. Meine Vermutung nun, wenn der zu hoch wird(2M gibt mir mein Hoster) wird das Script automatisch abgebrochen. Daher auch kein Aufruf der register_shutdown_function. Wäre das eine Möglichkeit?

Und meine andere Frage - wie kann ich das Script nun so schreiben, dass es weniger Speicher verbraucht? Und zwar auf Dauer? Evtl. mit &$variable arbeiten?

Usage am Anfang: 698640
Usage am Ende: 8385072 (hier hat das Sciprt abgebrochen)
Da ist ja ein deutlicher Unterschied zu sehen. Anzumerken ist noch, dass sich der Speicherverbrauch stetig während der Laufzeit des Scriptes erhöht...
__________________
http://www.ChrisDiary.De

Geändert von Chr!s (05.10.2005 um 18:45 Uhr).
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 19:25 Nach oben    #8
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Zitat von Chr!s
Usage am Ende: 8385072
Macht ein paar KB weniger als 8 MB, da das Skript da abbricht, tippe ich mal, dass dein Speicherlimit da erreicht wird.

@NiceGuy:
Ich hab mir das Script nicht durchgelesen, aber als dann auf einmal das Wort "execution_time" fiel, hats geläutet
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 19:38 Nach oben    #9
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Nur leider bei mir nicht - denn das SCript bricht bei Speicherüberlauf und nich wegen max_execution_time ab - die steht nämlich auf 30sekunden, das script bricht aber immer so bei 10-20Minuten ab

Ich habs nun so gelöst, indem ich Referenzen auf Variablen und Funktionen angewendet habe und siehe da - in meiner Logdatei kommt jedesmal der selbe Wert:
Memory-Usage: 677744
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 19:40 Nach oben    #10
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Zitat:
Zitat von Chr!s
[..]2M gibt mir mein Hoster[..]
2mb und keine 8mb.
2mb sind natürlich recht schnell erreicht, gerade bei nem chat, denk ich mir.
// edit: too slow...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 20:10 Nach oben    #11
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Ich weiß. Find ich übrigens auch seltsam, local und master sind 2MB, aber beim Speicherverbrauch von knapp 8 (sieht man an meinem Logfiles) lief es immer noch..
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 22:43 Nach oben    #12
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

@Chris: Irgendwie scheint der Webserver deines Providers recht human zu aggieren, wenn ich mir anschaue, dass trotz max_execution_time und des Speicherlimits alles noch erhgeblich länger läuft...
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.10.2005, 22:47 Nach oben    #13
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.183
Standard

hmm das ganze läuft doch über streams, ich denke mal, vieleicht fällt das dann eher unter die input_time und die ist oftmals unbegrenzt, ist aber nur ne idee, bin mir da nicht so ganz sicher.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Chat hängt sich bei IE5 und 6 auf. suppenmann JavaScript und AJAX 3 12.09.2006 12:30
Chat Jan Gesuche 13 28.01.2006 02:26
Chat burli001 Plauderecke 7 27.11.2005 20:51
Chatähnliche Ausgabe von Serverausgaben ehli75 Enterprise Java 4 19.10.2005 16:14
Chat Organisation Paule Allgemeine Java-Programmierung 5 26.05.2005 22:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:47 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44