У меня есть сайт Wordpress, который внезапно прекратил работать сегодня. Когда я смотрю на журналы, которые вижу и ошибки:
[ошибка] [клиент 50.78.108.177] PHP Неустранимая ошибка: strtotime(): Timezone база данных повреждена - этого никогда не должно быть!
После чтения в Google один человек сказал, что обнаружил проблему с разрешениями в /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 );
}
Update # 2:
на данный момент я исправил проблему, просто используя функцию выше return false;
, ничего не выполняя. Однако я до сих пор не понял причину проблемы.
обновление # 3:
var_dump($dateformatstring)
string (5) строка "d.m.y" (1) строка "m" (5) строка "d.m.y" (1) "m" строка (5) строка "d.m.y" (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"
Обновление # 4:
есть еще один фрагмент кода, который генерирует журнал ошибок ниже:
PHP Неустранимая ошибка: дата(): база данных часовых поясов повреждена - это должно никогда не случится! в /srv/www/motionthink.com/public_html/wp-admin/includes/class-wp-filesystem-direct.php в строке строка 346,: wp_root_directory/WP-администратора/plugins.php? plugin_status = обновление
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
возвращает
Дата сборки = > 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, чтобы установить часовой пояс в "America/Los Angeles" и получил этот вывод
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. Я все еще получаю сообщение об ошибке