powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Полная блокировка файла в PHP
10 сообщений из 10, страница 1 из 1
Полная блокировка файла в PHP
    #39808330
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю менеджер очереди. Поскольку разборщиков очереди будет несколько необходимо сделать так, чтобы они не брали одни и те же задания.
Собираюсь делать так:
1. Скрипты на сайте записывают в очередь свои задания. Тут с блокировкой как бы понятно. Файл блокируется на запись с помощью функции flock ($fp,LOCK_EX).
2. Запускается несколько разборщиков очереди. Каждый из них должен прочитать файл очереди. Взять из него первое задание и пометить его как начатое, чтобы другой разборщик не брал его. И вот тут возникает проблема. Если разборщиков несколько, то может возникнуть ситуация, когда они одновременно прочтут очередь и выберут одинаковое первое задание.

Чувствую, что решается эта проблема блокировкой файла на чтение и запись каждым разборщиком. Кто первый файл заблокировал, тот читает его и пишет. Остальные ждут в очереди. В интернете не нашел примеров такой реализации. Везде примеры как сделать так, чтобы при записи разные скрипты друг другу не мешали. А мне необходима полная блокировка на чтение и запись. Как это сделать?
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808471
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PrizzrakКто первый файл заблокировал, тот читает его и пишет. Остальные ждут в очереди. В интернете не нашел примеров такой реализации.Да в мануале ж есть пример с ожиданием снятия блокировки. Который без опции LOCK_NB.
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808599
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklePrizzrakКто первый файл заблокировал, тот читает его и пишет. Остальные ждут в очереди. В интернете не нашел примеров такой реализации.Да в мануале ж есть пример с ожиданием снятия блокировки. Который без опции LOCK_NB.

В мануале блокировка на запись. А надо так заблокировать, чтобы ни кто другой ни прочитать ни записать не смог.
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808607
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть можно flock дважды вызвать с одним дескриптором файла, но с разными типами блокировки?
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808608
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть блокировки в общем случае состоит не в создании запрета доступа к файлу или его содержимому. Прочтите мануал и убедитесь, что там ничего нет ничего похожего.

Скрипты, в том числе и для "ни кого другого", пишите единообразно. Примерно так:
- открыли файл (получили дескриптор),
- запросили блокировку файла по этому дескриптору,
-- если получили блокировку (в том числе и после ожидания) - тогда что-то делаете - пишите в файл или читаете его или ещё чего, после блокировку снимаете,
-- в противном случае ничего не делаете.

Запрет же доступа к файлу - это уровень прав и пользователей. Насколько просто оно реализуемо на PHP - это затрудняюсь сказать.

Как вариант, можете посмотреть в сторону СУБД. В том же MySQL на уровне движка есть блокировка таблиц. Или sqlite - тот вообще однопользовательский, можно сказать.
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808615
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleСкрипты, в том числе и для "ни кого другого", пишите единообразно. Примерно так:
- открыли файл (получили дескриптор),
- запросили блокировку файла по этому дескриптору,
-- если получили блокировку (в том числе и после ожидания) - тогда что-то делаете - пишите в файл или читаете его или ещё чего, после блокировку снимаете,
-- в противном случае ничего не делаете.
Так делать и собираюсь. Вопрос лишь в том, как заблокировать файл на запись и чтение. Чтобы другой скрипт не мог его не прочитать ни записать.


vkleКак вариант, можете посмотреть в сторону СУБД. В том же MySQL на уровне движка есть блокировка таблиц. Или sqlite - тот вообще однопользовательский, можно сказать.
На серверах MySQL. Поизучаю этот вариант.
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808625
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PrizzrakТак делать и собираюсь. Вопрос лишь в том, как заблокировать файл на запись и чтение. Чтобы другой скрипт не мог его не прочитать ни записать.Где конкретно в данном алгоритме Вы нашли какую-либо возможность чтения или записи в файл в одном скрипте в то время, как другой скрипт установил на нем эксклюзивную блокировку?

Есть предложение написать код и протестировать его. Когда будут проблемы, то решать их по мере возникновения.

Хороших Вам праздников!
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808633
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklePrizzrakТак делать и собираюсь. Вопрос лишь в том, как заблокировать файл на запись и чтение. Чтобы другой скрипт не мог его не прочитать ни записать.Где конкретно в данном алгоритме Вы нашли какую-либо возможность чтения или записи в файл в одном скрипте в то время, как другой скрипт установил на нем эксклюзивную блокировку?

Есть предложение написать код и протестировать его. Когда будут проблемы, то решать их по мере возникновения.

Хороших Вам праздников!

Попробую. Спасибо.
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808666
shonli95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что холивар устраивать по такому пустяку ? Перед добавлением задания, проверяй задания с заданным файлов. И если такого файла нет, добавляй своё задание.
...
Рейтинг: 0 / 0
Полная блокировка файла в PHP
    #39808672
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PrizzrakВ мануале блокировка на запись. А надо так заблокировать, чтобы ни кто другой ни прочитать ни записать не смог.Блокировка не запрещает другому писать или читать. Установленная блокировка не дает другому получить блокировку.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Полная блокировка файла в PHP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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