2014-09-03 1 views
1

Итак, у меня есть куча запросов к базе данных и Wordpress для создания таблицы лидеров. Запрос данных, вычисление, а затем обновление, похоже, много делают и действительно замедляют отображение страницы списка лидеров. Поэтому я пытаюсь получить запрос и вычисление только тогда, если прошло больше часа с момента последнего запроса. Это мой код до сих пор:Запустите PHP-код, только если прошло 1 час с момента последнего запуска.

<?php 
    static $lastQueryTime; 

    if(!isset($lastQueryTime) || ($now > $lastQueryTime + (60*60))){ 
     $lastQueryTime = $now; 

     //PHP to run...Querying, calculating, updating 
    } 
?> 

Я также попытался «глобальный» вместо «статика», но ни казалось, на работу, выполнение запроса всегда происходит при загрузке страницы.

+0

Вам нужно будет сохранить значение за пределами PHP (которое выполняется во время выполнения). Наиболее вероятным вариантом является база данных SQL (MySQL), самым быстрым вариантом будет кеш-сервер (Redis), а самый быстрый для настройки - это статический файл (который вы читаете/записываете напрямую). – Sam

+0

Ни 'global', ни' static' вам не пригодится, потому что ваш PHP-скрипт «живет» до тех пор, пока ему нужно ответить на текущий запрос ... после этого он будет выполнен, и все его переменные исчезнут. Вам нужно сохранить значения где-нибудь, где следующий «экземпляр» вашего скрипта может прочитать его снова - файл, базу данных, ... – CBroe

+4

Почему у вас нет вашего скрипта, запускаемого 'cron' просто? – mario

ответ

2

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

Вам нужно будет хранить $lastQueryTime на диске или в базе данных, чтобы это работало.

2

static и global не являются механизмами, которые сохраняют данные в отдельных экземплярах. Они сохраняют данные только в одном сценарии, а затем все пропадает. Вам необходимо хранить данные извне, в базе данных, в memcache, в файле и т. Д.

0

Напишите $lastQueryTime в файл в конце вашего скрипта и включите этот файл вверху, если ваш скрипт. Затем проверьте, если $lastQueryTime больше часа назад. Если да, перейдите к своему скрипту и сохраните новое время для файла. Иначе ничего не делайте.

Смежные вопросы