時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
由于暫時使用國外的空間,在我發(fā)布 Blog 的時候發(fā)現(xiàn)時間總是不對。依據(jù)我以前編寫程序的經(jīng)驗,這是時區(qū)的問題。這個問題解決起來并不難,寫下我的解決途徑以便日后參考。
PHP 腳本端的市區(qū)設(shè)置可以在 php.ini 下設(shè)置 date.timezone 鍵的值為 'Asia/Shanghai' 即可。但是通常共享虛擬主機(jī)本身沒有修改 php.ini 權(quán)限。這個時候就應(yīng)該在程序公共部分加入
ini_set('date.timezone','Asia/Shanghai');
動態(tài)修改 php.ini 的設(shè)置。之后可以測試一下時間是否正確:
var_dump(date());
如果服務(wù)器的本地時間是正確的,那么一般就能解決問題了。附,PHP 5.1 以上提供了專門的函數(shù)修改對應(yīng)的時區(qū):
date_default_timezone_set('Asia/Shanghai');
建議使用此函數(shù),因為更通用一些。對應(yīng) 'Asia/Shanghai' 其他可以使用的大陸時區(qū)還有:Asia/Chongqing 、Asia/Shanghai 、Asia/Urumqi (依次為重慶,上海,烏魯木齊);港臺地區(qū)可用:Asia/Macao、Asia/Hong_Kong、Asia/Taipei(依次為澳門,香港,臺北);還有新加坡:Asia/Singapore;其他可用的值是:Etc/GMT-8、Singapore、Hongkong、PRC;老外好像把北京漏調(diào)了。
但是,在我修改成功 PHP 端的時區(qū)以后發(fā)現(xiàn)日期并沒有正確的記錄下來。這個時候我考慮是否是數(shù)據(jù)庫的問題。果不其然,因為程序插入的函數(shù)并沒有調(diào)用 PHP 的時間,而是直接使用 MySQL 的 CURRECT_TIMESTAMP。這個時候就要考慮是否能修改 MySQL 方面的時區(qū)。
參考了 MySQL 的文檔,發(fā)現(xiàn)一個可行的 SQL 語句為:
SET GLOBAL time_zone = '+8:00';
其中 '+8:00' 是東八區(qū)的表示方法,其他的市區(qū)依次類推。而我在數(shù)據(jù)庫模型中插入改語句發(fā)現(xiàn)權(quán)限不夠(該死的虛擬主機(jī)提供商)。接下來我調(diào)試了很多語句,比如:
DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR);
顯示時區(qū)的 SQL 語句:
SHOW VARIABLES LIKE 'system_time_zone'
等等。而由于 MySQL 權(quán)限的限制并沒有徹底的解決方案。我 Google 了下,發(fā)現(xiàn)老外這個有一個非常好的解決方案。但是他需要修改每條插入數(shù)據(jù)的 SQL 語句。這樣的方案并不是非常的有效,一旦數(shù)據(jù)庫時區(qū)改成正常,那么相應(yīng)的 SQL 語句又要改回來。
而我考慮既然 PHP 端已經(jīng)可以正確的解決時間的問題了。MySQL 數(shù)據(jù)庫方面雖然可以使用相應(yīng)的函數(shù)解決,但是如果日后遷移到別的主機(jī)環(huán)境又要改回來。而相應(yīng)的字段是一個 TIMESTAMP 類型的,默認(rèn)的值為 CURRECT_TIMESTAMP,當(dāng)然是可以指定時間的。
那么我的做法就是讓 PHP 插入當(dāng)前正確的時間,這樣雖然程序方面需要做相應(yīng)的修改。不過日后配置修改起來只要修改一處就可以了。最后插入數(shù)據(jù)庫的時間注意一下格式:
date('Y-m-d H:i:s')這樣就可以解決問題了。附,一些非常好的參考資料:
這樣就可以解決問題了。附,一些非常好的參考資料:
http://www.modwest.com/help/kb6-256.html
http://topic.csdn.net/t/20060503/07/4728521.html
http://www.phpchina.com/5173/viewspace_5132.html
http://www.phpx.com/pth110355.php
更新:由此 wiLdGoose 兄說他也碰到同樣的問題,但是無法解決。結(jié)果經(jīng)過種種的假設(shè)和判斷以后,到最后發(fā)現(xiàn)原來是 Zend Studio 的時區(qū)配置問題(我狂汗ing)??磥沓ミ\(yùn)行環(huán)境,開發(fā)環(huán)境也是需要注意以下的。
關(guān)鍵詞標(biāo)簽:PHP,MySQL
相關(guān)閱讀
熱門文章 plsql developer怎么連接數(shù)據(jù)庫-plsql developer連接數(shù)據(jù)庫方法 2021年最好用的10款php開發(fā)工具推薦 php利用淘寶IP庫獲取用戶ip地理位置 在 PHP 中使用命令行工具
人氣排行 詳解ucenter原理及第三方應(yīng)用程序整合思路、方法 plsql developer怎么連接數(shù)據(jù)庫-plsql developer連接數(shù)據(jù)庫方法 PHP中防止SQL注入攻擊 PHP會話Session的具體使用方法解析 PHP運(yùn)行出現(xiàn)Notice : Use of undefined constant 的解決辦法 PHP如何清空mySQL數(shù)據(jù)庫 CakePHP程序員必須知道的21條技巧 PHP采集圖片實(shí)例(PHP采集)