@kadzura

Запрет параллельного(одновременно запущенного n раз) исполнения php скрипта?

Всем день добрый. Проблема такая:
С помощью чего либо пользователь может одновременно запустить один и тот же php скрипт n количество раз.
Скрипт в своё время смотрит количество записей в таблице, фильтруя по текущему пользаку, записывает в переменную “A”, добавляет новую запись в таблицу и просто плюсует +1 к переменной “A”. Ну и дальше делает свои дела.

Но при одновременном запуске скрипта n раз - результат переменной «А» один и тот же следовательно и количество записей, ибо все посмотрели в одно и тоже время.

Как избежать этого? Чтоб пока один из скриптов не выполнился - другие стояли в ожидании ну или что-то типа того.
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
@nrgian
Транзакция
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Digiport
@Digiport
PHP рулит
Читайте переменную из файла, а в файл пишите с блокировкой:
function autoinc_id($dataset="common",$min=0) {
    $file = __DIR__ . "/autoinc.json";
    $fp = fopen($file, 'c+');
    flock($fp, LOCK_SH);
    $json = json_decode(file_get_contents($file),true);
    if (!isset($json[$dataset])) {
		$json[$dataset]=$min;
	} else {
		if ($json[$dataset]<$min) {$json[$dataset]=$min;} else {$json[$dataset]++;}
	}
	file_put_contents($file,json_encode($json));
    flock($fp, LOCK_UN);
    fclose($fp);
    return $json[$dataset];
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы