2012-01-31 6 views
1

최근에 웹 사이트를 새 호스트로 이동했습니다. 서버 설정은 매우 유사합니다. 새 서버의 구성을 복제하기 위해 쉬운 아파치를 사용했습니다.젠드 프레임 워크 - 날짜 문제

그러나 이전 서버에서 정상적으로 실행 된 동일한 zend 프레임 워크 웹 응용 프로그램은 새 서버에서이 날짜 문제가 있습니다.

이들 중 하나를 사용하든간에, mysql datetime 열에 삽입 된 날짜가 잘못되었습니다. 내가 바로 $ 행 호출 아래 라인을 추가하면 내가 VARCHAR를 좋아하는 MySQL의에서 데이터 유형을 변경하면 날짜 열의

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

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

값은 0000-00-00 00:00:00

이며, 값이 2012

입니다, mail(), date()의 값을 이메일로 보내려면 올바른 타임 스탬프를 얻는다. 나는 다른 열 같은 행에 저장되어 다른 값으로 날짜() 값을 CONCAT 경우

, 나는 내가 난처한 상황에 빠진거야 0시 0분 1초

1970-01-01를 얻을!

제안 사항? 코드에 대한 변경이 새 서버로 기존의 이동 사이에 없었다

편집 할 수 있습니다.

이전 서버 젠드 엔진 v2.3.0, 저작권 (C) 1998에서 2011 사이 젠드 테크놀로지 이온 큐브 (주)에 의해 이온 큐브 PHP 로더 v4.0.9, 저작권 (C) 2002-2011,와 및 와 젠드 가드 젠드 기술에 의해 로더 V3.3, 저작권 (C) 1,998에서 2,010 사이,

새 서버 이 프로그램은 젠드 스크립트 언어 엔진을 사용한다 : 젠드 엔진 v2.3.0, 저작권 (C) 1,998에서 2,011 사이 젠드 기술을 ionCube PHP 로더 v4.0.9를 사용하는 , ionCube Ltd.의 Copyright (c) 2002-2011 및 Zend Guard 로더 v3.3을 사용하는 , Copyright (c) 1998-2010, Zend TechnologiesSektionEins GmbH의

WHM 11.30.5

에 CentOS 6.2 x86_64에

PHP 5.3.8

5.0 의해 수호신의 v0.9.32.1, 저작권 (c) 2007년부터 2010년까지와 6,. 92

젠드 프레임 워크 const VERSION = '1.9.5';

짧은 설명 : php date()가 올바른 날짜 값을 제공하지만 zend 프레임 워크는 mysql datetime 필드에 삽입하기 전에 값을 단지 1 년으로 변경합니다. 뭔가가 삽입하기 전에 날짜 값을 변경하려면 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_의 버전을 비교 – Wrikken

+0

은 저장하려는 날짜이거나 현재 타임 스탬프를 찾고 계십니까? – RockyFord

+0

@chris : Zend ** 프레임 워크 ** 버전이 아닙니다. 'Zend Engine! = Zend Framework'. – Wrikken

답변

0

내가 가진 PHP date() 기능을 대체이 문제를 해결했습니다. 관찰 : _ "mysql에서 varchar를 사용하도록 데이터 유형을 변경하면 값은 2012입니다."_ 변수가 쿼리에서 잘못 인용되었다고 생각하게 만듭니다. 악의적 ...
+0

PHP를 5.3.27로 업그레이드 한 후에 Zend Framework에서 더 이상 문제가 발생하지 않았습니다. 다른 사람이 Zend 날짜 문제가있는 경우 . – Chris

0

가 32 비트 컴퓨터인가?32 비트 시스템에서 PHP strtotime이 2025 이후에 올바르게 작동하지 않습니다. 그냥 생각.

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

아직 해결책이 없습니다! :(btw의 64 비트 – Chris

+0

: (답변이 아직 없습니다 ... – Chris