2014-09-03 21 views
1

所以我有一堆數據庫和wordpress查詢來創建排行榜。 查詢數據,計算和更新似乎有很多事情要做,並且確實會降低排行榜顯示頁面的速度。所以我試圖讓查詢和計算只發生在自上次查詢以來超過一個小時。這是到目前爲止我的代碼:只有在自上次運行1小時後才運行PHP代碼

<?php 
    static $lastQueryTime; 

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

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

我也試過「全局」,而不是「靜」,但既不似乎工作,在查詢總是在頁面加載發生。

+0

您需要將值存儲在PHP之外(即執行運行時)。最可能的選擇是SQL數據庫(MySQL),最快的選項是緩存服務器(Redis),最快的設置將是一個靜態文件(您直接讀/寫)。 – Sam 2014-09-03 20:08:56

+0

'global'和'static'都不會對你有任何好處 - 因爲只要你的PHP腳本需要回答當前的請求,它就會「生活」......在這之後,它就完成了,它的所有變量都消失了。您需要將值存儲在腳本的下一個「實例」可以再次從其中讀取的地方 - 文件,數據庫...... – CBroe 2014-09-03 20:09:52

+4

爲什麼不用'cron'運行腳本? – mario 2014-09-03 20:13:36

回答

2

PHP代碼是無狀態的,除非你這麼做 - static變量不能跨越請求生存,或者更確切地說什麼都沒有,除非你手動持久化。

您必須將$lastQueryTime存儲在磁盤或數據庫中才能使用。

2

staticglobal不是機制,持續不同實例的數據。他們只在一次腳本運行中保留數據,然後全部消失。您需要將數據外部存儲在數據庫,memcache,文件等中。

0

$lastQueryTime寫入腳本末尾的文件,並在腳本的頂部包含該文件。然後測試$lastQueryTime是否在一個小時以前。如果是,請繼續處理腳本並將新時間保存到文件中。否則,什麼也不做。

相關問題