URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1208
[ Назад ]

Исходное сообщение
"Модификация файлов"

Отправлено SergeyD , 23-Дек-02 12:43 
  Добрый день, знатоки.

  Как правильнее решать задачу контроля за юзерами мелкого провайдера. Сейчас все данные о юзерах лежат в текстовом файле и каждому юзеру отведена одна запись. При входе его в систему файл считывается и определяется можно ли его пропускать. Практически все скрипты только читают эту базу, не изменяя информации. Исключение - скрипты добавления (удаления) юзеров и времени.
   Все операции по смене данных производятся так - файл полностью считывается в память, модифицируется и записывается в сторонке под временным именем. Затем скрипт пытается заменить старый файл на новый, пока это ему не удасться.
   Все бы ничего, но иногда возникает ситуация, когда данные в файл не записываются. Происходит это редко и в случайные моменты времени. Но беспокоит.
   Отсюда и вопрос - что делать ? Я пока вижу такие варианты - добавить в скрипты принудительный сброс буферов на диск, использование floc() и вообще переход к какой нибудь СУБД.
    Что посоветуете?


Содержание

Сообщения в этом обсуждении
"RE: Модификация файлов"
Отправлено konst , 23-Дек-02 14:28 

>   Все операции по смене данных производятся так - файл
>полностью считывается в память, модифицируется и записывается в сторонке под временным
>именем.

Это временное имя стандартное или каждый раз новое ?
Из-за этого наверно "данные в файл не записываются"

Если данные регулярно модифицируются - лучше использовать БД.


"RE: Модификация файлов"
Отправлено SergD , 24-Дек-02 15:25 
>Это временное имя стандартное или каждый раз новое ?

   Именно что стандартное.

> Из-за этого наверно "данные в файл не записываются"
>
>Если данные регулярно модифицируются - лучше использовать БД.



"RE: Модификация файлов"
Отправлено konst , 24-Дек-02 17:04 
>>Это временное имя стандартное или каждый раз новое ?
>
>   Именно что стандартное.
Т.е. Есть 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;
}


"RE: Модификация файлов"
Отправлено Jelis , 09-Янв-03 20:37 
>  Добрый день, знатоки.
>
>  Как правильнее решать задачу контроля за юзерами мелкого провайдера. Сейчас
>все данные о юзерах лежат в текстовом файле и каждому юзеру
>отведена одна запись. При входе его в систему файл считывается и
>определяется можно ли его пропускать. Практически все скрипты только читают эту
>базу, не изменяя информации. Исключение - скрипты добавления (удаления) юзеров и
>времени.
>   Все операции по смене данных производятся так - файл
>полностью считывается в память, модифицируется и записывается в сторонке под временным
>именем. Затем скрипт пытается заменить старый файл на новый, пока это
>ему не удасться.
>   Все бы ничего, но иногда возникает ситуация, когда данные
>в файл не записываются. Происходит это редко и в случайные моменты
>времени. Но беспокоит.
>   Отсюда и вопрос - что делать ? Я пока
>вижу такие варианты - добавить в скрипты принудительный сброс буферов на
>диск, использование floc() и вообще переход к какой нибудь СУБД.
>    Что посоветуете?

A u tebja dva skripta odnovremenno mogut zapuskatsja?