Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: flock(защита файлов от изменений их внутри)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kilogram
Отправлено: 26 Мая, 2012 - 19:44:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Защитил файл чтоб его нельзя было изменить, но он все равно изменился, почему? Защита вроде была но Сан Саныч дописалось в файл.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $fp = fopen('1.txt', 'a');
  3.  
  4. flock($fp,LOCK_SH);
  5.  
  6. $written = fputs($fp, 'Семен Семеныч');
  7.  
  8. var_dump($written); //
  9.  
  10. fclose($fp);
  11. ?>
 
 Top
Мелкий Супермодератор
Отправлено: 26 Мая, 2012 - 19:51:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




flock - блокирование файла от одновременного доступа. И то только если все желающие что-то сделать с файлом сперва просят блокировку.


-----
PostgreSQL DBA
 
 Top
sKaa
Отправлено: 26 Мая, 2012 - 19:51:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Может потому, что flock "запирает" файл от всех других процессов кроме текущего...
 
 Top
OrmaJever Модератор
Отправлено: 26 Мая, 2012 - 19:52:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




скрипт выполняется доли секунды, после завершения блокировка снимается, вы просто не попали в эти доли секунды.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
kilogram
Отправлено: 26 Мая, 2012 - 19:56:31
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




То есть нужно чтоб скрипт выполнялся больш секунды?
 
 Top
OrmaJever Модератор
Отправлено: 26 Мая, 2012 - 20:14:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




kilogram эта функция не должна намертво блокировать файл, а только что бы всё записывалось последовательно. Это аналок Мьютексов из Си, когда программа работает в несколько потоков и каждый записывает что-то в файл то будет писатся как попало, а блокировка упорядочивает запись.
Например вы взяли последнюю строку из файла (пусть это будет число) и решили прибавить к нему 1, но в это время кто-то ещё запустил скрипт и он отработал быстрее и когда вы будете записывать то будет уже не верное (два одинаковых) значение т.к. вы и другая копия скрипта взяли одно и тоже значение. Вот имено для этого и нужны блокировки.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Мая, 2012 - 20:27:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Вау ребята, обсуждадэ, а работает ли это вообще под вяндами?
(Добавление)
Ану смастрякайте тест у кого форточки Закатив глазки
 
 Top
LIME
Отправлено: 26 Мая, 2012 - 20:31:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




OrmaJever пишет:
эта функция не должна намертво блокировать файл, а только что бы всё записывалось последовательно.
не
намертво блокирует и все
пока не освободит никто писать не может
только читать
ну это от режима зависит
да?
(Добавление)
DeepVarvar зачем? пишут что можно
нальзя только продолжить без ожидания блокировки в винде
 
 Top
OrmaJever Модератор
Отправлено: 26 Мая, 2012 - 20:49:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




DeepVarvar пишет:
Вау ребята, обсуждадэ, а работает ли это вообще под вяндами?

Цитата:
Замечание: flock() является обязательным под Windows.

Да подними ты винду в своих глазах на пару ступеней, не настолько она плохая. Чес слово.
(Добавление)
LIME пишет:
намертво блокирует и все

Я не это имел ввиду, да она блокирует намертво, но только во время работы скрипта, ТС видимо решил что запустил скрипт он заблокировал файл и дальше ОС не может его вобще использовать. Это даже описано в описании функции flock().
Цитата:
Блокировка снимается при помощи этой же функции fclose() (которая также автоматически вызывается при завершении выполнения скрипта).


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Мая, 2012 - 20:57:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




OrmaJever пишет:
Да подними ты винду в своих глазах на пару ступеней
Она сама виноватая... Недовольство, огорчение
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB