[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Редактирование и удаление некоторых строк из файла
lamokk
Здравствуйте.

Есть файл (текстовый), к нему обращается программа которая постоянно туда пишет данные (каджую 0,1 секунду) и мне еще паралельно нужно проверять данные и удалять их от туда (удаляю верхние данные а программа дописывает в конец файла).

Формат файла:
Apr 10 какой-то текст
Apr 10 какой-то текст
Apr 11 какой-то текст
Apr 12 какой-то текст

Я работаю с файлом так:
$array = file('file.log');
for ($i=0; $i<count($array); $i++{
проверяем если число не равно сегодняшнему, то удаляем строки
}


Так вот вопросы:
1)Как мне отредактировать файл после удаления ненужных строк (т.е. сохранить изменения)?
2)При редактировании и пересохранении файла моим скриптом, доступ к редактированию файла имеет программа и не потеряем ли мы данные при одновременном взаимодействии с файлом?




Спустя 4 минуты, 53 секунды (12.04.2012 - 13:41) bodja написал(а):
1 file_put_contents
2 Гипотетически можно потерять.

Спустя 3 минуты, 31 секунда (12.04.2012 - 13:45) Winston написал(а):
Насчет второго можно попробовать http://ua2.php.net/manual/ru/function.flock.php

Спустя 4 минуты, 46 секунд (12.04.2012 - 13:50) lamokk написал(а):
Уточняем
Программа может писать до нескольких десятков строк в файл за секунду.
Потерять данные нельзя!
Как быть?

Может:
$array = file($dir); //чтитаем все данные
$fh = fopen($dir, 'r+');
fwrite($fh, ''); //обнуляем файл
fclose($fh);
потом работаем с массивом т.к. все данные уже есть


Так можем избавиться от потери данных?

Спустя 2 минуты, 53 секунды (12.04.2012 - 13:53) h234 написал(а):
Используй блокировки, тебе же выше написали

Спустя 6 минут, 22 секунды (12.04.2012 - 13:59) lamokk написал(а):
Спасибо будем пробовать...

Спустя 23 минуты, 43 секунды (12.04.2012 - 14:23) lamokk написал(а):
Подскажите еще про быстродействие

функция $array= file('file.log'); написано что подходит для небольший файлов, мой файл может быть до 40kByte, может можно заменить на что-то другое более быстрое, чтобы так же считовало данные в масив?

Спустя 1 час, 9 минут, 32 секунды (12.04.2012 - 15:32) walerus написал(а):
lamokk
Цитата
мой файл может быть до 40kByte

Цитата
Программа может писать до нескольких десятков строк в файл за секунду.


Это не файлы, это записки ))). У меня файлы по 20Мбайт, а то и больше бывают, все обрабатывается быстро.

При Вашем объеме, "ДО! 40килоБайт" - все равно что использовать, хоть file(); хоть fopen();

Скорее всего подойдет fopen(), из тех соображений, что нужны блокировки файла, других причин я не вижу.

Спустя 20 минут, 51 секунда (12.04.2012 - 15:53) sergeiss написал(а):
Цитата (lamokk @ 12.04.2012 - 14:37)
Есть файл (текстовый), к нему обращается программа которая постоянно туда пишет данные (каджую 0,1 секунду)

Цитата (lamokk @ 12.04.2012 - 14:50)
Программа может писать до нескольких десятков строк в файл за секунду.
Потерять данные нельзя!

Когда вижу такие требования, то сразу появляется вопрос: зачем изобретать велосипед, почему человек не использует БД???

Там это всё решается легко и просто.

Спустя 5 часов, 40 минут, 11 секунд (12.04.2012 - 21:33) walerus написал(а):
sergeiss мейби - "мы не ищем легких путей !" biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.