Forum Webscript.Ru
Общие => Веб-технологии => Тема начата: Lion от 05 Декабря 2001, 16:27:54
-
Существует ? Особенно с использование PHP...
-
А если так:
перед открытием файла проверяем существует ли файл lock, если нет, то создаем lock, смело открываем рабочий файл и работаем, если существуем, то ждем секунду проверяем снова.
После завершения работы с файлом удаляем lock.
Т.е. если lock существует, то значит на файле стоит блокировка - с ним работают. Если нет, то нет блокировки. Конечно не лучший вариант :( но простенько. Стоит добавить проверку срока жизни lock - мало ли, программа до конца не доработала и старый lock Не удалили (т.е. 5мин жизни файла хватит. Если старше, то его стоит удалить).
#!/usr/bin/perl
#not flock()
my $lock=\'lock.lock\';
#Существет ли Lock
while(-e $lock){
$i++;
if ($i==$time_limit){die("Can not flock file - time limit out");}
sleep 1;
}
#Создаем файл Lock
open(LOCK, ">$lock")||die("Can not open file: $!");
close LOCK;
#Работаем с данными
open(FILE, ">file.txt")||die("Can not open file: $!");
print FILE $something;
close FILE;
#Удаляем Lock
unlink $lock;
На PHP это также можно сделать.
-
Это 2 операции, а значит теоретически есть шанс сбоя.
Теория становится практикой при нескольких посещениях в сукунду (раз в месяц может збойнуть).
Надо использовать единичную операцию - переименовать файл.
Если удачно переименовал lock -> lock.moj то твои данные, если ошибка - то неуспел :)
А поработал - потом назад (только надо следить, чтобы никто не прибил скрипт до этого, а то все
застынет :^)
-
Теория становится практикой при нескольких посещениях в сукунду (раз в месяц может збойнуть).
это точно, даже чаще. Все это на коленке сделанное, но вроде есть под win что-то приличное, только не могу вспомнить что.
-
Не - rename таки действительно работающее решение :)
А вообще при таком числе запросов надо от файловой системы к серверам переходить...
Или своим или ширпотребовским *SQL
-
Не - rename таки действительно работающее решение
да, согласен, существенно лучше.
Или своим или ширпотребовским *SQL
;) с этим не поспоришь