Нужно взять файл.
Заблокировать его на чтение и запись.
Прочитать из него данные.
Модифицировать их.
Записать снова в файл.
Разблокировать файл.
Что то я не пойму почему блокировка только на запись можно установить?
file_put_contents($path, $data, LOCK_EX);
Даже если использовать fopen() то тоже самое.
Может я что то не допонял?
Первое это блокировка на чтение, а второе на запись?
LOCK_SH для получения разделяемой блокировки (чтение).
LOCK_EX для получения эксклюзивной блокировки (запись).
LOCK_UN для снятия блокировки (разделяемой или эксклюзивной).
Все это нужно чтобы при большом количестве запросов к файлу не получилось так чтобы данные считались в момент чтения другим процессом и не записались когда другой процесс читает или пишет.
В варианте
file_get_contents($path);
file_put_contents($path, $data, LOCK_EX);
в момент чтения может считывать несколько процессов что приведет не к правильным результатом при записи.
$fp = fopen($data->path.'.txt', "a+");
flock($fp, LOCK_EX);//КАК ТУТ ЗАБЛОЧИТЬ НА ЧТЕНИЕ И ЗАПИСЬ ОДНОВРЕМЕННО?
$data_arr = fread($fp, filesize($data->path.'.txt'));
$data_arr = unserialize($data_arr);
//код
ftruncate($fp, 0);
fwrite($fp, $data_arr);
fflush($fp);
flock($fp, LOCK_UN);
fclose($fp);