Bu bir php hata mı, ya da benim dilimi / PHP ayarları ile yanlış bir şey var?

2 Cevap php

Dosyanın gerçek, tam içeriği:

<?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 değil, eğer bir özel durum gereken bir dize, kabul eder. Bu benim yerel makine üzerinde çalışır ama benim uzak sunuculardan birinde durum yakalandı (ve yine, ben am try / catch ve AYNI ÖZDEŞ kodu kullanarak) değildir:

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

Istisna yakalanmış değil uzak sunucuda için Ayarlar:

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

O iş yapar benim yerel ayarları:

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

Yerel olarak, özel durum yakalar ve hatayı yazdırır. date.timezone hem de hiçbir değer budur.

Belki de kapalı sadece benim iç sisteminizin dilimleri bulunuyor? Benim yerel kutu Ubuntu ve benim uzak CentOS, onlar muhtemelen tutarsız konum ama PHP hala istisna yakalamak gerekir?

Ben yönetici haklarına sahip değilsiniz beri Bilginize uzak kutusunu PHP güncelleme olamaz.

2 Cevap

Benim bahis PHP hata üzerindedir. Ben PHP kurucular atılmış durumları yakalamak ile ilgili sorunlar için kullanılan olduğunu biliyorum, ve burada neler oluyor gibi görünüyor.

Bu bir hata, çünkü sizin için seçenekler

  1. Sunucunun PHP sürümünü güncellemek; Eğer bu bir seçenek olmadığını söyledi
  2. strtotime() tarihini bulmak ya, sen nesne yönelimli tarzı erişmek gerekir ya da isterseniz DateTime, strtotime() ile hata yakalamak kullanın

Örneğin:

<?php

try {

    if (@strtotime($str) !== false) {
        $x = new DateTime($str);
    } else {
        throw new Exception("Failed to parse string ({$str})");
    }

} catch ( Exception $e ) {
    echo $e->getMessage();
}

Kesin konuda ama bu fonksiyonu kullanarak zaman dilimini ayarlamayı deneyin emin değil:

date_default_timezone_set('Europe/London'); // or whatever timezone

Bu işleri görmek.