Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Работа с файлами


Автор: Sardar 1.2.2003, 00:36
Есть скрипт который пишет несколько строк в файл. Этот скрипт запрашивается несколькими пользователями одновременно. Следит ли php за обращениями к файлу или кто успел тот и записал. То есть что бы не получить что-то подобное: Привет отПривет меняот соседа

Есть скрипт который читает из файла и скрипт который что-то туда пишет. Вызываются одновременно. Есть ли гарантия, что пока первый скрипт не закроет файл никто не сможет туда что-нибудь записать. То есть хочу прочесть: Привет всем, а читаю: Чужая лажа...

Я думаю с этим сталкивался каждый.

Автор: Cepera 1.2.2003, 01:06
конечно, такое возможно...
используй функцию flock для блокировки одновременной работы с файлом

Автор: Sardar 14.2.2003, 21:36
Ничего не работает bored.gif bored.gif bored.gif . Попробовал все, даже такую феню:
Код
for($i=0; file_exists("lock_file"); $i++, clearstatecashe()) {
usleep(500000);
if($i>9) mydie("Ресурс заблокирован.");
}

Но хочется проще...

Прежде чем сюда писать, пересмотрел всю инфу которую смог найти:
оказывается flock не работает на "устаревших" файловыx системах. А уменя Win98 mad.gif

Что делать, если хочется что бы было быстро, надежно и не глючило? butbut.gif

Автор: dvl 16.2.2003, 05:04
использовать довольно распространенный хинт - lock-file

скрипт перед записью в файл смотрит есть ли lock-file, если нет - создает его, и пишет в целевой файл, после чего удаляет lock-file.
Если lock-file есть - он тусуется некорое время(1 сек должно хватить) и снова смотрит ...

для читателя файла в этом наверно нет необходимости

Конечно надо добавить проверки что lock-file не забыли удалить и т.д.
если весь этот процесс засунуть в одну ф-ию wrapper - чтобы ее пользовали все ф-ии писатели , может получиться очень удобно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)