[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с блокировкой файла flock
Manul_87
Здравствуйте.

При некотором совпадении процессов не смотря на блокировку обрезается часть файла.

Более подробно:

$fp=fopen($rfile,"a+");
flock(fp, LOCK_EX);


foopen открывает файл. Так вот если начало второго процесса (наложение блокировки) попадает между fopen и flock , то снизу из файла пропадает кол-во символов схожее с количеством дописанном во втором процессе, причем данные записанные во втором процессе (если изменения были допустим в середине файла), сохраняются.

Получается что если файл успел открыться а блокировка наложиться не успела то открытый поток $fp сохраняет то же количество байт информации что было в открытом потоке а все остальное отрезает.

Легко это проверил, поставив sleep между fopen и flock и запустив второй процесс без sleep


Подскажите пожалуйста можно ли как-нибудь решить этот баг? Ведь сначала поставить блокировку а потом открывать не получается.

Заранее благодарен.
Manul_87
Баг устранил, оказывается дело было в в функции fread которая читает файл до определенного байта.

Прописал:

$file_pm=fread($fp, filesize("file.txt")+100000);

И все стало работать, но почему так и не понял, ведь измерение величины файла функцией filesize происходит уже после окончания второго процесса.
Быстрый ответ:

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