[image]

Корректное использования flock() в PHP

 
RU <Unknown [Автогенерация]> #25.01.2002 16:04
+
-
edit
 
Комментарии и обсуждения страницы Корректное использования flock() в PHP.

Убедительная просьба писать сюда только по теме, касающейся данной страницы!
 
Полностью согласен с вами, у меня такая же проблема, но только с чатом.
Если для вас не такой большой секрет, то не могли бы поделиться опытом как сделать правильную блокировку или организовать совместный доступ к файлам в обычном чате. Тут немного посложнее, так как если у вас 2 обновляющихся фрейма да еще 30-40 чаттеров в онлайне, число обращений довольно большое как для записи в общие файлы сообщения и юзеров, так и чтение из них.
Не знаю будет ли здесь корректно работать предложенный вами алгоритм, не могу сказать заранее но попробую.
Если вы сталкивались с такой проблемой, то пожалуйста ответьте, если не совсем секрет.
igortashkent.ru
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Ну, я же расписал всё в заметке.
Вкратце повторю принцип.

На PHP, при открытии файла на разрушающую запись, он обнуляется в момент вызова функции fopen(), а реальное ожидание освобождения блокировки проходит только по flock()! Поэтому приходится открывать файл на неразрушающую запись - fopen("...","a"); потом блокировать, и только потом обнулять его вручную:

$fh=fopen('data.txt','at') || die("Ошибка открытия файла!");
flock($fh,2);
ftruncate($fh,0);

А тут уже работаем, как если бы открыли файл по обычному fopen('...','w');

При открытии для чтения файл также надо блокировать, иначе можно прочитать не весь файл, а лишь его часть.

Читать функцией file() в таких условиях категорически запрещено - она не пользуется механизмом блокировки вообще.

Что непонятно - уточняй :)
   
Это сообщение редактировалось 24.05.2003 в 15:51

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru