Los verdaderos contenidos completos del archivo:¿Es esto un error de php, o algo está mal con mi configuración de huso horario/PHP?
<?php
error_reporting(E_ALL);
ini_set(display_errors, 'on');
try {
//$x = strtotime('blah');
$x = new DateTime('lol');
} catch (Exception $e) {
echo $e->getMessage();
}
El constructor acepta una cadena DateTime, que debería lanzar una excepción si no puede analizarlo. Esto funciona muy bien en mi máquina local, pero en uno de mis servidores remotos no se detecta la excepción (y de nuevo, me soy utilizando try/catch y el código exactamente el mismo):
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
ajustes del servidor remoto donde la excepción no se detecta:
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
Mis ajustes locales donde ejerza su trabajo:
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
A nivel local, se detecta la excepción y pri Apaga el error. El date.timezone
en ambos no tiene valor.
¿Tal vez solo son las zonas horarias de mi sistema interno las que están apagadas? Mi casilla local es Ubuntu y mi control remoto es CentOS, probablemente sean inconsistentes, pero ¿PHP no debería atrapar la excepción?
FYI No puedo actualizar PHP en el cuadro de control remoto ya que no tengo derechos de administrador.
Incluso podría intentar extender la clase DateTime, y anular el constructor con el código anterior, excepto que en lugar del nuevo DateTime usaría parent :: __ construct() . Recuerde que el prototipo tiene que ser el mismo, por lo que su construcción debe tomar dos parámetros (string $ str, DateTimeZone $ timezone = null).Esto tiene el beneficio adicional de determinar si el error de excepción atrapable __construct() es la fuente de sus problemas. – Frankie
Sí, actualmente uso strtotime y me aseguro de que no falle, y luego lo paso al constructor DateTime. Intentaré extenderlo. –
Puede reproducir esto en PHP 5.5.9ubuntu. – CarstenSchmitz