Vous êtes ici Codes PHP et MySQL > Inclassable > Création d'un channel temporaire/permanent...

 

Création d'un channel temporaire/permanent TeamSpeak3

Ici, je vous montre comment débuter dans la gestion d'un serveur TeamSpeak3 via une interface web, grace au Framework officiel. ( Le web n'est vraiment pas truffé de tutos pour ça ... )
Vous pouvez le télécharger à cette adresse: http://addons.teamspeak.com/directory/tools/integration/TeamSpeak-3-PHP-Framework.html

Vous devez place le dossier TeamSpeak3 dans le même dossier que votre php.

On va créer un formulaire qui permettra de créer un channel temporaire sur un serveur dont vous possédez les droits.

Pour réaliser ce code, je n'ai que suivi la doc du framework, il est possible que la syntaxe soit moche, je ne sais pas, j'ai à peine pris le temps de lire les exemples ... Mais ça fonctionne ! :)

PS: Pour créer un channel permanent, il suffit de virer tout le traitement de reconnaissance et de gestion du membre ( tout le code compris entre les commentaires TEMP ONLY et ---------- ); et de remplacer "channel_flag_permanent" => FALSE, par "channel_flag_permanent" => TRUE dans le channelCreate().
Ce code peut être améliorer pour que le formulaire prenne en charge les deux cas à la fois.
 
lovenunu
[3] sources en PHP voir
Code vu 4784 fois
Enregistré le 17 Aout 2012
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Création d'un channel temporaire/permanent TeamSpeak3
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Création d'un channel temporaire/permanent TeamSpeak3     */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts661-PHP.htm              */
/* Auteur         : lovenunu                                                  */
/* Date édition   : 17 Aout 2012                                              */
/*                                                                            */
/******************************************************************************/


// On démarre le système de session pour transmettre des variables à travers les
// pages simplement
session_start();

// Configuration
$login=""// Login d'un utilisateur query
$password""// Pass de cet utilisateur
$ip="XXX.XXX.XXX.XXX"// Ip ou nom de domaine du serveur
$portquery="10011"// Port du serveur query
$portserver="9987"// Port du serveur TS
//-----------------

// On utilise les fonctions gen_tokken() et anti_brute() de la classe security
class security {

    public function get_real_ip() {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
            $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
        else
            $ip $_SERVER['REMOTE_ADDR'];
        return $ip;
    }
    
    function gen_tokken() {
        $gen strval(time()*9365*rand(10000000000000,1000000000000000)); 
$tokken "";
        for($i=0$i<strlen($gen);$i++) $tokken.=sprintf("%02X"ord(substr($gen
$i1)));
        return $tokken;
    }

    public function read_file($file) {
        $file fopen($file'r');
        $buf "";
        while($line fgets($file)) {
            $buf.=$line;
        }
        fclose($file);
        return $buf;
    }
    
    public function write_file($file$text) {
        file_exists($file) ? unlink($file): $ret=1;
        $file fopen($file'a');
        fputs($file$text);
        fclose($file);
        return TRUE;
    }

    public function anti_brute($rep$lim) {
        if(!is_dir($rep)) mkdir($rep);
        $file=$rep.'/'.$this->get_real_ip();
        if(file_exists($file)) {
            $tmp $this->read_file($file);
            $tmp explode("-"$tmp);
            $i $tmp[0]; $time $tmp[1];
            
            if($time <= (time()-(600))) { // 10min
                unlink($file);
                $this->anti_brute($rep$lim);
            }
            
            if($i $lim) {
                $this->write_file($file, ($i+1)."-".time());
            } else if($i >= $lim) {
                $this->write_file($file$lim."-".time());
                die("Security error | Limit: ".$lim." reached");
            }
        } else {
            $this->write_file($file"1-".time());
        }
        
        return TRUE;
    }
}

//-----------------

//Import du framework TS3
require_once("./TeamSpeak3/TeamSpeak3.php");

// On initial ts
TeamSpeak3::init();
// On se connecte en query
$ts3_VirtualServer TeamSpeak3::factory("serverquery://".$login.":".$password.
"@".$ip.":".$portquery."/?server_port=".$portserver);

// On créé un objet security() pour pouvoir utiliser les fonctions
// d'anti-bruteforce et le générateur de tokken
$s = new security();

// TEMP ONLY
// On lit la liste des membres
$clist $ts3_VirtualServer->clientList();
$clientsNames = array(); // Buffer
$keys array_keys($clist); // On stock les clés de $clist
for($i=0$i<count($keys);$i++) { 
// A chaque clé, on stock le nom du client de $clientsNames[]
    $tmp $clist[$keys[$i]];
    $clientsNames[] = $tmp->client_nickname;
}
// -----------

// On récupère et accèpte les variables du formulaire que si elle ne contiennen
// que des lettres ou des chiffres
$name = (isset($_POST['name']) and !empty($_POST['name'])) ? $_POST['name'] : 
FALSE;
$topic = (isset($_POST['topic']) and !empty($_POST['topic'])) ? $_POST['topic'] 
: FALSE;
$tokken = (isset($_POST['tokken']) and !empty($_POST['tokken'])) ? $_POST[
'tokken'] : FALSE;
// TEMP ONLY
$loginname = (isset($_POST['login']) and !empty($_POST['login'])) ? $_POST[
'login']: FALSE;
// ----------

