Newsgroup: it.comp.www.php
Titolo: chat

Ho creato una chat nel sito. Niente di importante ma, cosě com'č a me 
starebbe bene se non fosse....
scrivo i testi in un file
un post per riga
scrivo con a+
supponiamo che in un certo momento, sulla chat ci sia scritto quanto segue:
1111
2222
3333
4444
5555
scrivo 6666 e mi ritrovo
1111
2222
3333
4444
6
5555
in parole povere viene sovvertito l'ordine e dei "6" ne compare soltanto 
uno.
Quello che vi ho riportato non č un esempio reale ma ciň che accade č molto 
simile.
La causa a cosa si puň attribuire?
Il problema del server (che va due ore avanti e dopo un secondo due ore 
indietro) puň centrarci?
Premesso che:
l'apertura del file, la scrittura del testo e la chiusura del file avvengono 
in tre righe consecutive...
la pagina che legge (ma non scrive) il file fa il refresh ogni 5 secondi..
la lettura puň ostacolare la scrittura?
Cioč... se in quel preciso momento che la pagina di un utente fa un 
refresh... un altro utente scrive un messaggio nel file... che succede?
E' possibile impedire agli altri utenti di scrivere sul file se questo č 
attualmente aperto in scrittura?

attualmente aperto in scrittura?
man flock()
Leonardo
-- 
 What do you make, so fair and bright;
 What do you build with sails for flight;
 What do you weave with wool so white?

 scrivo con a+
secondo me come metodologia è piuttosto sbagliata.
proverei un database in cui puoi flaggare le parti di testo non ancora lette
dal recipient.
la tabella la creerei al volo di tipo volatile (HEAP)
quindi: 
si crea un token tra i due chattatori metti
#34453
crei la tabella HEAP chat_34453
CREATE TABLE `chat_34453` (
  `id` int(11) NOT NULL default '0',
  `id_from` int(10) unsigned NOT NULL default '0',
  `id_to` int(10) unsigned NOT NULL default '0',
  `read` tinyint(3) unsigned NOT NULL default '0',
  `time` int(10) unsigned NOT NULL default '0',
  `message` varchar(255) character set utf8 collate utf8_bin NOT NULL
default '',
  PRIMARY KEY  (`id`)
) ENGINE=HEAP
fai le tue select e le tue insert
poi ci metti uno script per far pulizia tipo
se è da un 10 minuti che la tabella chat_34453 non è usata distruggila
se i due tizi tornano a chattare ricreala
e così via. o anche altro
Sat_
-- 
777 fanno 21, arriva la volante e non c'è nessuno

 proverei un database
------------------
In quel dominio non ho database
ciao 

 1111/2222/3333/4444/6/5555
----
Io non scrivo sul file "carattere per carattere".
sul file c'è "1111/2222/3333/4444/5555"
Quando l'utente "6666", ci sarà un momento in cui farà clic su INVIA. Se in 
quell'istante l'ultimo numero era 5555 come è possibile che che uno (o più) 
"6" vadano a finire prima del 5?
Inoltre... la lettura ("r") del file può incidere sulla successiva scrittura 
da parte di un altro utente?
Vado a leggermi il manuale.
Grazie 

 man flock()
---------------
Warning: flock(): 2 is not a valid stream resource in 
/rootdomain/it/s/a/
salvatorepaci.it/public_html/chat/insert.php
 on line 18
ecco l'errore che mi dà con il seguente codice:
 if (file_exists("messaggi.exe"))
  {
  $fd=fopen("messaggi.exe","a+");
  flock($fd, LOCK_EX);
  fwrite($fd, $stringa);
  fclose($fd);
  flock($fd, LOCK_UN);
  }
 } 

 }
----------------
scusatemi: ero ubriaco :)))
non aprivo il file