Форум → Программирование → PHP для идиотов → удаление первой строки из файла
удаление первой строки из файла
-
имеется скрипт-пишет инфу построчно в фаил,крайняя запись записывается в нижнюю часть.
необходимо удалять старые записи оставляя скажем 100 строк в файле
имеется скрипт удаляющий крайнюю запись в txt , как раз ту которая у меня самая свежая.
как решить данную проблему:
-записывать строки так же в нижнюю часть файла и переписать скрипт для удаления верхней,первой строки
-переписать скрипт и записывать строки в верхнюю часть файла а удаляющий скрипт оставить без изменения?
? -
8 апреля 2012 г. 21:43, спустя 28 минут 40 секунд
как делается ротация логов
1.log
2.log
3.log
…
старые файлы архивируются или удаляютсяне всё полезно, что в swap полезло -
9 апреля 2012 г. 0:19, спустя 2 часа 36 минут 24 секунды
Самый простой вариант -$f = file('my.log'); $f[] = 'olololololol'; if (count($f) > 100) unset($f[0]); file_put_contents('my.log', join("\n", $f));
А вообще я вот таким пользуюсь:class Log { /** * @static * @param string $message * @param bool|string $filename * @return bool */ public static function write($message, $filename = false) { if (is_array($message)) $message = serialize($message); $filename = APPLICATION_PATH . 'logs/' . (($filename) ? $filename : date("m.d.y")) . '.log'; $maxSize = Config::get('application', 'log_file_max_size_mb'); if ($maxSize) { $maxSize *= (1024 * 1024); if (file_exists($filename) && filesize($filename) > $maxSize) { return false; } } $message = date("F j, Y, g:i a") . "::: " . str_replace(array("\r", "\n", "\t"), '', trim($message)) . ".\r\n"; $log = fopen($filename, "ab"); fseek($log, 0); fwrite($log, $message); fclose($log); return true; } /** * @static * @param \Exception $e * @return void */ public static function writeException(\Exception $e) { self::write("Exception: {$e->getMessage()}, at {$e->getFile()}:{$e->getLine()}", 'errors'); } }
-
-
9 апреля 2012 г. 14:57, спустя 9 минут 40 секунд
вчера пост не дописал,засыпал =) вот как я пытался решить
1
# удаление нужной строки
$fileName = "1EE.txt";
$lineToKill = 20;
$stringsArray = file($fileName);
if($lineToKill <= count($stringsArray)) {
$fileHandle = fopen($fileName, "w");
$lineToKill–;
foreach($stringsArray as $key => $value) {
if($key != $lineToKill) fwrite($fileHandle, $value);
else echo "Строка ".$lineToKill." удалена.";
}
fclose($fileHandle);
}
вот скрипт удаляет 19-ю строку-меняю на $lineToKill = 0; и делаю break если количество строк менее скажем 100
——————
2
вот кусочек скрипта записывающий строку в фаил
file_put_contents("file.txt",$f.':'.$date.':'.$s.':'.$t.':'.$id.':'.$try.':'.$ber.':'.$s.':'.$on."\n",FILE_APPEND);
установить каретку в начало строки изменив на
file_put_contents("file.txt",$f.':'.$date.':'.$s.':'.$t.':'.$id.':'.$try.':'.$ber.':'.$s.':'.$on."\r\n",FILE_APPEND);
но ничего не вышло,если в мыслях проглядывается хоть капля здравого ума прозьба не смеяться =) -
Пожалуйста, авторизуйтесь, чтобы написать комментарий!