одновременное выполнение скрипта

bad_santa

Новичок
одновременное выполнение скрипта

?есть некая страница, которая обновляется сама через определенное время
в некой странице вставлена функция которая при автоматическом обновлении (по истечение времени) запускается и производит вычисления допусти нескольких человек которые сидят онлайн. как предотвратить запускание этой функции если ону уже запущена.

?и допустим если на сайте авторизацияесть, то при добавлении комментария в (например книгу отзывов)... может произойти при допустим одновременном нажатии "отправить коммент" произойти косяк подмена переменных. я знаю что в perl енто возможно и как этого можно избежать...

//хотелось бы полный коммент, спасиб за помощь
 

baev

‹°°¬•
Команда форума
при допустим одновременном нажатии "отправить коммент" произойти косяк подмена переменных
По-подробнее, пожалуйста.

И с примером кода.
 

bad_santa

Новичок
для первого вопроса
#пример
<?
function podshet(){выполняются действия}

если время вышло
if($timenow > $timeend){podshet();}

$x = $timestart - $timeend;

?>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<script>
var counter= <? echo $х;?> ;
ID=window.setTimeout("Update();", 1000);
function Update() {
counter--;
if(counter > 0){window.document.all("tit").innerHTML=counter;}
else {window.document.all("tit").innerHTML="время вышло"; window.location.href='';}

ID=window.setTimeout("Update();", 1000);}
</script>
<BODY>
</body>
</html>
как заблокировать функцию podshet() если она уже выполняется


второй вопрос
#модель обработки скрипта 2мя пользователями

переменные $name, $old передаются скрипту

пользователь1
$name = "вася";
$old = "10";
$god = 2006 - $old; пользователь2
$name = "толя";
$old = "90";

$stroka = $name . $god; <----- $name

echo $stroka; $god = 2006 - $old;
// "толя" . "1996"
// вместо вася 1996 $stroka = $name . $god;

echo $stroka;
// "толя" . "1916"
может ли так получиться $name справа заменила $name слева

-~{}~ 26.05.06 07:15:

И с примером кода.
вот примеры для лучшего восприятия
 

baev

‹°°¬•
Команда форума
Ну, восприятие особо не улучшилось.

1. Не понятно зачем там javascript.
Если я правильно догадываюсь, то Вам нужно что-то типа этого:
а) функция пишет либо в файл либо в базу о том, что она запущена — типа, ставится флаг;
б) перед запуском функции проверяем не поставлен ли флаг
в) в конце работы функции флаг снимается

2. Не, похоже, Вам всё-таки сюда:
http://phpfaq.ru/na_tanke
 

bad_santa

Новичок
можно ли обойтись без постановки флага типа функциями семафора

-~{}~ 26.05.06 14:36:

java для автоматического обновления страницы
 

poved

Новичок
Вариант с записью в БД в начале и конце работы функции очень неудобный - два лишних запроса к БД для часто используемой функции. А никто случайно не знает лучшего решения? Например, в java (который не js) можно было бы сделать класс со статическим методом и в этом же классе хранить статическую переменную с тем же смыслом, который baev предлагает писать в БД. Можно ли что-то такое реализовать в php 4.x ? То есть, по сути, задача сводится к тому, чтобы сделать аналог static данных. Чтобы скрипты могли пользоваться общими данными непосредственно из памяти, не используя в качестве посредника БД или файловую систему.

Я внимательно прочитал
http://phpfaq.ru/na_tanke
По данному вопросу там ничего нету.
Так что мне кажется, что baev или недопонимает проблему или уводит нас в сторону от темы.
 

ybilevych

Новичок
poved
Это не baev недопонимает, это Вы вместе с bad_santa недопонимаете


bad_santa
Во первых, еще раз прочитайте http://phpfaq.ru/na_tanke. кстати, там есть ссылка на http://www.php5.ru/study/webbasics.
Во вторых, когда внимательно прочитаете ссылки, присмотритесь ко второму посту от baev (4-й сверху) - там именно то, что Вы ищете. Ваш код выглядит более-менее правильным, но требует доработки напильником


Да, а по второму вопросу вообще каша
попробуйте продебагать, чтобы понять, как работает приведенный код
 

poved

Новичок
@ybilevych:

Попробуйте почитать чуть-чуть более продвинутые ссылки :)
http://www.php.net/manual/ru/ref.sem.php

