Bonjour,
j'essaye actuellement de mettre en place un chat en utilisant comet.
J'ai utilisé le code suivant, qui marche très bien : http://www.zeitoun.net/articles/comet_and_php/start
Les messages sont stockés dans un fichier data.txt
Or, je voudrais pouvoir spécifier le nom du fichier dans lequel sont enregistrés les messages. Je passe ce nom dans l'url, et je le récupère dans backend.php
Le problème, c'est que quand j'utilise la variable venant de l'URL, mon chat ne s'affiche plus. En effet, la méthode handleResponse() n'est plus appellé dans ma partie Javascript.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php // store new message in the file $msg = isset($_GET['msg']) ? $_GET['msg'] : ''; $usr = isset($_GET['usr']) ? $_GET['usr'] : ''; //Je récupère ici le nom du fichier a utiliser $file = isset($_GET['file']) ? $_GET['file'] : ''; $concept = 'test'; $filename = dirname(__FILE__).$file.'.txt'; if ($msg != '') { $date = date('H:i:s'); $msg = $usr . $concept . $date . " : " . $user . $msg . "\n"; file_put_contents($filename,$msg, FILE_APPEND); die(); } // infinite loop until the data file is not modified $lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0; $currentmodif = filemtime($filename); while ($currentmodif <= $lastmodif) // check if the data file has been modified { usleep(1000000); // sleep 10ms to unload the CPU clearstatcache(); $currentmodif = filemtime($filename); } // return a json array $response = array(); $file = file_get_contents($filename); $splited = explode("\n", $file); $size = count($splited); $response['msg'] = $splited[$size - 2]; $response['timestamp'] = $currentmodif; echo json_encode($response); flush(); /* filename: backend.php */
Les messages sont écris dans le fichier que j'ai passé dans l'url, mais ça s'arrête la.
Si dans backend.php, je définis $file en dur, tout se passe bien.
En fait c'est vraiment quand je récupère le nom du fichier par $_GET[] que ça ne marche pas (j'écris dans le fichier, mais pas de retour dans le Javascript).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
45
46
47
48
49
50
51
52
53 // comet implementation var Comet = function (data_url) { this.timestamp = 0; this.url = data_url; this.noerror = true; this.connect = function() { var self = this; $.ajax({ type : 'get', url : this.url, dataType : 'json', data : {'timestamp' : self.timestamp}, success : function(response) { self.timestamp = response.timestamp; self.handleResponse(response); self.noerror = true; }, complete : function(response) { // send a new ajax request when this request is finished if (!self.noerror) { // if a connection problem occurs, try to reconnect each 5 seconds setTimeout(function(){ comet.connect(); }, 5000); }else { // persistent connection self.connect(); } self.noerror = false; } }); } this.disconnect = function() {} this.handleResponse = function(response) { $('#chatContent').append('<div>' + response.msg + '</div>'); } this.doRequest = function(request, usr, file) { $.ajax({ type : 'get', url : this.url, data : {'msg' : request, 'usr' : usr, 'file' : file} }); } } var comet = new Comet('./chat/backend.php'); comet.connect();
Est-ce que quelqu'un aurait une idée de la direction dans laquelle je pourrais chercher ?
Merci d'avance
Sebastian
Partager