PHP Skript für Sekundenabrechnung?

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

  • PHP Skript für Sekundenabrechnung?

    Hallo!
    Ich habe einige Grundlagen in PHP. Mir stellt trotzdem die Frage, ob ich ein PHP Skipt schreiben kann, dass für eine Sekundenabrechnung geeignet ist.

    Vorgang:
    Der User kommt in einen Kostenpflichtigen Bereich einer Seite. Solange er sich in diesem Bereich aufhält, wird z.B. jede Sekunde (evt. auch ein größeres Intervall) ein Wert in einer MySQL-Datenbank heruntergezählt.

    Für jede Hilfe bin ich euch sehr dankbar!

    Jan

  • #2
    Du solltest dir klar machen, dass PHP serverseitig läuft. Das heißt, Seite wird generiert (hier kannst du was in die DB schreiben oder sonst was machen), und dann wird die seite ausgegeben. ab da kannst du nichts mehr in die DB schreiben. erst wieder, wenn die nächste Seite kommt.

    Es wurde da letztens ein Java-Code oder sowas hier werwähnt. vielleicht findest du da was...

    *verschieb* BS

    Kommentar


    • #3
      Hi!
      Dachte es gibt vielleicht eine Funktion in PHP, die man in einer Schleife verwenden könnte... z.B. so

      do {

      1. INSERT INTO table....
      2. Warte für eine Sekunde


      while (Ausdruck);

      Kommentar


      • #4
        das ist schlecht, denn PHP läuft auf dem Server, die Kommunikation mit dem Client geschieht über HTTP und das ist ein zustandloses Protokoll, d.h. wenn der Server den Request abgearbeitet hat und das Ergebnis an dem Browser sendet, kennt er den Client nicht mehr und somit auch nicht überwachen kann, wie lange der User auf der Seite ist, bis der User irgendeine Aktion auslöst, die wiederum einen erneuten Request an dem Server absetzt. D.h. du kannst nur die Zeit zwischen 2 Request berechnen; solange du keinen 2. Request hast, kannst du im Prinzip nichts tun. Du kann mit Hilfe von anderen User die Sitzungszeit des betreffenden User berechnen (Stichwort: useronline), aber du hast keine Möglich keit, dem betreffenden User irgendwas mitzuteilen, wenn er keine Aktion auslöst.

        Kommentar


        • #5
          kannst du natürlich machen.

          evtl. bringt das sogar was, wenn du die seite ausgibst flush und danach die schleife laufen lässt. Bedenke aber die maximum_execution_time oder wie der parameter heißt.

          vielleicht sind auch sockets für dich interessant.

          für ideal halte ich aber beide lösungen nicht.

          Kommentar


          • #6
            evtl. bringt das sogar was, wenn du die seite ausgibst flush und danach die schleife laufen lässt. Bedenke aber die maximum_execution_time oder wie der parameter heißt.
            bin mir grad nicht sicher, ob die aktion überhaupt bei immer abgebrochen wird, wenn der browser geschlossen wird, oder obs einfach weiter läuft.

            Kommentar


            • #7
              Ojeee... das ist ja komplizierte als ich dachte...
              Aber erstmal vielen Dank für die Hilfe!

              Werde euch schreiben, wenn ich etwas herausgefunden habe!

              Freue mich natürlich über jede Idee!

              Kommentar


              • #8
                Ojeeee...

                Also, wenn ich nun den Browser schließe, dann läuft das Skipt immer noch!
                Wenn ich per phpmyAdmin den Zeitwert höher Stelle, wird er heruntergezähl ohne den Browser geöffnet zu haben.
                Wie kann ich das wieder abbrechen? Das soll ja jetzt nicht ewig so weiter gehen?

                Jan

                Kommentar


                • #9
                  wenns nicht automatisch aufhört (execution time), dann den server neu starten.

                  Kommentar


                  • #10
                    es reicht, wenn man den apache neu starten würde.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Danke! Hat geklappt! Hat einen Fehler im Skipt... Naja... ich habe mal folgendes gebastelt. Frage mich jetzt nur, ob ich das auch für ein "Zahlungssystem" verwenden kann...
                      PHP-Code:
                      function abrechnung() {
                          
                          
                      $sqlSelect="SELECT zeit FROM count WHERE ID='0'";
                          
                      $sqlUpdate="UPDATE count SET zeit=zeit-1 WHERE ID='0'";
                          
                      $conn=$this->conn;
                          
                          for(
                      $i=0;$i<=50;$i++) {
                          
                      // Abfragen und ausgeben
                          
                      $results=mysql_query($sqlSelect,$conn);
                          if ((!
                      $results) || (empty($results))) {
                              
                      mysql_free_result($results);
                              print 
                      "Abbruch";
                              return 
                      false;
                          }
                          
                      $restzeit=mysql_fetch_array($results);
                          print 
                      $restzeit[0];
                          print 
                      "<br>";
                          
                          
                      sleep(1);
                                  
                          
                      $results=mysql_query($sqlUpdate,$conn);
                              if ((!
                      $results) || (empty($results))) {
                              
                      mysql_free_result($results);
                              print 
                      "Abbruch";
                              return 
                      false;
                          }
                              


                      Zuletzt geändert von JanR1979; 26.11.2004, 23:21.

                      Kommentar


                      • #12
                        Skript läuft unter...

                        http://www.php-lernen.de/abrechnung/abrechnung.php

                        Kommentar


                        • #13
                          Naja... Wenn das jetzt natürlich mehrere sehen, dann stimmt der Abzug nicht mehr... ;-)

                          Kommentar


                          • #14
                            PHP-Code:
                            function abrechnung()
                            {
                             
                            $sqlSelect "SELECT zeit FROM count WHERE ID='0'";
                             
                            $sqlUpdate "UPDATE count SET zeit=zeit-1 WHERE ID='0'";
                             
                            $conn $this->conn;
                                
                             for(
                            $i=0$i<=50$i++)
                             {
                              
                            // Abfragen und ausgeben
                              
                            $results mysql_query($sqlSelect$conn);
                              if ((!
                            $results) || (empty($results)))
                              {
                               
                            mysql_free_result($results);
                               print 
                            "Abbruch";
                               return 
                            false;
                              }
                              
                            $restzeit mysql_fetch_array($results);
                              print 
                            $restzeit[0];
                              print 
                            "<br>";

                              
                            sleep(1);
                                        
                              
                            $results mysql_query($sqlUpdate$conn);
                              if ((!
                            $results) || (empty($results)))
                              {
                               
                            mysql_free_result($results);
                               print 
                            "Abbruch";
                               return 
                            false;
                              }    
                             } 

                            Tue der Welt einen Gefallen und lerne die [PHP]-Tags im Forum kennen...man hat ja nix erkannt >_>
                            Und ein paar Leerzeichen im Code, verbessern die Übersicht auch, genauso wie Einrückungen (das sind nur Leerzeichen vor den Zeilen...pro Einrückung eines, also keine große Arbeit oder so!)

                            Was willst du mit dem Code überhaupt jetzt machen?...wozu braucht man sowas?...andere Leute Geld aus der Tasche ziehen?

                            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                            Wie man Fragen richtig stellt

                            Kommentar


                            • #15
                              sieht ja gleich besser aus ;-) Genauso wie in meinem Editor...
                              Genau! Anderen Leuten das Geld aus der Tasche ziehen. ;-)
                              Nein... für eine Videokonferenz für Unternehmen. Da der Traffic aber recht hoch ist bei einem Real-Media-Stream-Server muss ich wissen, wer wie lange das Video schaut!

                              Aber ich habe da so meine Befürchtungen, dieses Skript zu verwenden... Was meint ihr? Ist das nicht ein zu großer Rechenaufwand, wenn das jetzt 200 Zuschauer machen?


                              PS: Bin neu hier... Ich habe noch keine Ahnung wie man Quellcode hier rein stellt.

                              Vielen Dank!
                              Jan

                              Kommentar

                              Lädt...
                              X