Нужна критика кода для временного интервала теста скрипта PHP - PullRequest
1 голос
/ 20 августа 2010

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

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

if(!isset($_SESSION['time_next'])){

    $_SESSION['time_next'] = time() + (15 * 60);
                                     //15 minutes   
}
else if(time() >= $_SESSION['time_next']){

    //update all the session variables, etc...

    $_SESSION['time_next'] = time() + (15 * 60);    
}

Что ты думаешь? Будет ли это работать?

Ответы [ 2 ]

1 голос
/ 20 августа 2010

Это будет работать, но вы можете написать его короче и чище *. Обратите внимание, что сеанс привязан к посетителям, поэтому, когда 10 человек запросят страницу, вы получите 10 экземпляров, запускающих обновление.

do_update_if_needed(15);

function do_update_if_needed($minutes)
{
    if ( isset($_SESSION['time_next']) && time() < $_SESSION['time_next'] ) return;

    // either time_next was not set, or it's time to update, so set next time:

    $_SESSION['time_next'] = time() + $minutes*60;

    // do your thing!
}

Вы также можете написать простой файл, содержащий последний раз (или используя его время последнего изменения). В общем, я думаю, что лучше записать время last , чем время next , поскольку время last фактически говорит о том, что произошло, а не просто план "(который приводит к вопросам, например, кто это был? почему? и т. д.)

* Под очистителем понимается: 1) поместить его в функцию и 2) выполнить вычисления в одном месте, а не в двух ветвях if

0 голосов
/ 20 августа 2010

Вы, вероятно, хотите создать DAEMONS для такого рода вещей.

Вы определенно не должны идти тем же путем, которым вы идете , как другие лучше объяснили.

Вы также не должны использовать cron , потому что, если процесс занимает больше времени, которое, как вы думаете, должно занять, перезапустит другой процесс. Это может испортить ваше приложение, и это действительно не элегантное решение.

A deamon будет работать в фоновом режиме в тихом режиме. Будет справляться со всей необходимой рабочей нагрузкой, не будет перезаписывать себя, а также может работать в заранее установленное время.

Взгляните на это превосходное учебное пособие Кевина ван Зонневельда .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...