Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает flock или обнуление файла 
:(
    Опции темы
underwater
Дата 30.7.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.7.2007

Репутация: нет
Всего: нет



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

Код

$handle     = fopen($bstatfile, 'a+'); 
$contents    = fread($handle,filesize($bstatfile));
$array   = unserialize($contents);
$array[$uagent] = intval($array[$uagent]) + 1;
ftruncate($handle,0);
flock($handle, LOCK_UN);
fwrite($handle,serialize($array));
fflush($handle);
fclose($handle);

PM MAIL   Вверх
sTa1kEr
Дата 30.7.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



underwater, я вижу в вашем коде разблокирование файла, но не вижу где вы его блокируете. И еще flock() не работает в Windows.
PM MAIL   Вверх
underwater
Дата 30.7.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.7.2007

Репутация: нет
Всего: нет



flock($handle, LOCK_EX);
пропустил строчку
PM MAIL   Вверх
underwater
Дата 30.7.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.7.2007

Репутация: нет
Всего: нет



Поррекомендовали создавать темп файл туда класть обновленную информацию а затем либо rename либо copy.Проверяю сейчас
PM MAIL   Вверх
Anarki
Дата 31.7.2007, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 2
Всего: 11



Цитата(sTa1kEr @ 30.7.2007,  19:26)
И еще flock() не работает в Windows.

С чего бы это? Не работает только на FAT файловых системах. 
и еще в Windows работает жесткая блокировка, а не рекомендательная

Добавлено @ 00:26
underwater,
Советовал бы разобраться в своем коде или хотя бы привести его кусок полностью. Ибо 
Цитата(underwater @  30.7.2007,  19:30 Найти цитируемый пост)
flock($handle, LOCK_EX);пропустил строчку
 ничего не говорит где она пропущена
И еще если снимаете блокировку вручную то перед этим вызываете fflush();



Это сообщение отредактировал(а) Anarki - 31.7.2007, 00:27


--------------------
PM WWW   Вверх
sTa1kEr
Дата 31.7.2007, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Цитата(Anarki @  31.7.2007,  00:13 Найти цитируемый пост)
С чего бы это? Не работает только на FAT файловых системах. 

Верно, спасибо, что поправили.
PM MAIL   Вверх
triclosan
Дата 11.2.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: нет
Всего: 12



Скажите пожалуйста, если файл залочен путем flock вторая копия скрипта остановится и будет ждать отлоченья или выбросит исключение/ошибку? (В хелпе не нашел)
PM MAIL   Вверх
GeneralElectric
Дата 11.2.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 0
Всего: 16



А самому попробовать? А предположить, как будет правильнее? ;-)

По поводу первоначального вопроса, хоть и устаревшего. Ситуация фантастическая. Блокировка там явно стоит где надо, и все делается правильно. Судя по всему, автор где-то напутал, и именно этим вызвано то, что он никак в теме не отписался...
PM MAIL   Вверх
FractalizeR
Дата 14.2.2008, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: нет
Всего: 4



Цитата(triclosan @ 11.2.2008,  18:20)
Скажите пожалуйста, если файл залочен путем flock вторая копия скрипта остановится и будет ждать отлоченья или выбросит исключение/ошибку? (В хелпе не нашел)

Зависит от параметра wouldblock. Исключения и ошибки flock не порождает. Если wouldblock = false и блокировку захватить не удалось, вернет false. Если wouldblock = true, думаю, будет висеть, пока его php не прибьет по time_limit или пока блокировку не захватит.


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.