2010-08-19 63 views
1

再次嘿!我試圖編寫一組腳本,只有在它們上次運行超過15分鐘後才能在頁面上運行。基本上,一個自動腳本每半小時更新一次我的數據庫 - 並且顯示該信息和更新會話變量的頁面顯然必須在數據庫打開時查詢數據庫。需要時間間隔測試腳本的代碼批判PHP

因此,爲了最大限度地減少查詢,並保持安全,我認爲會話變量只會在數據庫中更新,如果該頁面上次查看時已超過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);  
} 

您怎麼看?這會工作嗎?

+0

你知道每個用戶都有自己的一套會話數據嗎?如果有100人查看此頁面,您的代碼最終會每15分鐘運行一次。如果你想每15分鐘運行一次,你應該使用類似於數據庫的東西。或者,甚至更好,只需使用cron。 – 2010-08-19 22:18:53

+0

是的,我想 - 這實際上是必要的。這個項目是一個網絡應用程序,所以每個同時使用它的用戶都需要從數據庫訪問他們自己的特定數據。根據每個用戶的一系列不同因素,他們的數據可能會以不同的方式顯示。 因此,本質上,是的腳本需要更新每個用戶在他們自己的時間表,因爲每個用戶將看到不同的數據。 – user405056 2010-08-19 22:22:21

+0

哦,其實很抱歉,我誤解了你的答案。是的,數據庫中已經有一個CRON腳本,每30分鐘更新一次。每個INDIVIDUAL USER都訪問該數據,並將其放入顯示(並在其他頁面中使用)的某些會話變量中 - 因此,如果它們導航到不同的頁面然後返回,那麼數據可能會在此處不同。我試圖做到這一點,因此數據庫不會被查詢每次他們回到那個頁面,只是如果它是15分鐘,因爲我的30分鐘自動腳本很可能不會在那15分鐘的時間內運行。 – user405056 2010-08-19 22:26:45

回答

1

它會工作,但你可以寫得更短,更清潔*。請注意,該會話是訪問者綁定的,因此當有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! 
} 

你也可以編寫一個包含上次(或使用它的上次修改時間)的簡單文件。一般來說,我認爲最好記錄最近的時間比下一個時間,因爲最後時間實際上告訴發生的事情,不只是「一個計劃」(這導致了問題,像誰的計劃是它爲什麼等)

*清潔劑是指:?1)把它放在一個功能,和2)做計算在一個地方,不是在if

+0

完美。同樣,我明確知道腳本將運行10次,但它對於應用程序的功能非常關鍵。 你的代碼看起來比我的效率高得多。非常感謝! – user405056 2010-08-19 22:36:29

+0

哇,實際上,是的,仔細檢查,比我的更好。再次感謝! – user405056 2010-08-19 22:37:55

0

兩個分支你可能希望創建DAEMONS對於這種事情。

你肯定是不應該走你的方向作爲別人有更好的解釋。

不應該使用cron,因爲如果過程需要更多的,你認爲它應該會OVERUN其他進程的時間。這可能會讓你的應用程序變得混亂,這實際上不是一個優雅的解決方案。

A deamon將以無聲方式在後臺運行。將處理所有你需要的工作量,不會覆蓋自己,也可以在預先設定的時間內運行。

Take a look at this excellent tutorial by Kevin van Zonneveld

+0

如果我沒有自己託管網站,我該如何安裝守護進程?儘管每半小時自動執行一次的腳本非常簡單,並且用戶在每次加載「儀表板」頁面時訪問的腳本只能檢索數據以供查看,但它絕對看起來還是要走的路。我不知道,我想我已經在我的腦海裏了... – user405056 2010-08-19 23:11:59

+0

@ user405056好吧......也許你是。如果你不需要,不要過於複雜。只要寫一個關於「守護進程」的心理筆記,當出現問題的概率很高時,你就會知道要走的路! ;) – Frankie 2010-08-19 23:17:45

+0

是的,我想是的!也許當我的應用程序有60億用戶,並且我以數億美元游泳時,我可以找出守護程序哈哈!無論如何,我會認真閱讀 - 再次感謝您的幫助! – user405056 2010-08-19 23:44:49