Вот здесь поподробнее! Кто создает этот файл, есть ли у тебя возможность удалят/переименовывать этот файл, что будет делать прога, пишущая данные, если файл отсутствует.
Если у тебя есть полный доступ к файлу и если прога, пишущаяе в него данные,будет создавать его опять при его отсутствии, то алгоритм просто "просится": переименовываешь файл, работаешь спокойно с его данными. По окончании обработки удаляешь переименованный файл. Если в это время происходит обновление, то файл будет просто создан заново. И потом ты возьмешь его, переименуешь и т.д. по циклу.
Если же у тебя нет полного доступа к файлу или по другим причинам ты не можешь его модифицировать, то тогда придется использовать функции fopen/fseek для открывания файла и перехода к точке, где были прочитаны предыдущие данные. Опять же, перед открыванием файла можно проверить его размер и дату, чтобы лишний раз не дёргать, когда новых данных нет. Естественно, где-то надо хранить данные о последнем месте чтения, дате, размере.
Насчет дублирования... Я бы возложил всё это на БД. Там есть уже готовые механизмы борьбы с дублированием, так что зачем что-то изобретать?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)