Вызываемые скрипты работают на одной машине, значит принципиально могут иметь общие данные в памяти машины. В JSP это я могу это реализовать удобными способами. В пхп, к сожалению, пока видел только версию с семафорами в документации. А они, увы, не входят в стандартный пакет, да и вообще смотрятся страшновато.

В принципе, иметь общие для всех программ данные в памяти может быть очень полезно. Пример, с которого всё началось, очень подходящий: ф-я вызывается часто и постоянно писать в файл (базу) этот один бит информации (как было предложено) - это неоправданная нагрузка. Гораздо логичнее было бы хранить его в памяти.

Для тех товарищей, которые считают постановку вопроса абсурдной, разберитесь в вопросе лучше. В серверных java-технологиях такое делать можно хотя бы потому, что я это уже делал :) . Думаю, что должна быть возможность реализовать такое и в пхп. Думаю, что через семафоры, на которые я оставлял ссылку, можно что-то написать. Никто не видел более удобного способа?
 

DiMA

php.spb.ru
Команда форума
одна фигня, ниче по делу. Причем тут семафоры? Пушкой по воробьям?

1. один юзер не может выполнять сразу 2 скрипта на сервере, если используются сессии (они блокируются до освобождения)

2. для задачи используем

$cron=60;
$fn="online.lock";

if (filemtime($fn)+$cron<time()) {
$f=fopen(fn,"w+");
if (@flock($f, 6)) {
тут код
}
}

код 6 вернет false, если файл уже заблокирован
2 - будет ждать освобождения

Под винду версий 95/98/МЕ это не будет работать.
 

poved

Новичок
1) А два юзера? А если их одновременно на сервере 20?

2) Лично мне семафоры тоже не понравились, поэтому я и интересуюсь лучшим вариантом. Я боюсь, что вариант с файлом будет плохо работать при большой нагрузке. И, судя по посту №5, bad_santa он тоже не устроил. Мне кажется, что для приличного чата с хорошей нагрузкой такое решение бы не прошло.

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

SiMM

Новичок
> Если кто-то сталкивался с решением такой задачи для сайта с хорошей нагрузкой, расскажите о своем опыте
После поста Димы звучит как издевательство.
http://php.spb.ru/chat/
 

DiMA

php.spb.ru
Команда форума
SiMM
ты просто забываешь, что мы на велосипедной фабрике находимся .-)
 

poved

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

И меня действительно инетересует именно тот вопрос, о котором я писал в самом начале. В Java без особых ухищрений с помощью static полей/методов класса можно хранить данные, которые будут доступны сразу нескольким экземплярам одного сервлета или разным сервлетам.
Есть ли механизм, с помощью которого можно делать тоже самое в пхп?
Вопрос до предела конкретен.

Если кто-то знает ответ на этот вопрос, то ответьте, пожалуйста. Если это не является частью вашего повседневного рабочего опыта, то не реагируйте, пожалуйста, на вопрос агрессивно. Только не надо говорить, что хранить общие данные в памяти - бесполезная задача. Не хочу на эту тему спорить, даже если и так, то в конце рабочей недели можно и потеоретизировать.

Если вопрос глупый, то объясните мне, дураку, почему. А то я чуствую себя неудобно. Я пишу полотна, стараясь описать суть вопроса, думаю, может до людей не доходит, а в ответ читаю про велосипедную фабрику (опять таки вопрос о вежливости, как новичок на форуме я, к сожалению, не знаю ваших приколов, а где больше двух, там обычно говорят вслух, так?) . При всём уважении к старожилам форума похоже на звездную болезнь. Лично я здесь для того, чтобы учиться, поэтому мне не страшно чуствовать себя дураком. Было бы лучше, если про мой дурацкий вопрос написали подробно-подробно и правильно-правильно :) . Чтобы я полностью дурость вопроса прочуствовал. Чтобы не ввязываться в пустую перепалку вернусь через пару дней. Всем заранее спасибо за ответы.
 

DiMA

php.spb.ru
Команда форума
Ну, что ты тут распинаешься. Данные хранят в базе данных и используют их блокировки или транзакции. Вернее, данные в 90% случаях можно/надо хранить так, что потребности блокирования не понадобится. А для повседневных мелких задач, описанных в топике - блокировки файла разного типа.
 
Сверху