Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Error durch unserialize (TeamSpeak 3 PHP Framework)

Einklappen

Neue Werbung 2019

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

  • PHP Error durch unserialize (TeamSpeak 3 PHP Framework)

    Hallo,
    ich versuche derzeit ein Script zu schreiben welches automatisch Rechte auf einem TeamSpeak Server zuweist wenn gewisse Variablen in einer Datenbank-Tabelle gesetzt sind,
    da ich natürlich nicht immer wieder eine neue Verbindung aufbauen lassen möchte habe ich die Verbindung in der Variable $_SESSION['_TS3'] gespeichert, hier mal das komplette Script:

    PHP-Code:
    <?php
    require_once("libraries/TeamSpeak3/TeamSpeak3.php");

    if(
    session_id() == '' || !isset($_SESSION)) {
        
    session_start();
    }

    $server = array(
        
    "tsip" => "",
        
    "tsport" => "",
        
    "ts_query_admin" => "",
        
    "ts_query_password" => "",
        
    "ts_query_port" => "",
        
    "ts_query_user_nick" => ""
    );

    if(isset(
    $_SESSION["_TS3"])) {
        
    $ts3Con unserialize($_SESSION["_TS3"]);
    } else {
        try {
            
    TeamSpeak3::init();
            
    $ts3Con TeamSpeak3::factory("serverquery://".$server["ts_query_admin"].":".$server["ts_query_password"]."@".$server["tsip"].":".$server["ts_query_port"]."/?server_port=".$server["tsport"]."");
            
    $_SESSION["_TS3"] = serialize($ts3Con);
        } catch(
    Expection $e) {
            echo 
    "Es konnte keine Verbindung zum TeamSpeak 3 Server hergestellt werden! ErrorID: <b>".$e->getCode()."</b>; Error Message: <b>".$e->getMessage()."</b>;";
        }
    }

    ?>
    Hier habe ich nach der Verbindung die Variable mit den Verbindungsinformationen in die $_SESSION['_TS3'] gespeichert, beim erneuten aufrufen sollte er nun die $ts3Con Variable wieder aus der $_SESSION setzen, dies tut er allerdings nicht da es scheinbar ein Fehler mit der unserialize Funktion gibt, hier der Error welcher in der error.log erscheint:

    Code:
    main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "TeamSpeak3_Node_Server" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition
    hat jemand eine Idee was ich für ein Fehler mache?
    Ich muss dazu sagen das ich mich im allgemeinen erst 3-4 Tage mit PHP beschäftige, ich bin also absoluter Neuling...

    Gruß
    Shirobaka

  • #2
    Du kannst keine "Verbindungen" in Session Variablen speichern.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Zitat von tkausl Beitrag anzeigen
      Du kannst keine "Verbindungen" in Session Variablen speichern.
      Laut der Website des TS3 PHP-Frameworks soll das gehen:
      https://docs.planetteamspeak.com/ts3/php/framework/
      (Ganz unten)

      Kommentar


      • #4
        Nungut, dann baut das script beim unserialize die Verbindung wieder auf. Die Fehlermeldung kommt jedenfalls nicht von PHP, schau mal in der Klasse woher die kommt und wodurch die verursacht wird

        E: Oder doch? Hmm. Hab soeine Meldung noch nie gesehen, ich schau mal grade
        E2: Schau mal was passiert, wenn di "libraries/TeamSpeak3/Node/Server.php" gleich nach der Hauptklasse inkludierst
        E3: Oder versuchs mal mit "TeamSpeak3::init()" gleich nachm einbinden, das Script scheint den autoloader erst beim init zu registrieren.
        [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

        Kommentar


        • #5
          Zitat von tkausl Beitrag anzeigen
          Nungut, dann baut das script beim unserialize die Verbindung wieder auf. Die Fehlermeldung kommt jedenfalls nicht von PHP, schau mal in der Klasse woher die kommt und wodurch die verursacht wird
          Wie meinst du das? Wie gesagt, beschäftige mich erst seit 3-4 Tagen mit PHP usw.

          Kommentar


          • #6
            Zitat von Shirobaka Beitrag anzeigen

            Wie meinst du das? Wie gesagt, beschäftige mich erst seit 3-4 Tagen mit PHP usw.
            Das serialize speichert nicht die Verbindung selbst, sobald das script durchgelaufen ist werden alle resourcen (TCP-Verbindungen z.B.) wieder freigegeben/beendet. Gespeichert werden die Daten (IP, login, ...), und beim "unserialize" verbindet sich die Klasse dann neu.

            PHP-Code:
            <?php
            require_once("libraries/TeamSpeak3/TeamSpeak3.php");
            TeamSpeak3::init();
            if(
            session_id() == '' || !isset($_SESSION)) {
                
            session_start();
            }

            $server = array(
                
            "tsip" => "",
                
            "tsport" => "",
                
            "ts_query_admin" => "",
                
            "ts_query_password" => "",
                
            "ts_query_port" => "",
                
            "ts_query_user_nick" => ""
            );

            if(isset(
            $_SESSION["_TS3"])) {
                
            $ts3Con unserialize($_SESSION["_TS3"]);
            } else {
                try {
                    
            TeamSpeak3::init();
                    
            $ts3Con TeamSpeak3::factory("serverquery://".$server["ts_query_admin"].":".$server["ts_query_password"]."@".$server["tsip"].":".$server["ts_query_port"]."/?server_port=".$server["tsport"]."");
                    
            $_SESSION["_TS3"] = serialize($ts3Con);
                } catch(
            Expection $e) {
                    echo 
            "Es konnte keine Verbindung zum TeamSpeak 3 Server hergestellt werden! ErrorID: <b>".$e->getCode()."</b>; Error Message: <b>".$e->getMessage()."</b>;";
                }
            }

            ?>
            Versuch das mal
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar


            • #7
              Zitat von tkausl Beitrag anzeigen

              Das serialize speichert nicht die Verbindung selbst, sobald das script durchgelaufen ist werden alle resourcen (TCP-Verbindungen z.B.) wieder freigegeben/beendet. Gespeichert werden die Daten (IP, login, ...), und beim "unserialize" verbindet sich die Klasse dann neu.

              PHP-Code:
              <?php
              require_once("libraries/TeamSpeak3/TeamSpeak3.php");
              TeamSpeak3::init();
              if(
              session_id() == '' || !isset($_SESSION)) {
              session_start();
              }

              $server = array(
              "tsip" => "",
              "tsport" => "",
              "ts_query_admin" => "",
              "ts_query_password" => "",
              "ts_query_port" => "",
              "ts_query_user_nick" => ""
              );

              if(isset(
              $_SESSION["_TS3"])) {
              $ts3Con unserialize($_SESSION["_TS3"]);
              } else {
              try {
              TeamSpeak3::init();
              $ts3Con TeamSpeak3::factory("serverquery://".$server["ts_query_admin"].":".$server["ts_query_password"]."@".$server["tsip"].":".$server["ts_query_port"]."/?server_port=".$server["tsport"]."");
              $_SESSION["_TS3"] = serialize($ts3Con);
              } catch(
              Expection $e) {
              echo 
              "Es konnte keine Verbindung zum TeamSpeak 3 Server hergestellt werden! ErrorID: <b>".$e->getCode()."</b>; Error Message: <b>".$e->getMessage()."</b>;";
              }
              }

              ?>
              Versuch das mal
              Das Funktioniert, sehr gut.
              Vielen Dank

              Kommentar

              Lädt...
              X