powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / не работает flock
21 сообщений из 21, страница 1 из 1
не работает flock
    #39497169
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помощи вчера весь день убил, мозги кипят уже ничего не втыкаю ((
И так, вот собственно скрипт. Всё это надо завести под 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
не работает flock
    #39497170
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS. Да, lock.txt надо создать заранее
...
Рейтинг: 0 / 0
не работает flock
    #39497181
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TolikDflock() внезапно перестал лочить файл одновременно на всех сервах.Какое-то обновление ОС устанавливалось?
...
Рейтинг: 0 / 0
не работает flock
    #39497194
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

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

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

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

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

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

Windows 8.1 + php 7.1 все ок

Windows 8.1 + php 7.1
тот же скрипт, та же хрень
пойду расшибусь об стену
...
Рейтинг: 0 / 0
не работает flock
    #39497212
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
не работает flock
    #39497220
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё? Кончились идеи? Не может быть, что у всех везде работает, один я туплю.
...
Рейтинг: 0 / 0
не работает flock
    #39497227
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, пхпшная функция flock() - это интерфейс к аналогичной системной функции, которая, в свою очередь, взаимодействует с файловой системой.

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

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

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

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

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

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

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

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


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


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