Problemas con la fecha en php

Si os aparece el error «PHP Warning:  date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Europe/Berlin’ for ‘CEST/2.0/DST’ instead in» que me he encontrado en el php 5.3 se soluciona modificando en el php.ini tenemos que poner nuestra fecha por defecto:


[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin";

 

PHP, MySQL y longitud de los password

Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in /XXXXXX on line 12
Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in /XXXXXX on line 12
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file in /XXXXXX on line 12

Para aquellos que tengan instalado PHP 5.3 o superior y se intenten conectar a una base de datos mysql, sea de la forma que sea (PDO, mysql o mysqli) y le aparezca ese curioso mensajito que tenéis arriba sabréis (tras un par de consultas a nuestro viejo amigo google) que mysql desde la 4.1 o superior (como indica el mensaje) ha variado la longitud de las contraseñas de 16 a 41 (el hash).

El problema es que las librerías incluidas en PHP aun siguen erre que erre intentando conectarse a la vieja usanza y os lanzara el error que tenéis arriba (con vuestras lineas de código, claro). Que os quedara ojiplaticos y con cara de tontos.

Tranquilos, existen varias soluciones al respecto. La primera es la que indica, entrar en la base de datos (con un gestor que os de la gana o a pedal) con el usuario que tiene ese problema y colocar esa linea para transformar nuestro password de 16 a 41 «caracteres». Si entráis como root tendréis que seguir estos pasos:

UPDATE mysql.user SET Password = OLD_PASSWORD('password') WHERE Host = 'host' AND User = 'usuario';
FLUSH PRIVILEGES

Recordad que el FLUSH PRIVILEGES es importante porque sino, no vale para nada.

Otra solución, si entráis como root en la base de datos es poner:

SET old_passwords=1

O tocar el my.ini buscar la zona de [MYSQLD] y añadir:

old_passwords=1

O arrancar mysqld con la opción –old-passwords

O, por ultimo, actualizar el driver del php recompilandolo de nuevo. Lo más costoso pero que a la larga os librará de problemas.

Como veis, para un mismo problema hay cientos de soluciones, y cada cual debemos de coger el que más nos guste.

Aun con eso, si queréis más información y charlar un rato os recomendamos ver el foro de mysql y PHP oficial.