Luego del último "no cambio de hora" oficial en Chile, tuvimos algunos problemas en el servidor linux de la empresa, ante lo cual como primera solución optamos por establecer la zona horaria del servidor en la zona Argentina.
Luego de unos días, las aplicaciones en php comenzaron a registrar como warning la diferencia entre la zona horaria de las aplicaciones y la zona del sistema, mostrando inconsistencia.
Gracias al post http://gmt-4.blogspot.com/2008/03/php-y-las-zonas-horarias.html me enteré de que las versiones recientes de php permiten trabajar con su propia zona.
yum-install php-devel pecl install timezonedb
Instalar módulo timezonedb parchado
El procedimiento a seguir es descargar los fuentes de timezonedb (que están en lenguaje C), modificar la definición de la zona America/Santiago y luego agregar el módulo a PHP.
En primer lugar descargamos los fuentes mediante:
pecl download timezonedb
Esto descargará un archivo con la versión más reciente del módulo. Lo descomprimimos y entramos al directorio recien creado:
El archivo timezonedb.h es el que contiene la información de las zonas horarias.
Luego, estamos en condiciones de compilar el módulo ejecutando los siguientes comandos:
Luego, como usuario root, instalamos el módulo.
make install
En caso de encontrar el error "Cannot find autoconf" me guié por el siguiente enlace:
http://duntuk.com/cannot-find-autoconf
En este caso la solución era instalar el autoconf con yum install autoconf
Finalmente para ver qué zona horaria está utilizando php se puede imprimir con el comando
http://php.net/manual/es/function.date-default-timezone-set.php
Ojo, hay que verificar si está instalada la extensión en el php.ini. Para ello en el caso de zend server, buscar en /usr/local/zend/etc/php.ini y con el editor vim y el comando / se puede buscar el texto extension=timezonedb.so
Finalmente para verificar podemos hacer un php con el código:
y debería indicar en mi caso "2012-03-23 1:00:00 -0300 America/Santiago 1" donde es -3 ya que aún no se cambia al horario de invierno.
Luego de unos días, las aplicaciones en php comenzaron a registrar como warning la diferencia entre la zona horaria de las aplicaciones y la zona del sistema, mostrando inconsistencia.
Gracias al post http://gmt-4.blogspot.com/2008/03/php-y-las-zonas-horarias.html me enteré de que las versiones recientes de php permiten trabajar con su propia zona.
yum-install php-devel pecl install timezonedb
Instalar módulo timezonedb parchado
El procedimiento a seguir es descargar los fuentes de timezonedb (que están en lenguaje C), modificar la definición de la zona America/Santiago y luego agregar el módulo a PHP.
En primer lugar descargamos los fuentes mediante:
pecl download timezonedb
Esto descargará un archivo con la versión más reciente del módulo. Lo descomprimimos y entramos al directorio recien creado:
tar xfz timezonedb-"año.mes".tgz
cd timezonedb-"año.mes" donde año y mes son números.
El archivo timezonedb.h es el que contiene la información de las zonas horarias.
Luego, estamos en condiciones de compilar el módulo ejecutando los siguientes comandos:
phpize
./configure
make
Luego, como usuario root, instalamos el módulo.
make install
En caso de encontrar el error "Cannot find autoconf" me guié por el siguiente enlace:
http://duntuk.com/cannot-find-autoconf
En este caso la solución era instalar el autoconf con yum install autoconf
Finalmente para ver qué zona horaria está utilizando php se puede imprimir con el comando
echo date_default_timezone_get();
http://php.net/manual/es/function.date-default-timezone-set.php
Ojo, hay que verificar si está instalada la extensión en el php.ini. Para ello en el caso de zend server, buscar en /usr/local/zend/etc/php.ini y con el editor vim y el comando / se puede buscar el texto extension=timezonedb.so
Finalmente para verificar podemos hacer un php con el código:
echo date("Y-m-d G:i:s O e I\n", strtotime("2012-03-23");
y debería indicar en mi caso "2012-03-23 1:00:00 -0300 America/Santiago 1" donde es -3 ya que aún no se cambia al horario de invierno.
Comentarios