Код (PHP): if (filesize("data/chat.txt") > 100 * 1024) { //file_put_contents("chat.txt", file_get_contents("chat.txt", NULL, NULL, 3*1024), LOCK_EX); //@chmod("$fp", 0644); // удаление последней строки if ($user['id'] != '13328') { $file = file("tmpdisk/chat.txt"); $fp = fopen("tmpdisk/chat.txt", "w"); flock($fp, LOCK_EX); for ($s = 0; $s < count($file) / 1.6; $s++) { unset($file[$s]); } fputs($fp, implode("", $file)); fputs($fp, "\r\n:[" . time() . "]:[{$user['login']}]:[<font color=\"" . (($user['color']) ? $user['color'] : "#000000") . "\">" . ($_GET['text']) . "</font>]:[" . $user['room'] . "]\r\n"); //работа с файлом flock($fp, LOCK_UN); fclose($fp); } } Как сделать так, чтобы выводило из файла chat.txt только последние 10 записей?
Грузить весь файл лога чата - не лучшее решение. Тут есть класс для шустрой навигации по файлу viewtopic.php?f=2&t=20829
если файл содержит немного строк - то лучше читать сразу весь! если это "лог" на миллион записей - то даже ваш вариант не лучшее решение. ибо будет тормозить все больше и больше. текущий файл чата обычно содержит последние N-записей и все. полный лог должен лежать отдельно.
Я переделал. Код (PHP): if (filesize("tmpdisk/chat.txt") > 100 * 1024) { //file_put_contents("chat.txt", file_get_contents("chat.txt", NULL, NULL, 3*1024), LOCK_EX); //@chmod("$fp", 0644); // удаление последней строки if ($user['id'] != '13328') { $textchat = array_slice(file("tmpdisk/chat.txt","a"), -10); $file = file("tmpdisk/chat.txt"); $fp = fopen($textchat); flock($fp, LOCK_EX); for ($s = 0; $s < count($file) / 1.6; $s++) { unset($file[$s]); } fputs($fp, implode("", $file)); fputs($fp, "\r\n:[" . time() . "]:[{$user['login']}]:[<font color=\"" . (($user['color']) ? $user['color'] : "#000000") . "\">" . ($_GET['text']) . "</font>]:[" . $user['room'] . "]\r\n"); //работа с файлом flock($fp, LOCK_UN); fclose($fp); } } Подскажите, где тут ошибка братцы кролики)