|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
Делаю менеджер очереди. Поскольку разборщиков очереди будет несколько необходимо сделать так, чтобы они не брали одни и те же задания. Собираюсь делать так: 1. Скрипты на сайте записывают в очередь свои задания. Тут с блокировкой как бы понятно. Файл блокируется на запись с помощью функции flock ($fp,LOCK_EX). 2. Запускается несколько разборщиков очереди. Каждый из них должен прочитать файл очереди. Взять из него первое задание и пометить его как начатое, чтобы другой разборщик не брал его. И вот тут возникает проблема. Если разборщиков несколько, то может возникнуть ситуация, когда они одновременно прочтут очередь и выберут одинаковое первое задание. Чувствую, что решается эта проблема блокировкой файла на чтение и запись каждым разборщиком. Кто первый файл заблокировал, тот читает его и пишет. Остальные ждут в очереди. В интернете не нашел примеров такой реализации. Везде примеры как сделать так, чтобы при записи разные скрипты друг другу не мешали. А мне необходима полная блокировка на чтение и запись. Как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 14:39 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
PrizzrakКто первый файл заблокировал, тот читает его и пишет. Остальные ждут в очереди. В интернете не нашел примеров такой реализации.Да в мануале ж есть пример с ожиданием снятия блокировки. Который без опции LOCK_NB. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 17:55 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
vklePrizzrakКто первый файл заблокировал, тот читает его и пишет. Остальные ждут в очереди. В интернете не нашел примеров такой реализации.Да в мануале ж есть пример с ожиданием снятия блокировки. Который без опции LOCK_NB. В мануале блокировка на запись. А надо так заблокировать, чтобы ни кто другой ни прочитать ни записать не смог. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 22:17 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
Может быть можно flock дважды вызвать с одним дескриптором файла, но с разными типами блокировки? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 22:53 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
Суть блокировки в общем случае состоит не в создании запрета доступа к файлу или его содержимому. Прочтите мануал и убедитесь, что там ничего нет ничего похожего. Скрипты, в том числе и для "ни кого другого", пишите единообразно. Примерно так: - открыли файл (получили дескриптор), - запросили блокировку файла по этому дескриптору, -- если получили блокировку (в том числе и после ожидания) - тогда что-то делаете - пишите в файл или читаете его или ещё чего, после блокировку снимаете, -- в противном случае ничего не делаете. Запрет же доступа к файлу - это уровень прав и пользователей. Насколько просто оно реализуемо на PHP - это затрудняюсь сказать. Как вариант, можете посмотреть в сторону СУБД. В том же MySQL на уровне движка есть блокировка таблиц. Или sqlite - тот вообще однопользовательский, можно сказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 23:12 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
vkleСкрипты, в том числе и для "ни кого другого", пишите единообразно. Примерно так: - открыли файл (получили дескриптор), - запросили блокировку файла по этому дескриптору, -- если получили блокировку (в том числе и после ожидания) - тогда что-то делаете - пишите в файл или читаете его или ещё чего, после блокировку снимаете, -- в противном случае ничего не делаете. Так делать и собираюсь. Вопрос лишь в том, как заблокировать файл на запись и чтение. Чтобы другой скрипт не мог его не прочитать ни записать. vkleКак вариант, можете посмотреть в сторону СУБД. В том же MySQL на уровне движка есть блокировка таблиц. Или sqlite - тот вообще однопользовательский, можно сказать. На серверах MySQL. Поизучаю этот вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 23:55 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
PrizzrakТак делать и собираюсь. Вопрос лишь в том, как заблокировать файл на запись и чтение. Чтобы другой скрипт не мог его не прочитать ни записать.Где конкретно в данном алгоритме Вы нашли какую-либо возможность чтения или записи в файл в одном скрипте в то время, как другой скрипт установил на нем эксклюзивную блокировку? Есть предложение написать код и протестировать его. Когда будут проблемы, то решать их по мере возникновения. Хороших Вам праздников! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 00:30 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
vklePrizzrakТак делать и собираюсь. Вопрос лишь в том, как заблокировать файл на запись и чтение. Чтобы другой скрипт не мог его не прочитать ни записать.Где конкретно в данном алгоритме Вы нашли какую-либо возможность чтения или записи в файл в одном скрипте в то время, как другой скрипт установил на нем эксклюзивную блокировку? Есть предложение написать код и протестировать его. Когда будут проблемы, то решать их по мере возникновения. Хороших Вам праздников! Попробую. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 00:40 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
Что холивар устраивать по такому пустяку ? Перед добавлением задания, проверяй задания с заданным файлов. И если такого файла нет, добавляй своё задание. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 04:45 |
|
Полная блокировка файла в PHP
|
|||
---|---|---|---|
#18+
PrizzrakВ мануале блокировка на запись. А надо так заблокировать, чтобы ни кто другой ни прочитать ни записать не смог.Блокировка не запрещает другому писать или читать. Установленная блокировка не дает другому получить блокировку. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 07:12 |
|
|
start [/forum/topic.php?fid=23&fpage=16&tid=1459950]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
124ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 484ms |
0 / 0 |