Ankündigung

Einklappen
Keine Ankündigung bisher.

Chat - Ausgabe bricht ab

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Chat - Ausgabe bricht ab

    Hallo,
    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 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 '';
               }
                    
    ?>
    Etwas zum Errorhandler - im Quelltext finde ich nirgends , 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) ..

  • #2
    Hm, warum Du es in php machst, weiss ich jetzt -nachdem ich also gelesen habe, dass der irreführende Name vStream für die Vorgehensweise benutzt wird- immer noch nicht
    Mir auch völlig egal. Ich will da genausowenig drüber diskutieren.

    Hast Du bei Deinem Provider mal nachgefragt, ob es noch weitere Begrenzungen gibt, die Du nicht umgehen kannst, zB auf Prozessebene falls php als cgi läuft?

    Kommentar


    • #3
      Ich hatte schoneinmal einen PHP-Chat laufen - damals von MyMazen, ein ganz nettes Ding (früher jedenfalls). Nun, lief einwandfrei & ohne Probleme. Auf die gleiche Art und Weise (diese Art "simulation") läuft auch meiner - local ging das ohne Probleme, und selbst der alte Chat läuft online 1A - nur ich weiß nicht, was an meinem SCript nicht funktioniert. Ich hab an jeder Ecke und an jedem Ende test-routinen eingebaut & Mailversand an mich (vorher geprüft, $_BENCH und so), ich bekomme den Fehler einfach nicht eingegrenzt..

      PHP läuft bei mir als Modul und nicht als CGI, von daher wird das auch keine Probleme bereiten..

      //edit
      Soeben ist die Mail die ich unter register_shutdown_functino() angegeben habe angekommen -
      04.10 19:59
      Mehr steht da nicht drin. folglich gibts auch keinen MySQL-Fehler..

      //edit2
      Lol, nun kam die E-Mail gleich 2x hintereinander, aber das Script läuft weiter.. hatte jemand schoneinmal solche Erfahrungen?

      Kommentar


      • #4
        nein. Aber vllt mal error reporting auf E_ALL einstellen, vllt kriegt man damit ja was raus... glaub ich zwar net, kann aber sein, ich weiß ja net was bei dir default is

        Kommentar


        • #5
          Zitat von Chr!s
          An was liegt das, dass das Script eifnach so (ohne Felermeldung) abbricht? (PHP 4.4.0, error_reporting(E_ALL), display_errors auf true) .
          Hatte ich schon in meinem ersten Post geschrieben
          Was ich noch anmerken möchte - ich hab gestern abend noch ein bisschen weitergetestet - diesmal hat es 2x ohne Probleme funktioniert. Das heißt also quasi, adss der Fehler nur manchmal auftritt..

          "Manchmal" ist jetzt natürlich eine ganz schlechte Zeit, ich konnte auch noch nicht bestimmen unter welchen Umständen dies passiert - da es anscheinend keine Kriterien dafür gibt, wann das SCript abbricht und wann es abbricht.

          Kommentar


          • #6
            Vielleicht benötigt das Script zu viel Speicher??

            Kommentar


            • #7
              Hm.. kann es deswegen automatisch abgrbochen werden? Wenn ja, wo kann ich dies nachsehen / mir ausgeben lassen?
              Was mir gestern abend noch aufgefallen ist - es passiert manchmal, dass das SCript auch ohne Probleme läuft. Ein anderesmal wieder kommt gleich 2-3x ein Fehler (Fehler = ich bekomme eine Mail zugesendet, das hab ich zum debuggen eingebaut in der Funktion register_shutdown_function) ..

              Interessant aber, da ich an jeden Ecken und Enden einen ABbruch des Scripts bemerke und den User als offline setze - passiert der angesprochene Fehler, ist der User trotzdem noch online - man kann weiter Texte schreiben, und dieser wird sogar in die Datenbank eingetragen - das Problem liegt also nicht hier, sondern lediglich an der Chatausgabe..

              Ich werd mir vielleicht auch einmal die apache error-logs ansehen müssen, Problem hierbei ist nur, dass ich diese nicht habe - entweder ist das in der PHPini ausgeschalten, oder der Hoster lässt mich diese nich sehen - das einzige was ich ssehe ich der access_log.

              Kommentar


              • #8
                echo ini_get("memory_limit");
                Gibt dir aus, wie viel RAM du ausnutzen darfst.

                Kommentar


                • #9
                  Sowohl Local als auch Master Value sind 8M eingestellt (phpinfo()). Nu, in welcher Weise ist das nun relevant für mein Script? ich könnte nämlich nirgends einen Speicherüberlauf feststellen - und, müsste PHP mir nicht dann wenigstens enien Fehler anzeigen?

                  Kommentar


                  • #10
                    Tschuldigung für meinen Doppelpost.
                    Matthias959 hat mich auf die richtige Spur gebracht Es liegt wirklich am Speicherverbrauch des Sciprts (vermute ich zumindest, das ist die einzige Erklärung für mich, denn nichteinmal register_shutdown_function() wird noch ausgeführt, bevor das Script beendet wird). 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. Wobei anzumerken ist, dass der Speicher sich laufend erhöht..

                    Kommentar

                    Lädt...
                    X