程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 有關國外空間 VPS PHP時間不正確解決辦法

有關國外空間 VPS PHP時間不正確解決辦法

編輯:關於PHP編程

 由於暫時使用國外的空間,在我發布 Blog 的時候發現時間總是不對。依據我以前編寫程序的經驗,這是時區的問題。這個問題解決起來並不難,寫下我的解決途徑以便日後參考。

  PHP 腳本端的市區設置可以在 php.ini 下設置 date.timezone 鍵的值為 Asia/Shanghai 即可。但是通常共享虛擬主機本身沒有修改 php.ini 權限。這個時候就應該在程序公共部分加入   ini_set(date.timezone,Asia/Shanghai);   動態修改 php.ini 的設置。之後可以測試一下時間是否正確:   var_dump(date());   如果服務器的本地時間是正確的,那麼一般就能解決問題了。附,PHP 5.1 以上提供了專門的函數修改對應的時區:   date_default_timezone_set(Asia/Shanghai);   建議使用此函數,因為更通用一些。對應 Asia/Shanghai 其他可以使用的大陸時區還有:Asia/Chongqing 、Asia/Shanghai 、Asia/Urumqi (依次為重慶,上海,烏魯木齊);港台地區可用:Asia/Macao、Asia/Hong_Kong、Asia/Taipei(依次為澳門,香港,台北);還有新加坡:Asia/Singapore;其他可用的值是:Etc/GMT-8、Singapore、Hongkong、PRC;老外好像把北京漏調了。   但是,在我修改成功 PHP 端的時區以後發現日期並沒有正確的記錄下來。這個時候我考慮是否是數據庫的問題。果不其然,因為程序插入的函數並沒有調用 PHP 的時間,而是直接使用 MySQL 的 CURRECT_TIMESTAMP。這個時候就要考慮是否能修改 MySQL 方面的時區。   參考了 MySQL 的文檔,發現一個可行的 SQL 語句為:   SET GLOBAL time_zone = +8:00;   其中 +8:00 是東八區的表示方法,其他的市區依次類推。而我在數據庫模型中插入改語句發現權限不夠(該死的虛擬主機提供商)。接下來我調試了很多語句,比如:   DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR);   顯示時區的 SQL 語句:   SHOW VARIABLES LIKE system_time_zone   等等。而由於 MySQL 權限的限制並沒有徹底的解決方案。我 Google 了下,發現老外這個有一個非常好的解決方案。但是他需要修改每條插入數據的 SQL 語句。這樣的方案並不是非常的有效,一旦數據庫時區改成正常,那麼相應的 SQL 語句又要改回來。   而我考慮既然 PHP 端已經可以正確的解決時間的問題了。MySQL 數據庫方面雖然可以使用相應的函數解決,但是如果日後遷移到別的主機環境又要改回來。而相應的字段是一個 TIMESTAMP 類型的,默認的值為 CURRECT_TIMESTAMP,當然是可以指定時間的。   那麼我的做法就是讓 PHP 插入當前正確的時間,這樣雖然程序方面需要做相應的修改。不過日後配置修改起來只要修改一處就可以了。最後插入數據庫的時間注意一下格式:   date(Y-m-d H:i:s)這樣就可以解決問題了。附,一些非常好的參考資料:   這樣就可以解決問題了。附,一些非常好的參考資料:        http://www.BkJia.com/html/webkaifa/PHP/PHPyingyong/2010/0226/4000.html   更新:由此 wiLdGoose 兄說他也碰到同樣的問題,但是無法解決。結果經過種種的假設和判斷以後,到最後發現原來是 Zend Studio 的時區配置問題(我狂汗ing)。看來除去運行環境,開發環境也是需要注意以下的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved