после прочтения:
Потоки и синхронизация PHP
мое предположение верно, что даже если у меня есть шаблон сингелтона, на самом деле есть 1 экземпляр этого классаза запрос?Как насчет flock?
Мне нужно ограничить определенный блок функций / кода в моем приложении, чтобы он выполнялся только одним запросом за раз.Причина немного странная, мне нужно вызвать инструмент cmd-line, который читает текстовый файл, который я создаю в php, а затем записывает результат в несколько текстовых файлов.Чтобы предотвратить ложные / странные результаты, весь файл кода блока создания - запуск команды cmd-line-read должен быть синхронизирован.
Как я могу это сделать?Я попробовал это с фиктивным файлом, заблокируйте его с помощью flock -> не работает.Я также попробовал простое логическое поле isLocked, чтобы остановить дальнейшее выполнение второго запроса.Также не работает.Проблема в том, что первый запрос обрабатывается правильно (данные вставляются в БД), а второй нет, и оба запроса не завершаются, страница загружается вечно.
Идеи?решения?
РЕДАКТИРОВАТЬ:
$lockFile = fopen("lock", "r");
while (!flock($lockFile, LOCK_EX)) {
sleep(1000);
}
// do work
flock($lockFile, LOCK_UN);
fclose($lockFile);
Или:
if (myClass::$isLocked) {
return false;
}
myClass::$isLocked = true
// do work
myClass::$isLocked = false
оба варианта не работают и оба запроса останавливаются, например.следующая страница никогда не загружается.Мне нужно убить процесс Apache.