| |
|
|
| | Я делаю чат на файлах. И столкнулся с токой проблемой. Все сообщения чата я хроню в одном файле. Каждая строка это есть сообщение. Как можно выводить последние 20 сообщений из файла? Или можит как-нибудь можно удалить из файла определенное кол-во сообщений? | |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:07)
| | | А какйо смысл? Если в чате будет только 20 сообщений, как-то имхо не правильно, это тогда уже гостевая книга называется (я не вижу смысла делать чат на AJAX в таком случае)... А вообще где-то я на такой же вопрос отввечал, поищите поисковиком... | |
| |
|
|
| |
|
|
| |
для: DEM
(27.10.2006 в 23:38)
| | | Если в чате будет только 20 сообщений
Автор спрашивал про вывод двадцати сообщений... | |
| |
|
|
| |
|
|
| |
для: DEM
(27.10.2006 в 23:38)
| | | Я к примеру тебе говорю 20 сообщений. Представь....в файле у меня 100 и более сообщений и че мне их все выводить? Мне нужно вывести допустим только последние 20-50 сообщений. Или как нибудь их удалять с файла... | |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:41)
| | | Зря Вы чат на файлах делаете... | |
| |
|
|
| |
|
|
| |
для: Unkind™
(27.10.2006 в 23:42)
| | | Я знаю.... что лучше в базе (там бы я уже давно это сделал бы)... но задача у меня такая. | |
| |
|
|
| |
|
|
| |
для: Unkind™
(27.10.2006 в 23:42)
| | | А мне кажется нет... Даже VOODOO-чат построен на файлах (хотя там сокет-сервер написан на C++, C и PERL и весит где-то 160 кб)... Просто я думаю хранить данные в MySQL как-то странно, ну а если у него будет дофига сообщений? Все они будут хранится в БД и всё это будет храниться в БД? | |
| |
|
|
| |
|
|
| |
для: DEM
(27.10.2006 в 23:46)
| | | Просто я думаю хранить данные в MySQL как-то странно, ну а если у него будет дофига сообщений? Все они будут хранится в БД и всё это будет храниться в БД?
Да, а что тут такого? Ну и старые сообщения будут в каждое заданное время удаляться - это же чат, онлайн беседа, где сообщения месяцами храниться не должны, как на форумах...
А в чате очень важна быстрая и качественная выборка сообщений...Игнор, приват и т.д. | |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:07)
| | | Если это чат, то сообщения должны быть не большими ...
следовательно, если сообщений 20 - файл маленький и его смело можно засунуть в массив - file()
<?
$file = file('messages.txt');
if (count($file) > 20)
while (count($file) != 20)
array_shift($file);
// или $file = array_splice($file, -20);
// В массиве 20 строк - теперь осталось их просто вывести.
$str = implode("\r\n", $file);
$msg = fopen ('messages.txt', 'w');
fputs($msg, $str);
fclose($msg);
?>
|
При большом кол-ве обращений к файлу, он может обнулиться .. | |
| |
|
|
| |
|
|
| |
для: kasmanaft
(27.10.2006 в 23:44)
| | | А можно ли сделать так? Считаем в файле кол-во сторок (т.е. сообщений) и если там больше 50 то удаляем первые 30 строк. | |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:53)
| | | Ага :
if (count($file) > 50)
$file = array_splice($file, -20);
|
а вооще-то так мы получим последние 20 сообщений ...
по вопросу правильнее было бы так:
if (count($file) > 50)
$file = array_splice($file, 30);
|
| |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:07)
| | | А какой форма файла, в котором хранятся сообщения? | |
| |
|
|
| |
|
|
| |
для: cheops
(27.10.2006 в 23:44)
| | | сообщения все хронятся в файле следующим образом
ник::Само сообщение::дата | |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:48)
| | | Дата в каком формате хранится? UNIXSTAMP? | |
| |
|
|
| |
|
|
| |
для: cheops
(27.10.2006 в 23:50)
| | |
$data =date("H:i:s Y-m-d");
|
| |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:55)
| | | >
>$data =date("H:i:s Y-m-d");
>
|
Тогда Вам лучше еще сделать ::".time()." | |
| |
|
|
| |
|
|
| |
для: Unkind™
(27.10.2006 в 23:57)
| | | зачем time()? Он мне и так показывет время ($data =date("H:i:s Y-m-d"); выводит след. 17:46:12 2006-10-27) | |
| |
|
|
| |
|
|
| |
для: Roo$
(28.10.2006 в 00:01)
| | | Для того, чтобы удобнее сообщения удалять было, где time < (time() - 3600), например.... | |
| |
|
|
| |
|
|
| |
для: Unkind™
(28.10.2006 в 00:05)
| | | Можно конечно ... но легче наверное воспользоваться ф-й strtotime | |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:48)
| | | А сортировка будет от старых сообщений к новым? Т.е.
ник::Старое сообщение::дата
ник::Новее::дата
ник::Самое новое::дата | |
| |
|
|
| |
|
|
| |
для: Unkind™
(27.10.2006 в 23:51)
| | | да именно так | |
| |
|
|
| |
|
|
| |
для: Roo$
(27.10.2006 в 23:07)
| | | Почему-то мне кажется что вы не ожидали такого наплыва вопросов )))) | |
| |
|
|
| |
|
|
| |
для: DEM
(27.10.2006 в 23:54)
| | | у меня ЕСТЬ такой чат. потестировал я его, уже при четырёх пользователях он уже еле волочился. поэтому не рекомендую.
технически это делается так:
if($ACTION=="add")
{
$file=fopen("chat.txt", "r");
flock($file, 1);
for($lineNr=1;true;$lineNr++)
{
$linia=fgets($file, 81);
if(!$linia)
break;
$linie[$lineNr]=$linia;
}
flock($file, 3);
fclose($file);
$nLines=$lineNr;
$file=fopen("chat.txt", "w");
flock($file, 2);
if($nLines<16)
$lineNr=1;
else
$lineNr=2;
for(;$lineNr<$nLines;$lineNr++)
fwrite($file, $linie[$lineNr]);
fwrite($file, "<FONT COLOR=$KOLOR>$IMIE></FONT> $TEKST");
fwrite($file, "\n");
flock($file, 3);
fclose($file);
}
скрипт писался поляком, имена на польском, но, думаю, всё понятно :-)
|
| |
| |
|
|
| |
|
|
| |
для: Lstasss
(28.10.2006 в 02:11)
| | | Всем большое спасибо за помощь. Все советы учту. | |
| |
|
|