Совместный доступ к файлу на запись и чтение

Nicca

Новичок
Совместный доступ к файлу на запись и чтение

Нужно написать голосование а на хочтинге нет поддержки субд.
Думаю использавть файлы. Как быть когда одновременно много "писателей и читателей"?
Подойдет ли такое:
Для того кто пишет:
$f=fopen('file', 'a+');
flock($f, LOCK_EX);
...
fflush($f);
flock($f, LOCK_UN);
fclose($f);

Для того кто читает:
$f=fopen('file', 'a+');
fclose($f);

Не вызовет ли ошибки такой код если я буду читать файл в который пишется инфа?
Спасибо
 

SiMM

Новичок
> Для того кто читает:
вполне хватит 'r' от греха подальше.

> Не вызовет ли ошибки такой код если я буду читать файл в который пишется инфа?
В читающем скрипте разве что может быть получена не совсем свежая информация. Или даже обрывками - кусок свежий, кусок старый.
 

SiMM

Новичок
Nicca, я не совсем (совсем не) понимаю смысла происходящего при LOCK_SH, LOCK_EX, имхо, надёжнее. А вообще - настолько ли это вам критично - блокировать файл для читателей?
 

Nicca

Новичок
Я делаю голование с помощью файлов. Запись в файл 100% нужно блокировать, а вот как лучше сделать для чтения. я не совсем понимаю
Вы говорите что лучше использовать LOCK_EX:
$f=fopen('file', 'r');
flock($f, LOCK_EX);
READING FILE
flock($f, LOCK_UN);
fclose($f);

Так???
 

SiMM

Новичок
> Ты добрый
Когда зубами к стенке сплю ;) А если серъёзно - вопрос был поставлен достаточно грамотно.
Я похоже прогнал пургу и пока ехал с работы понял, зачем нужен LOCK_SH. Вердикт таков - используй его для "читателей" (как я понял после размышлений, LOCK_EX не даёт открыть/залочить файл ни одному другому процессу, LOCK_SH - не даёт открыть/залочить файл процессу-писателю, но позволяет открывать/лочить его множеству процессов-читателей одновременно).
 
Сверху