Есть файл (текстовый), к нему обращается программа которая постоянно туда пишет данные (каджую 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 Гипотетически можно потерять.
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, может можно заменить на что-то другое более быстрое, чтобы так же считовало данные в масив?
функция $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 мейби - "мы не ищем легких путей !"