Форум → Программирование → 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);
но ничего не вышло,если в мыслях проглядывается хоть капля здравого ума прозьба не смеяться =) -
Пожалуйста, авторизуйтесь, чтобы написать комментарий!