2013-04-15 66 views
1

我有一個PHP腳本,目前拉的時間從服務器使用時間();替代時間()

不幸的是,服務器上的時間最近出錯了,提前 更新/重置。託管的支持已經調查了這個問題,但至今 它還沒有解決,它正在進行。

對於這個腳本,我需要時間相對準確,所以我想可能是 能夠臨時修復,直到解決上述問題。

我試圖看看從NIST或 獲得時間的各種其他方法,有一些提到關於從標題中獲取它。我很擔心,雖然 放緩腳本,我不知道最好的方法是什麼。

順便說一句PHP的版本是4.4 - 是的,我知道它應該改變,但這不是我的控制,因爲它在共享服務器上。

因此,有關如何獲取當前時間的任何建議 - 不是服務器時間和 將它作爲像time()這樣的unix時間戳;

感謝您的任何幫助。

+2

'PHP 4.4' ???不再支持..更多的問題,你的時間問題 – Baba

+0

我會認真考慮改變主機。現在大多數共享服務器至少提供5.x,如果你的Linux時間也有問題......:/ – Think

+0

我知道你在說什麼,但現在我不能那麼做。 – onelove

回答

3

我知道你知道這個,但4.4認真??你不關心安全嗎?

要回答你的問題,如果你不想依賴於服務器的時間設置如何調用某些NTP服務器來請求當前日期/時間?

http://www.pool.ntp.org/

經過一番搜索,我發現這個可能重複:php validation for NTP server

還要注意的是片狀時間可通過領先於其他更嚴重的問題引起的。

+0

感謝您的答覆!是的,我關心安全性,在我自己的dedi和VPS上他們有最新版本。這是一個不受我控制的共享服務器,並且該站點已在同一臺服務器上建立了超過12年。 – onelove

0

製作一個從任何服務器獲取時間的腳本。就像你建議的NIST服務器一樣。或者使用timeanddate.com。您可以使用file_get_contents()(php4.3 +)嘗試file_get_contents("http://free.timeanddate.com/clock/i3l84w5k/tt0/tw0/tm3/td2/th1/ta1/tb3")使用正則表達式提取時間字符串。然後使用strtotime()將該時間字符串轉換爲時間戳。

讓此腳本調用time()並將返回時間戳的時間減去遠程主機的時間(標記)。

現在將此偏移量寫入緩存,數據庫或文件。

並將此腳本放在cron作業中。

然後編寫一個函數myTime(),它從緩存/數據庫/文件中讀取偏移量並將其添加到time()中。


編輯:我的工作了一點:

運行此腳本定期用一個cronjob:

date_default_timezone_set("UTC"); 
$html = file_get_contents("http://free.timeanddate.com/clock/i3l84w5k/tt0/tw0/tm3/td2/th1/ta1/tb3"); 
preg_match('/id=t1>(.*)</U',$html, $matches); 
$timeStamp = strtotime($matches[1]); 
$offset = time() - intval($timeStamp); 
$fh = fopen("time_offset.txt", "w"); 
fwrite($fh, $offset); 
fclose($fh); 

使用此功能,以獲得調整的時間:

function myTime() { return time() - intval(file_get_contents("time_offset.txt")); }