Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужно ли блокировать файл при помощи flock() при работе с функцией file()?
 
 автор: Yuriev   (25.03.2011 в 14:16)   письмо автору
 
 

По-гуглил и не нашёл ответа.
Надо ли перед file() ставить flock()?
Или может file сама это делает?

  Ответить  
 
 автор: psychomc   (25.03.2011 в 14:24)   письмо автору
 
   для: Yuriev   (25.03.2011 в 14:16)
 

не надо. file не делает, да и зачем ей это делать? она же читает файл, а не записывает. блокировку стоит делать перед записью, да и то, только тогда, когда существует вероятность того, что кто-то кроме вас может попытаться записать этот же файл в один и тот же момент времени (имхо конечно)

  Ответить  
 
 автор: Yuriev   (25.03.2011 в 18:57)   письмо автору
 
   для: psychomc   (25.03.2011 в 14:24)
 

В том то и дело, что во время работы file() с файлом возможно другим скриптом будет запись в этот файл.
Вот и терзают меня смутные сомнения, а в сети все примеры для flock написаны с другими функциями.

  Ответить  
 
 автор: psychomc   (25.03.2011 в 22:11)   письмо автору
 
   для: Yuriev   (25.03.2011 в 18:57)
 

не в ту сторону вы копаете. в мануал нужно смотреть.
второй аргумент функции flock вам нужен:

LOCK_SH - общая блокировка, чтение
LOCK_EX - эксклюзивная блокировка, запись.

в конечном итоге, вам либо вообще не нужно использовать функцию flock, либо использовать ее со вторым параметром LOCK_EX в том скрипте, в котором происходит запись. когда ее стоит использовать я написал в предыдущем сообщении.

p.s кстати, а вас не смутил тот момент, что а в сети все примеры для flock написаны с другими функциями. ? 8-)
более того, как вы вообще собирались использовать вместе file и flock, если функция file возвращает массив данных файла, а для функции flock нужен дескриптор файла как обязательный параметр?

  Ответить  
 
 автор: Yuriev   (25.03.2011 в 22:59)   письмо автору
 
   для: psychomc   (25.03.2011 в 22:11)
 

Т. е. во время чтения функцией file() файла ни какой другой процесс не сможет изменить этот файл?
Мне другие скрипты недоступны, программируются не менгой и работают когда и сколько не спрашивая и не предупреждая меня.

  Ответить  
 
 автор: psychomc   (25.03.2011 в 23:07)   письмо автору
 
   для: Yuriev   (25.03.2011 в 22:59)
 

думаю, что если ваш скрипт занимается только чтением, то смотреть в сторону flock вообще не стоит. пусть голову ломают те, кто пишет скрипт записи

  Ответить  
 
 автор: Yuriev   (25.03.2011 в 23:18)   письмо автору
 
   для: psychomc   (25.03.2011 в 23:07)
 

Я ни с чего не взял, я же только спрашиваю.
Пусть пишут и ломают голову другие - не возражаю.
Но меня интересует только чтение файла и только функцией file.

  Ответить  
 
 автор: psychomc   (25.03.2011 в 23:24)   письмо автору
 
   для: Yuriev   (25.03.2011 в 23:18)
 

тогда http://www.php.net/manual/en/function.file.php - то что доктор прописал :)
только посмотрите еще в сторону других функций чтения файла (fgets, fread, file_get_contents)может быть они вам больше подойдут.

  Ответить  
 
 автор: Саня   (25.03.2011 в 23:37)   письмо автору
 
   для: Yuriev   (25.03.2011 в 14:16)
 

Достаточно будет проверить is_readable().

  Ответить  
 
 автор: Yuriev   (26.03.2011 в 13:38)   письмо автору
 
   для: Yuriev   (25.03.2011 в 14:16)
 

Как то не получается у меня вопросы задавать понятно.
Попробую ещё раз.
Функция file начала читать из файла. На момент чтения ею второй строки, другой скрипт меняет местами первую и третью строки. В итоге иеем массив, содержимое которого
первая строка,
вторая строка,
первая строка.
А это не соответствует ни тому, что было в файле, ни тому, что есть сейчас.
И кому нужны будут такие случайные данные, иными словами, белиберда?

Возможна ли такая ситуация или во время чтения этой функцией ни кто не сможет изменить файл?

  Ответить  
 
 автор: cheops   (26.03.2011 в 13:45)   письмо автору
 
   для: Yuriev   (26.03.2011 в 13:38)
 

Более подробнее опишите другой скрипт, который туда будет писать - так как от того, что он делает все и зависит (если он использует блокировки, все будет нормально, если нет - может получиться по всякому, вплоть до того, что file() столкнется с пустым файлом). Вообще, пока все скрипты, пишущие в файл используют блокировку - все будет хорошо и у тех, кто читает и у тех, кто пишет. Как только, кто-то один не использует блокировку - вопрос времени, когда данные в файле будут безвозвратно повреждены.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования