Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / не работает flock / 21 сообщений из 21, страница 1 из 1
30.07.2017, 10:55
    #39497169
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
Прошу помощи вчера весь день убил, мозги кипят уже ничего не втыкаю ((
И так, вот собственно скрипт. Всё это надо завести под php 5.4.45. Проверял на серве CentOS 7 и под виндой на OpenServer 5.2.2.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$timer = microtime(true);
$fp = fopen("lock.txt", "r+b"); 
while (!flock($fp, LOCK_EX | LOCK_NB)) { 
  echo "Пытаемся получить доступ к файлу <br>"; 
  sleep(1); 
} 
sleep(5);
flock($fp, LOCK_UN); 
fclose($fp);

echo microtime(true) - $timer;


Проверить скрипт можно двойным запуском. Первая копия отработает и покажет ровно 5 сек. Вторая должна отобразить что-то вроде этого:
Код: php
1.
2.
3.
4.
5.
Пытаемся получить доступ к файлу
Пытаемся получить доступ к файлу
Пытаемся получить доступ к файлу
Пытаемся получить доступ к файлу
6.123


Проблема вот в чем. Еще неделю назад этот скрипт работал и я про него забыл, пока не начались проблемы с совместным доступом к файлу. Я подумал, что раз тестирую на винде, то может случиться что угодно. Ан нет! На линухах и не только под цент та же ситуация.
flock() внезапно перестал лочить файл одновременно на всех сервах. Он работает так, как будто файл не залачивается вообще никак, оба скрипта отрабатывают ровно 5 сек и не выдают никаких ошибок.
Что делать, куда копать?
...
Рейтинг: 0 / 0
30.07.2017, 10:56
    #39497170
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
PS. Да, lock.txt надо создать заранее
...
Рейтинг: 0 / 0
30.07.2017, 11:25
    #39497181
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
TolikDflock() внезапно перестал лочить файл одновременно на всех сервах.Какое-то обновление ОС устанавливалось?
...
Рейтинг: 0 / 0
30.07.2017, 12:03
    #39497194
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
vkle,

На своих сервах нет. А что, скрипт рабочий шо ле?
...
Рейтинг: 0 / 0
30.07.2017, 12:10
    #39497196
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
TolikDvkle,

На своих сервах нет. А что, скрипт рабочий шо ле?

Windows 8.1 + php 7.1 все ок
...
Рейтинг: 0 / 0
30.07.2017, 12:31
    #39497201
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
TolikDА что, скрипт рабочий шо ле?Вполне рабочий. Только вот чтоб придать ему автономность и обойтись без
TolikDPS. Да, lock.txt надо создать заранееможно сделать
Код: php
1.
fopen("lock.txt", "w+")

Конечно, если это не противоречит логике.
...
Рейтинг: 0 / 0
30.07.2017, 12:34
    #39497204
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
Или даже так
Код: php
1.
fopen(__FILE__, "r+")
...
Рейтинг: 0 / 0
30.07.2017, 13:19
    #39497210
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
HettTolikDvkle,

На своих сервах нет. А что, скрипт рабочий шо ле?

Windows 8.1 + php 7.1 все ок

Windows 8.1 + php 7.1
тот же скрипт, та же хрень
пойду расшибусь об стену
...
Рейтинг: 0 / 0
30.07.2017, 13:25
    #39497212
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
vkle
Код: php
1.
fopen("lock.txt", "w+")

Конечно, если это не противоречит логике.
Не противоречит, ибо изначальный код такой:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
$fl = fopen($fp, 'w+');
$i = 0;
while (!($fl && flock($fl, LOCK_EX | LOCK_NB))) {
	$i++;
	if ($i >= QUE_TIME_OUT*1000) {
		return false;
	}
	usleep(1000);
};
...



А тот что выше это результат бесплодных изысканий глубокой мысли
...
Рейтинг: 0 / 0
30.07.2017, 13:57
    #39497220
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
Всё? Кончились идеи? Не может быть, что у всех везде работает, один я туплю.
...
Рейтинг: 0 / 0
30.07.2017, 14:30
    #39497227
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
Собственно, пхпшная функция flock() - это интерфейс к аналогичной системной функции, которая, в свою очередь, взаимодействует с файловой системой.

TolikDнеделю назад этот скрипт работалКод скрипта за это время не менялся? Тогда надо смотреть, что из вышеперечисленного изменилось за неделю.

Единственное предположение, что на минувшей неделе файловая система, где размещается lock.txt перенесена на удаленный сервер, откуда и монтируется. Но такое изменение как-то сложно не заметить.
Попробуйте разместить файл блокировки на других файловых системах сервера, куда есть доступ (в /tmp, например).

TolikDОн работает так, как будто файл не залачивается вообще никак, оба скрипта отрабатывают ровно 5 сек и не выдают никаких ошибок.Вы полагаете, что flock() стал _всегда_ возвращать TRUE, как признак успешной блокировки, при этом фактически не блокируя файл?
...
Рейтинг: 0 / 0
30.07.2017, 14:39
    #39497228
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
vkle,
vkleВы полагаете, что flock() стал _всегда_ возвращать TRUE, как признак успешной блокировки, при этом фактически не блокируя файл?
Да, именно так и полагаю. То есть именно так и происходит: flock всегда возвращает TRUE. Но я похоже что нащупал в чем проблема, похоже что даже не в flock

Код скрипта был отлажен до мсек и отправлен на серв без изменений. Любые проблемы тестирую на винде в отдельном пхп файлике.
...
Рейтинг: 0 / 0
30.07.2017, 15:33
    #39497238
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
TolikD,

Всё, код рабочий, виноват хром, расходимся
...
Рейтинг: 0 / 0
30.07.2017, 15:53
    #39497240
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
А может блокировка сессий просто? Причём тут хром?
...
Рейтинг: 0 / 0
30.07.2017, 15:55
    #39497241
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
HettА может блокировка сессий просто?Вряд ли. Тогда б на старте сессии зависал скрипт.

HettПричём тут хром?+1
...
Рейтинг: 0 / 0
30.07.2017, 16:55
    #39497266
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
Откройте скрипт на двух вкладках сразу, хром будет ожидать загрузки первой вкладки из-за команды sleep, вот и будет иллюзия кривой работы скрипта
...
Рейтинг: 0 / 0
30.07.2017, 16:57
    #39497267
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
На IE такого не происходит
...
Рейтинг: 0 / 0
30.07.2017, 17:29
    #39497281
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
Видимо, Хром, как и ФФ, не торопится дважды ломиться на один и тот же URL, активно пользуясь кешем. Логично предположить, что если ответ на первый запрос вернет заголовок с предложением "закешировать на часок", то второй запрос и вовсе не потребуется отправлять. Потому и ждет. Вообще, есть простой прием, позволяющий "отключить кеш" - делать URL уникальным для каждого запроса. Например, подставляя параметр со случайным числом. Или, в Вашем случае, на одной из вкладок добавить в адрес что-то вроде "?1". По идее, должно сработать.
...
Рейтинг: 0 / 0
30.07.2017, 17:42
    #39497288
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
vkle,

отдача корректных заголовков сервером - не подойдёт?
...
Рейтинг: 0 / 0
30.07.2017, 18:29
    #39497313
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
По дефолту и так не будет никакого кэширования.
Вообще зачем было это в браузере запускать, когда проще из консоли такие эксперименты проводить.
...
Рейтинг: 0 / 0
30.07.2017, 20:25
    #39497355
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает flock
Изопропилvkle,

отдача корректных заголовков сервером - не подойдёт?Нет. Браузер обнаруживает, что точно такой же запрос уже отправлен еще до получения заголовков ответа.


HettПо дефолту и так не будет никакого кэширования.Ага, не будет. Или будет. От заголовков ответа зависит. Только браузер об этом _пока_ещё_ ничего не знает по понятной причине.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / не работает flock / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]