Ну, я же расписал всё в заметке.
Вкратце повторю принцип.
На PHP, при открытии файла на разрушающую запись, он обнуляется в момент вызова функции fopen(), а реальное ожидание освобождения блокировки проходит только по flock()! Поэтому приходится открывать файл на неразрушающую запись - fopen("...","a"); потом блокировать, и только потом обнулять его вручную:
$fh=fopen('data.txt','at') || die("Ошибка открытия файла!");
flock($fh,2);
ftruncate($fh,0);
А тут уже работаем, как если бы открыли файл по обычному fopen('...','w');
При открытии для чтения файл также надо блокировать, иначе можно прочитать не весь файл, а лишь его часть.
Читать функцией file() в таких условиях категорически запрещено - она не пользуется механизмом блокировки вообще.
Что непонятно - уточняй