betam

Рейтинг
165
Регистрация
03.02.2005
_t2:
Кстати, если речь идет только о борьбе с банальной накипью - тут поможет и простой кувшин вроде Бриты. Знакомые пользуются, накипи в чайнике нет.

Питерская вода почти не даёт накипи, кстати.

Я перепутал EMS и UPS. В том магазе как раз UPS.

goodier:
То есть если один раз сработает команда flock( $fp, LOCK_EX ) ,
то повторно она уже не сработает пока не произойдет flock($fp, LOCK_UN)
да или нет, вот этот момент у меня в голове не укладывается.

Не сработает.На обычной ОС. Пишут, что на какихто специальных многопоточных ОС - это не действует. Но как проверить я писал постом выше.

Но это всё ерунда, надо делать очередь заявок, юзер может только в очередь заявку послать, а непосредственно обрабатывает заявку независимый от юзера скрипт.

goodier:
dkameleon, Многопользовательский вариант - это и есть лочить файл с названием юзера или нет , понять не могу

Да, это и есть. Но можно не париться, а лочить скрипт для всех. Операция не долгая, поэтому долго ждать не прийдётся.

goodier:

$fp = fopen("LOG_POST/".$login.".txt","a");

ИМХО, не получится открыть залоченый файл -> соотв. в while будет бесконечный цикл.

Надо написать ф-юю

Lock($login){

$fp = fopen("LOG_POST/".$login.".txt","a");

if( flock( $fp, LOCK_EX )) return true;

return false;

}

и проверять не if( flock( $fp, LOCK_EX )), а if(Lock($login))

Проверить можно так:

Перед

flock($fp, LOCK_UN);

fclose($fp);

поставить sleep(10);

А тут

/* мой скрипт обрабатывается */

добавить логирование времени

Запустить несколько запросов паралельно и посмотреть в лог, одновременно скрипты отработали, или дождавшись заверщения друг друга.

siv1987:
грубо говоря

$res = mysql_query( 'SELECT * FROM table_users WHERE login = "'. $login .'"' );
$row = mysql_fetch_assoc( $res );

//ставим метку на запись что она в отработке
mysql_query( 'UPDATE table_users SET status="close" WHERE login="'. $login.'"' );

if( $row['status'] == 'close' )
{
die( 'Данная запись в этот момент обрабатывается, повторите попытку позже' );
}

//После того как код отработал

mysql_query( 'UPDATE table_users SET status="open" WHERE login="'. $login.'"' );

Это неправильно. Можно мильён раз успеть получить первый запрос, до того как отработает Update.

Lock-файл значительно надёжней.

<?

$try=false;

while(!$try)

{

if(удалось заблокировать lock-файл)

{

$try=true;

}

else

{

$try=false;

sleep(); // не обязательно, в зависимости от ситуации

}

}

?>

В начало скрипта.

dkameleon:

Только не на файлах, а то вы не учтете многопользовательский вариант,
да и там надежность я бы поставил под сомнение, скажем, если хакер одновременно отправит 100-200 запросов. подозреваю, пройдет больше одного.

Многопользовательский вариант можно, файл лочки должен лочить запросы юзера, а не всей системы.

Хакерство таким образом не пройдёт, всё равно один из запросов будет первым.

ТС у вас принципиально неправильно, отправлять бабло по запросу юзера - нельзя. По запросу юзера надо формировать заявку на выдачу бабла. А выдочу бабла долджен проводить независимый от юзера скрипт (по крону, повесьте раз в минуту, только тоже с лочкой, чтоб два скрипта выдачи нельзя было запустить). При каждой выдаче происходит проверка: достаточно ли средств на балансе, если достаточно - то выдавать, если нет - не выдавать; затем удалять заявку; переходить к следующей заявке.

Блокировка файла.

Если совсем в общем случае - перед началом выполнения скрипта проверяйте, не заблокирован ли файл, если заблокирован - то ждите, пока его отпустит.

После проверки на блокировку - блокируйте файл и делайте, что надо. Как сделали - разблокируйте файл.

michaek:
betam, она умеет мультимониторы под рдп? мне, собственно, этого от программы надо

думаю, нет.

michaek:
http://www.splitview.com/SplitView-Personal-Edition
работает, под xp просто отлично, под 7 глючит, увы

WinSplit Revolution круче и бесплатная, смысл точно такой же, только фич больше.

Но это не то.

---------- Добавлено в 21:37 ---------- Предыдущее сообщение было в 21:36 ----------

DenisVS:
betam, может, забьёте :)

Ну можа есть такая прога.

Помню, был аськоклиент какойто, вот он умел так делать. Отжирал себе четверть десктопа справа и висел там, никого не пуская на своё место. Не могу вспомнить что зха клиент такой.

Всего: 2403