PHP Timezone database is corrupt error

У меня есть сайт wordpress, который сегодня внезапно перестал работать. Когда я смотрю на журналы, я вижу ошибку:

[error] [client 50.78.108.177] PHP Fatal error: strtotime(): Timezone база данных повреждена - это не должно никогда происходить!

После чтения в google один человек сказал, что он обнаружил проблему с правами в /usr/share/zoneinfo. Я попробовал изменить разрешения на 777, 775, 770 и все равно получаю ту же ошибку. Я использую php PHP 5.3.2 на Ubuntu 10.04.3 LTS. Любые предложения или рекомендации будут полезны. Если все остальное не удастся, я собираюсь попробовать понизить версию php до более ранней версии, но я хотел попробовать другие вещи, прежде чем делать это.

спасибо, Timnit

Update
на всякий случай, если это поможет: ошибка указывает на strtotime в функции ниже

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:
на данный момент я устранил проблему, просто заставив функцию выше return false; без выполнения каких-либо действий. Однако я все еще не выяснил первопричину проблемы.

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:
есть еще один фрагмент кода, который генерирует журнал ошибок ниже:

PHP Fatal error: date(): Timezone database is corrupt - это должно никогда не происходить! в /srv/www/motionthink.com/public_html/wp-admin/includes/class-wp-filesystem-direct.php на строке 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:
делаем php -i | fgrep -i date возвращается

Build Date => Dec 13 2011 18:43:02

date
поддержка даты/времени => включена
date.default_latitude => 31.7667 => 31.7667
дата.долгота_по_умолчанию => 35.2333 => 35.2333
date.sunrise_zenith => 90.583333 => 90.583333
date.sunset_zenith => 90.583333 => 90.583333
date.timezone => нет значения => нет значения

затем я отредактировал файл php.ini, чтобы установить часовой пояс на "Америка/Лос-Анджелес" и получил вот такой результат

date/time support => enabled
date.default_latitude => 31.7667 => 31.7667
date.default_longitude => 35.2333 => 35.2333
date.sunrise_zenith => 90.583333 => 90.583333
date.sunset_zenith => 90.583333 => 90.583333
date.timezone => America/Los_Angeles => America/Los_Angeles

Затем я перезапустил apache2. Я все еще получаю ошибку

11
задан Ravi Hirani 27 May 2016 в 13:41
поделиться