База данных часовых поясов PHP повреждена, ошибкаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 База данных часовых поясов PHP повреждена, ошибка

Сообщение Anonymous »

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


[ошибка] [клиент 50.78.108.177] PHP Неустранимая ошибка: strtotime(): База данных часовых поясов
повреждена — такого никогда не должно случиться!


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

спасибо,
Timnit

Обновите

на всякий случай: ошибка указывает на 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 );
}
Обновление №2:

на данный момент я исправил проблему, просто заставив функцию выше возвращать false; ничего не выполняя. Однако я до сих пор не выяснил причину проблемы.

обновление №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) "20.10.2011 05:25:22" string(19) "20.10.2011 05:25:22"
string(19) "2011 -10-19 05:10:06" string(19) "2011-10-19 05:10:06"


< strong>update#4:

есть еще один фрагмент кода, который генерирует журнал ошибок ниже:


Неустранимая ошибка PHP: date(): база данных часовых поясов повреждена — такого
никогда не должно произойти! в /srv/www/motionthink.com/public_html/wp-admin/includes/class-wp-filesystem-direct.php
в строке 346, ссылка:
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
Обновление №5:

выполнение php -i | fgrep -i date возвращает


Дата сборки => 13 декабря 2011 г. 18:43:02

Код: Выделить всё

date
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 => no value => no value

затем я отредактировал файл 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. Я все еще получаю сообщение об ошибке

Подробнее здесь: https://stackoverflow.com/questions/875 ... rupt-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»