Добрый день. Есть функция которая опрашивается ajax раз в 10 секунд, как ее выполнить 1 раз если условие истинно. Делал так, не получается: PHP: var $check = 1; public function hour(){ if($this->check == 1){ $this->check = 2; echo 'условие выполнено'; } } Вот эта функция постоянно выполняется. Как сделать это на подобии с javascript?: Код (Javascript): var check = true; function hour(){ if(check){ check = false; alert('условие выполнено'); } } Может кто знает альтернативу такой проверке, функция сравнивает время, выглядит она так: PHP: var $check = 1; public function hour(){ $lastTime = date('Y-m-d H:i', strtotime($this->lastTime())); $dateTime = date('Y-m-d H:i', strtotime('-60 minutes')); if( strtotime($lastTime) == strtotime($dateTime) && $this->check == 1){ $this->check = 2; echo 'условие выполнено'; }else if(strtotime($lastTime) != strtotime($dateTime)){ $this->check = 1; } }
Добавил создание и удаление куки, один фиг функция срабатывает: PHP: public function hour(){ $lastTime = date('Y-m-d H:i', strtotime($this->lastTime())); $dateTime = date('Y-m-d H:i', strtotime('-60 minutes')); if( strtotime($lastTime) == strtotime($dateTime) && is_null(get_cookie('cooke_hour'))){ //проверка на наличие куки с таким именем delete_cookie('cooke_hour'); // удаляем куки echo 'условие выполнено'; }else if(strtotime($lastTime) != strtotime($dateTime)){ set_cookie('cooke_hour'); //создаем куки } }
Если нет привязки к профилю на сервере, то кука либо локалсторадж. Помоему без вариантов. Если не работает, значит начни с поиска куки. Её нет или ты её не находишь - это два разных кейса )
@artoodetoo решил проблему извращенно. 1. Передаю в эту функцию секунды текущего времени (функция опрашивается раз в 10 секунд); 2. В самой функции пишу if (second > 49) то срабатывает условие. Минус такого говно кода, если кто то решит изменить время опроса функции, то все полетит. Думаю дальше, как еще можно)
я думал речь о больших паузах, о разных сеансах работы, а тут 49 секунд... как это связано вообще? с кукой косяки бывают либо со временем её жизни, либо с путем: не все помнят, что кука имеет "папку" в которой она актуальна. надо ставить её в корне, елсли нет особых условий. кроме того, кука не заменяет обычную переменную, её читают при следующем запуске скрипта, а не в этом же сеансе! если есть потребность читать сразу, значит с логикой что-то не так.
@artoodetoo В общем смотрите. Сервер работает на iis7. Он не поддерживает websocket. Чтобы опрашивать сервер на клиенте стоит простенький ajax запрос вида: Код (Javascript): function get(){ $.get( "test.php" ); setTimeout(function() { get(); }, 10000); } На php идет сравнение двух дат. Если даты равны условие выполнено. PHP: $lastTime = date('Y-m-d H:i', strtotime($this->lastTime())); $dateTime = date('Y-m-d H:i', strtotime('-60 minutes')); if(strtotime($lastTime)==strtotime($dateTime){ // условие выполнено } Так вот, так как опрос идет раз в 10 секунд, когда даты совпадут по минутам (2018-11-14 12:20). Так каждые 10 секунд условие будет выполнятся, пока минуты текущего времени не изменится ($dateTime). А нужно чтобы условие выполнилось только 1 раз. Придумал такой способ. Добавляем условие секунды: PHP: $second = date('s'); if($second > 49){ $lastTime = date('Y-m-d H:i', strtotime($this->lastTime())); $dateTime = date('Y-m-d H:i', strtotime('-60 minutes')); if(strtotime($lastTime)==strtotime($dateTime){ // условие выполнено } } В таком случае условие выполнится 1 раз. Но вот если кто то изменить в ajax запросе время опроса. Вместо 10 секунды сделает любое другое число, то задница.
кажется я не въезжаю почему нужно ТАК считать разницу во времени, а не сразу завести таймер на нужное время. что до образца на пхп, то то плохой пример. с большой долей вероятности условие не сработает никогда. а требуется наверное чтобы сработало один раз но не раньше чем через 1 час. как мы гарантируем, что ровно через 60 минут этот код быдет вызван? а что если получится только через 61 минуту? я бы заменил == на >, заодно пропала бы нужда в двойном преобразовании типов. а отметку о выполненности доверил постоянному хранилищу на сервере: база или файл. всё что приходит от клиента может быть подделано.