gerçek, tam içeriği:Bu bir php hatası mı, yoksa timezone/PHP ayarlarında bir sorun mu var? Dosyanın
<?php
error_reporting(E_ALL);
ini_set(display_errors, 'on');
try {
//$x = strtotime('blah');
$x = new DateTime('lol');
} catch (Exception $e) {
echo $e->getMessage();
}
DateTime yapıcı bunu ayrıştırmak olamazsa bir istisna bir dize vardı, kabul eder. Bu benim yerel makinede iyi çalışır ama benim uzak sunuculardan biri durum yakalandı değildir (ve yine, try/catch ve AYNI TAM kodu kullanarak değilim ): uzak sunucuya nereye
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [function.DateTime---construct]: Failed to parse time string (lol) at position 0 (l): The timezone could not be found in the database' in /var/www/html/site_com/rez/date.php:9 Stack trace: #0 /var/www/html/site_com/rez/date.php(9): DateTime->__construct('lol') #1 {main} thrown in /var/www/html/site_com/rez/date.php on line 9
Ayarlar durum yakalandı değildir: o nasıl çalışır
PHP Version 5.2.5
date date/time support enabled "Olson" Timezone Database Version 2007.9 Timezone Database internal Default timezone America/Chicago
Directive Local Value Master Value 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
Benim yerel ayarları: yerel
PHP 5.2.10
date date/time support enabled "Olson" Timezone Database Version 0.system Timezone Database internal Default timezone System/Localtime
Directive Local Value Master Value 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
, bu durum ve pri yakalar hatayı giderir. Her ikisinde de date.timezone
değeri yoktur.
Belki de dahili sistemimin kapalı olan saat dilimi nedir? Yerel kutum Ubuntu'dur ve uzaktan kumandayı CentOS'dur, muhtemelen tutarsızlar ama PHP hala istisnayı yakalamamalı mı?
FYI Yönetici haklarına sahip olmadığımdan PHP'yi uzaktaki kutuda güncelleyemiyorum.
Eğer DateTime sınıfını genişletmeyi deneyebilirsiniz ve yukarıdaki kodla kurucuyu geçersiz kılabilirsiniz, yeni DateTime yerine parent :: __ construct() kullanırsınız . Prototipin aynı olması gerektiğini unutmayın, bu yüzden yapınızın iki parametre alması gerekir (string $ str, DateTimeZone $ timezone = null).Bu, __construct() ayrılmamış özel durum hatalarının, sorunlarınızın kaynağı olup olmadığını belirleme yararına sahiptir. – Frankie
Evet, şu anda strtotime kullanıyorum ve başarısız olmadığından emin olmak için onu DateTime yapıcısına besliyorum - genişletmeyi deneyeceğim. –
Bunu PHP 5.5.9ubuntu'da yeniden üretebilir. – CarstenSchmitz