// On défini malgré tout la session tokken, pour éviter des problèmes.
if(!isset($_SESSION['tokken'])) $_SESSION['tokken']="a";
$tok = &$_SESSION['tokken']; 
// On crée une variable $tok qui pointe sur $_SESSION['tokken'], ca simplifie
// l'écriture.


// Si le nom, le top et le tokken sont bon, on peut créer le chan.
if($topic and $tok == $tokken and $loginname) {

    // On utilise l'anti-bruteforce pour éviter le flood de création de chans.
    $s->anti_brute("antibrute_ts"2);
    
    // TEMP ONLY
    if(in_array($loginname$clientsNames)) { 
// Si le nom est dans $clientsNames, le membre est connecté.
        // On récupère l'objet des infos de l'utilisateur
        $node $ts3_VirtualServer->clientGetByName($loginname); 
        // On récupère l'id de l'utilisateur
        $clid $node->getId();
    // ----------
    
        // On crée le channel
        $cid $ts3_VirtualServer->channelCreate(array(
        "channel_name" => $name,
        "channel_topic" => $topic,
        "channel_codec" => TeamSpeak3::CODEC_SPEEX_WIDEBAND,
        "channel_flag_permanent" => FALSE));    
        
        // TEMP ONLY
        
// Et on bouge l'utilisateur dedans pour éviter que le channel ne soit détruit
        $ts3_VirtualServer->clientMove($clid$cid);
        // ---------
        
        // My work here is done
        die("Chan créé: "$name .
        " <br/> Topic: "$topic .
        " <br/> <a href='/'> Retour à l'accueil </a>");
        
    // TEMP ONLY
    } else {
        $tok $s->gen_tokken();
        $errorlogin "Vous n'êtes pas connecté";
    }
    // ----------
}
// Sinon on génére un nouveau tokken.
else {
    $tok $s->gen_tokken();
}
?>

<html>

<head>
    <title> Test </title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>
    
    <form action="./form.php" method="post" id="form_create">
    <!-- TEMP ONLY -->
    <?php if(isset($errorlogin)) { ?>
    <span style="red"> <?php print $errorlogin?> </span>
    <?php ?>
    <label for="login"> Login </label>
    <input type="text" name="login" value="<?php if($login) print $login?>
"/><br/>
    <!-- --------- -->
    
    <?php if(!$name and isset($_POST['name'])) { ?>
    <span style="red"> Erreur dans le nom </span>
    <?php ?>
    <label for="name"> Nom du channel </label>
    <input type="text" name="name" value="<?php if($name) print $name?>" />
    <br/>

    <?php if(!$topic and isset($_POST['topic'])) { ?>
    <span style="red"> Erreur dans le topic </span>
    <?php ?>
    <label for="topic"> Topic du channel </label>
    <input type="text" name="topic" value="<?php if($topic) print $topic?>" />
    <br/>
    
    <input type="hidden" name="tokken" value="<?php print $tok?>" />
    </form>
    
    <a href="#" onclick="javascript: document.forms['form_create'].submit();">
 Envoyer le formulaire </a>
</body>

</html>
 

Fonctions du code

: Initialise une session - (PHP 4, PHP 5)
: Détermine si une variable est affectée - (PHP 4, PHP 5)
: Génère une valeur aléatoire - (PHP 4, PHP 5)
: Récupère la valeur d'une variable, au format chaîne - (PHP 4, PHP 5)
: Retourne le timestamp UNIX actuel - (PHP 4, PHP 5)
: Retourne le code ASCII d'un caractère - (PHP 4, PHP 5)
: Retourne une chaîne formatée - (PHP 4, PHP 5)
: Calcule la taille d'une chaîne - (PHP 4, PHP 5)
: Retourne un segment de chaîne - (PHP 4, PHP 5)
: Ouvre un fichier ou une URL - (PHP 4, PHP 5)
: Récupère la ligne courante sur laquelle se trouve le pointeur du fichier - (PHP 4,...
: Ferme un fichier - (PHP 4, PHP 5)
: Vérifie si un fichier ou un dossier existe - (PHP 4, PHP 5)
: Efface un fichier - (PHP 4, PHP 5)
: Alias de fwrite() - (PHP 4, PHP 5)
: Indique si le fichier est un dossier - (PHP 4, PHP 5)
: Crée un dossier - (PHP 4, PHP 5)
: Coupe une chaîne en segments - (PHP 4, PHP 5)
: Alias de la fonction exit() - (PHP 4, PHP 5)
: Crée un tableau - (PHP 4, PHP 5)
: Retourne toutes les clés d'un tableau - (PHP 4, PHP 5)
: Compte le nombre d'éléments d'un tableau ou le nombre de propriétés...
: Détermine si une variable contient une valeur non nulle - (PHP 4, PHP 5)
: Indique si une valeur appartient à un tableau - (PHP 4, PHP 5)
: Affiche une chaîne de caractères - (PHP 4, PHP 5)
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 

Connexion

 
 

Inclassable

 
 

PHP

 
 
        Publicité