Các sản, đầy đủ nội dung của tập tin:Đây có phải là lỗi php, hoặc có vấn đề gì với cài đặt múi giờ/PHP của tôi không?
<?php
error_reporting(E_ALL);
ini_set(display_errors, 'on');
try {
//$x = strtotime('blah');
$x = new DateTime('lol');
} catch (Exception $e) {
echo $e->getMessage();
}
Các constructor DateTime chấp nhận một chuỗi, mà phải ném một ngoại lệ nếu nó không thể phân tích nó. Này chạy tốt trên máy tính địa phương của tôi, nhưng trên một máy chủ từ xa của tôi là ngoại lệ không bị bắt (và một lần nữa, tôi là sử dụng try/catch và mã chính xác cùng):
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
Cài đặt cho máy chủ từ xa nơi ngoại trừ không bắt:
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
thiết lập địa phương của tôi mà nó không làm việc:
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
tại địa phương, nó bắt ngoại lệ và pri nts lỗi. Các date.timezone
trên cả hai là không có giá trị.
Có lẽ đó chỉ là múi giờ của hệ thống nội bộ đang tắt? Hộp địa phương của tôi là Ubuntu và từ xa của tôi là CentOS, có lẽ chúng không nhất quán nhưng không nên PHP vẫn bắt được ngoại lệ?
FYI Tôi không thể cập nhật PHP trên hộp điều khiển từ xa vì tôi không có quyền quản trị.
Bạn thậm chí có thể thử mở rộng lớp DateTime và ghi đè hàm tạo bằng mã ở trên, ngoại trừ thay vì DateTime mới bạn sẽ sử dụng parent :: __ construct() . Hãy nhớ rằng nguyên mẫu phải giống nhau, vì vậy cấu trúc của bạn nên lấy hai tham số (chuỗi $ str, DateTimeZone $ timezone = null).Điều này có lợi ích bổ sung khi xác định liệu lỗi ngoại lệ __construct() có phải là nguồn gốc của các vấn đề của bạn hay không. – Frankie
Vâng tôi hiện đang sử dụng strtotime và đảm bảo nó không bị lỗi, sau đó cho nó vào hàm tạo DateTime - Tôi sẽ thử mở rộng. –
Có thể tái tạo điều này trong PHP 5.5.9ubuntu. – CarstenSchmitz