I have a wordpress website which suddenly stopped working today. When I look at the logs I see and error:
[error] [client 50.78.108.177] PHP Fatal error: strtotime(): Timezone database is corrupt - this should never happen!
After reading up on google one person said that they discovered a permissions problem in /usr/share/zoneinfo. I tried changing the permissions to 777, 775, 770 and I still keep on getting the same error. I am running php PHP 5.3.2 on Ubuntu 10.04.3 LTS. Any suggestions or recommendations would be helpful.If all else fails I'm going to try downgrading to an earlier version of php but I wanted to try other things before doing that.
thanks,Timnit
Update
just in case it helps: the error points to strtotime in the function below
function mysql2date( $dateformatstring, $mysqlstring, $translate = true ) { $m = $mysqlstring; if ( empty( $m ) ) return false; if ( 'G' == $dateformatstring ) return strtotime( $m . '+0000' ); $i = strtotime( $m ); if ( 'U' == $dateformatstring ) return $i; if ( $translate ) return date_i18n( $dateformatstring, $i ); else return date( $dateformatstring, $i );}Update#2:
for now I have fixed the problem by simply having the function above return false; without performing anything. However I still haven't figured out the root cause of the problem.
update#3:
var_dump($dateformatstring)string(5) "d.m.y" string(1) "m" string(5) "d.m.y" string(1) "m" string(5) "d.m.y" string(1) "m"
var_dump($mysqlstring)string(19) "2011-10-20 05:35:01" string(19) "2011-10-20 05:35:01" string(19) "2011-10-20 05:25:22" string(19) "2011-10-20 05:25:22" string(19) "2011-10-19 05:10:06" string(19) "2011-10-19 05:10:06"
update#4:
there is another code snippet that is generating the error log below:
PHP Fatal error: date(): Timezone database is corrupt - this shouldnever happen! in /srv/www/motionthink.com/public_html/wp-admin/includes/class-wp-filesystem-direct.php on line 346, referer: wp_root_directory/wp-admin/plugins.php?plugin_status=upgrade
309 function dirlist($path, $include_hidden = true, $recursive = false) { 310 if ( $this->is_file($path) ) { 311 $limit_file = basename($path); 312 $path = dirname($path); 313 } else { 314 $limit_file = false; 315 } 316 317 if ( ! $this->is_dir($path) ) 318 return false; 319 320 $dir = @dir($path); 321 if ( ! $dir ) 322 return false; 323 324 $ret = array(); 325 326 while (false !== ($entry = $dir->read()) ) { 327 $struc = array(); 328 $struc['name'] = $entry; 329 330 if ( '.' == $struc['name'] || '..' == $struc['name'] ) 331 continue; 332 333 if ( ! $include_hidden && '.' == $struc['name'][0] ) 334 continue; 335 336 if ( $limit_file && $struc['name'] != $limit_file) 337 continue; 338 339 $struc['perms'] = $this->gethchmod($path.'/'.$entry); 340 $struc['permsn'] = $this->getnumchmodfromh($struc['perms']); 341 $struc['number'] = false; 342 $struc['owner'] = $this->owner($path.'/'.$entry); 343 $struc['group'] = $this->group($path.'/'.$entry); 344 $struc['size'] = $this->size($path.'/'.$entry); 345 $struc['lastmodunix']= $this->mtime($path.'/'.$entry); 346 $struc['lastmod'] = date('M j',$struc['lastmodunix']); 347 $struc['time'] = date('h:i:s',$struc['lastmodunix']); 348 $struc['type'] = $this->is_dir($path.'/'.$entry) ? 'd:'f'; 349 Update#5:
doing a php -i | fgrep -i date returns
Build Date => Dec 13 2011 18:43:02
datedate/time support => enableddate.default_latitude => 31.7667 => 31.7667date.default_longitude => 35.2333 => 35.2333date.sunrise_zenith => 90.583333 => 90.583333date.sunset_zenith => 90.583333 => 90.583333date.timezone => no value => no value
then I edited the php.ini file to set the timezone to "America/Los Angeles" and got this output
date/time support => enableddate.default_latitude => 31.7667 => 31.7667date.default_longitude => 35.2333 => 35.2333date.sunrise_zenith => 90.583333 => 90.583333date.sunset_zenith => 90.583333 => 90.583333date.timezone => America/Los_Angeles => America/Los_AngelesI then restarted apache2. I still get the error