2012-01-31 60 views
1

我最近將網站移至新主機。服務器設置非常相似。我用簡單的apache來複制新服務器上的配置。Zend Framework - 日期問題

但是,在前一臺服務器上運行得很好的相同Zend框架Web應用程序在新服務器上存在此日期問題。

無論使用其中任何一種,插入到mysql datetime列的日期都不正確。

$row->creation_date = date('Y-m-d H:i:s'); 

$row->creation_date = date('Y-m-d H:i:s', TRUE); 

在datetime列的值是0000-00-00 00:00:00

如果我改變數據類型在MySQL喜歡VARCHAR,該值爲2012

如果我添加一行權下的$行電話, mail(),給我發送date()的值,我得到正確的時間戳。

如果我Concat的日期()的值存儲在不同的列同一行的另一個值,我得到1970-01-01 00:00:01

我難倒!

有什麼建議嗎?

編輯

代碼沒有變化,從老遷移到新的服務器之間進行。

舊服務器 Zend引擎V2.3.0,版權所有(C)1998-2011 Zend技術 與Ioncube公司PHP裝載機v4.0.9,版權所有(C)2002-2011,由Ioncube公司有限公司和 與Zend衛隊裝載機V3.3,版權所有(C)1998-2010,由Zend技術

新服務器 這個程序可以使用Zend腳本語言引擎: Zend引擎V2.3.0,版權所有(C)1998-2011 Zend技術與ionCube PHP Loader v4.0.9,版權所有(c)2002-2011,由ionCube有限公司,和 與Zend Guard加載程序v3.3,版權所有(c)1998-2010,由Zend技術 用了Suhosin v0.9.32.1,版權所有(C)2007-2010,通過SektionEins GmbH的

WHM 11.30.5

CENTOS 6.2 x86_64的

PHP 5.3.8

MYSQL 5.0。 92

Zend Framework const VERSION ='1.9.5';

問題描述簡介: 雖然php date()提供了正確的日期值,但zend框架在嘗試插入到mysql datetime字段之前將值更改爲僅僅一年。我相信有什麼會導致zend在插入之前更改日期值,但無法找到什麼。

public function addComment(Core_Model_Item_Abstract $resource, Core_Model_Item_Abstract $poster, $body) 
{ 
$table = $this->getCommentTable(); 
$row = $table->createRow(); 

if(isset($row->resource_type)) 
{ 
    $row->resource_type = $resource->getType(); 
} 

$row->resource_id = $resource->getIdentity(); 
$row->poster_type = $poster->getType(); 
$row->poster_id = $poster->getIdentity(); 

$row->creation_date = date('Y-m-d H:i:s'); // this date() is throughout app 
//if I put mail(send me date('Y-m-d H:i:s') I got correct time stamp) 
$row->body = $body; 
$row->save(); 

if(isset($resource->comment_count)) 
{ 
    $resource->comment_count++; 
    $resource->save(); 
} 

return $row; 
} 

MySQL表:

CREATE TABLE `comments` (
`comment_id` int(11) unsigned NOT NULL auto_increment, 
`resource_id` int(11) unsigned NOT NULL, 
`poster_type` varchar(24) character set latin1 collate latin1_general_ci NOT NULL, 
`poster_id` int(11) unsigned NOT NULL, 
`body` text collate utf8_unicode_ci NOT NULL, 
`creation_date` datetime NOT NULL, 
`like_count` int(11) unsigned NOT NULL default '0', 
PRIMARY KEY (`comment_id`), 
KEY `resource_type` (`resource_id`), 
KEY `poster_type` (`poster_type`,`poster_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

建議:比較_framework_(在整個名單沒有給出)的版本。觀察:_「如果我將mysql中的數據類型更改爲類似varchar的值,則值爲2012」_使我認爲該變量在查詢中引用錯誤.... Evil ... – Wrikken 2012-01-31 23:22:35

+0

是您試圖格式化的這些存儲日期或你在尋找當前的時間戳嗎? – RockyFord 2012-02-01 04:10:56

+0

@chris:那不是Zend ** Framework **版本。 'Zend Engine!= Zend Framework'。 – Wrikken 2012-02-01 11:48:53

回答

0

我解決了這個問題,用替換PHP date()功能:

new Zend_Db_Expr('NOW()'); 
+0

我想補充說,升級PHP到5.3.27後,我不再有Zend Framework中的日期問題,所以如果任何人有Zend日期問題, 。 – Chris 2013-11-20 04:37:08

0

它是一個32位的機器?32位機器在2025年之後PHP strtotime不能正常工作。只是一個想法。

+0

仍然沒有解決方案! :(順便說一句,它的64位 – Chris 2012-02-14 00:35:22

+0

:(沒有答案仍... – Chris 2012-05-04 23:56:46