2012-06-26 36 views
1

我周圍搜索,但找不到我正在尋找的東西。PHP`date()`與Unix`date`不同的是命令

我有一個PHP設置頁面,我的站點的管理員可以選擇一天中的一個小時來執行日常Cron作業腳本。在我的crontab中,我的腳本每小時都在運行。當腳本運行時,它會檢查當前小時是否等於設置頁面請求的小時。

我這樣做的原因是因爲我完全無法想出一種方法來通過PHP編輯crontab文件,儘管對主題進行了大量測試和研究。獎勵積分,如果你能幫助我找出一個辦法做到這一點。

我創建這個問題的真正原因是因爲我在使用Unix服務器的時候遇到了一些問題。當我在本地主機(IIS)上時,Cron腳本每小時執行一次,但是當我將所有內容移動到我的Unix亞馬遜機器上時,時間恰好是五個小時。

Cron作業仍然按照它應該每小時運行一次,但是當PHP腳本檢查當前時間(使用date("G"))是否與設置時間匹配時,它不會像預期的那樣工作。當然,它最終會被處理五個小時太晚。

我不認爲這是一個巧合,我住在中央時區,這也恰好是五個小時,所以我幾乎肯定與它有關。

我可以寫一個解決方案,總是會將時間偏移五個小時,但這會導致我的日期字段不準確(我認爲),這有點類似。我寧願問一下,因爲我確信很多人都在閱讀這篇文章,並認爲我不知道答案是愚蠢的。

還有一件事:

我在腳本中有這行代碼。還有什麼我需要分享?

date_default_timezone_set('America/Chicago');

編輯:一個什麼樣的「修復」是將不勝感激的解釋。

+0

可能重複:http://stackoverflow.com/questions/8244128/why-does-the-date-php-and-date-unix-does-not-match – zessx

+0

其更好您計算UTC的一切。當您向用戶展示時,只需應用時區。 –

+0

@samsamX感謝您的快速響應。我現在正在更多地考慮它。我也希望得到一些關於通過PHP來編輯Crontab的反饋。 –

回答

2

在這裏有幾個問題我會說,回答他們都需要一些時間,但我會盡量瀏覽儘可能。

  • 要編輯crontab,你需要編輯crontab爲web服務器用戶不是root用戶,或者如果您打算編輯根crontab你需要配置須藤使web服務器用戶可以編輯該crontab具體。你現有的範例很好,只需安裝一個cron,然後將大部分邏輯放入由cron調用的PHP腳本中。
  • 您遇到的問題與php日期不同的是def第一條評論建議的另一個線程的欺騙。如果你有權訪問php.ini,你應該在那裏設置date.timezone。另外,如果用戶不在時區中,該盒子正在運行,則無論如何,您都必須調整時區偏移量。
  • 另外一件要提及的事情是,您可以通過類似$sLinuxDate = shell_exec('date');的東西從操作系統通過PHP獲取日期值。可能你想獲得PHP &之間的時區,通過php.ini正確設置操作系統,就像我之前提到的那樣。
+0

感謝您的詳細回覆。我能夠讓我的約會工作。我在PHP中設置'date_default_time_zone()'的行是在我的頭文件中完成的,但是我的Cron作業不需要包含它們,因此省略了一小段代碼。 D'哦!我想我會把它移動到.ini文件中,這樣我就不會遇到類似這樣的問題。如果你不反對目前每小時執行一次這項工作的設置,那麼我會保持它的方式。我不確定我所做的是語義上正確還是越界。我不喜歡處理尷尬的快速修復。 +++ :) –

+0

是的,那應該是最好的。如果沒有任何可執行的腳本,腳本將花費幾分之一秒運行,並且防止crontab文件變得混亂。另外,您不必處理文件鎖定等等以維護crontab。 – quickshiftin