Добрый день, знатоки.Как правильнее решать задачу контроля за юзерами мелкого провайдера. Сейчас все данные о юзерах лежат в текстовом файле и каждому юзеру отведена одна запись. При входе его в систему файл считывается и определяется можно ли его пропускать. Практически все скрипты только читают эту базу, не изменяя информации. Исключение - скрипты добавления (удаления) юзеров и времени.
Все операции по смене данных производятся так - файл полностью считывается в память, модифицируется и записывается в сторонке под временным именем. Затем скрипт пытается заменить старый файл на новый, пока это ему не удасться.
Все бы ничего, но иногда возникает ситуация, когда данные в файл не записываются. Происходит это редко и в случайные моменты времени. Но беспокоит.
Отсюда и вопрос - что делать ? Я пока вижу такие варианты - добавить в скрипты принудительный сброс буферов на диск, использование floc() и вообще переход к какой нибудь СУБД.
Что посоветуете?
> Все операции по смене данных производятся так - файл
>полностью считывается в память, модифицируется и записывается в сторонке под временным
>именем.Это временное имя стандартное или каждый раз новое ?
Из-за этого наверно "данные в файл не записываются"Если данные регулярно модифицируются - лучше использовать БД.
>Это временное имя стандартное или каждый раз новое ?Именно что стандартное.
> Из-за этого наверно "данные в файл не записываются"
>
>Если данные регулярно модифицируются - лучше использовать БД.
>>Это временное имя стандартное или каждый раз новое ?
>
> Именно что стандартное.
Т.е. Есть 1) file 2) tmp-file
Если при каждом изменении file
переписывается tmp-file = то в случае когда tmp-file не успел переписаться > file, данные теряются
Если не использовать БД, то
1) сравнивать mtime file == tmp-file и пока != - не трогать tmp-file
или
2) переименовывать tmp-file в file, и не создавать новый tmp-file if (-f tmp-file)
$check = 1;
while ($check) {
(-f tmp-file) && next ;
rename(tmp-file,file) && $check = 0;
}
> Добрый день, знатоки.
>
> Как правильнее решать задачу контроля за юзерами мелкого провайдера. Сейчас
>все данные о юзерах лежат в текстовом файле и каждому юзеру
>отведена одна запись. При входе его в систему файл считывается и
>определяется можно ли его пропускать. Практически все скрипты только читают эту
>базу, не изменяя информации. Исключение - скрипты добавления (удаления) юзеров и
>времени.
> Все операции по смене данных производятся так - файл
>полностью считывается в память, модифицируется и записывается в сторонке под временным
>именем. Затем скрипт пытается заменить старый файл на новый, пока это
>ему не удасться.
> Все бы ничего, но иногда возникает ситуация, когда данные
>в файл не записываются. Происходит это редко и в случайные моменты
>времени. Но беспокоит.
> Отсюда и вопрос - что делать ? Я пока
>вижу такие варианты - добавить в скрипты принудительный сброс буферов на
>диск, использование floc() и вообще переход к какой нибудь СУБД.
> Что посоветуете?A u tebja dva skripta odnovremenno mogut zapuskatsja?