PHP Notice: Undefined index: $variable
Hace poco tuve problemas dentro de un proyecto, por el tamaño excesivo que llegaba a tener el archivo de error_log dentro del servidor, en la mañana del lunes cuando iniciaba el día laboral el archivo tenia un tamaño de 1.5 Mb y al final de la semana llegaba casi a los 300 Mb... esto me saco de onda, como puede ser posible que eso suceda?, pues me puse a investigar y revisando el contenido del archivo error_log contenía algo como esto:
-[Tue Feb 09 08:00:39 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: accion in /var/www/vhosts/misitioweb.com/httpdocs/nomina/index.php on line 50, referer: http://misitioweb.com/ [Tue Feb 09 08:15:58 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: accion in /var/www/vhosts/misitioweb.com/httpdocs/nomina/index.php on line 50, referer: http://www.misitioweb.com/nomina/ [Tue Feb 09 08:15:58 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: accion in /var/www/vhosts/misitioweb.com/httpdocs/nomina/index.php on line 50 [Tue Feb 09 08:15:59 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: opcion in /var/www/vhosts/misitioweb.com/httpdocs/nomina/main.php on line 286 [Tue Feb 09 08:16:05 2010] [error] [client 255.255.255.255] PHP Notice: Undefined variable: conexion in /var/www/vhosts/misitioweb.com/httpdocs/nomina/inicio_trabajador.php on line 25, referer: http://www.misitioweb.com/nomina/main.php?accion=inicio [Tue Feb 09 08:16:05 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: _pagi_pg in /var/www/vhosts/misitioweb.com/httpdocs/nomina/inicio_trabajador.php on line 72, referer: http://www.misitioweb.com/nomina/main.php?accion=inicio [Tue Feb 09 08:16:05 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: num_filas in /var/www/vhosts/misitioweb.com/httpdocs/nomina/inicio_trabajador.php on line 72, referer: http://www.misitioweb.com/nomina/main.php?accion=inicio [Tue Feb 09 08:16:05 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: _pagi_pg in /var/www/vhosts/misitioweb.com/httpdocs/nomina/inicio_trabajador.php on line 76, referer: http://www.misitioweb.com/nomina/main.php?accion=inicio [Tue Feb 09 08:16:05 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: num_filas in /var/www/vhosts/misitioweb.com/httpdocs/nomina/inicio_trabajador.php on line 76, referer: http://www.misitioweb.com/nomina/main.php?accion=inicio [Tue Feb 09 08:16:05 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: _pagi_pg in /var/www/vhosts/misitioweb.com/httpdocs/nomina/inicio_trabajador.php on line 85, referer: http://www.misitioweb.com/nomina/main.php?accion=inicio [Tue Feb 09 08:16:05 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: num_filas in /var/www/vhosts/misitioweb.com/httpdocs/nomina/inicio_trabajador.php on line 85, referer: http://www.misitioweb.com/nomina/main.php?accion=inicio
En la vida me he encontrado con este error de php, pero revisando en internet se debe a que los parametros que espera el script no estan dentro del url, es decir se hace referencia a una variable dentro del script que no esta dentro del url o que no tiene un valor establecido. Ejemplo:
El url: www.misitioweb.com/nomina el script index.php espera el parametro llamado accion que tiene que ir dentro del url, la variable $accion = $_GET['accion'] esta definida dentro de este script, pero al momento de no encontrar la variable accion manda la notificación al archivo error_log [Tue Feb 09 08:00:39 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: accion in /var/www/vhosts/misitioweb.com/httpdocs/nomina/index.php on line 50, referer: http://misitioweb.com/
El contenido de la variable $accion es esperado dentro del contenido del script, en este caso en la línea 50, pero como esa variable no se encuentra en el URL que tiene cuando se accede a ese script, simplemente el interprete de php genera esa "alerta" dentro del archivo error_log, y si este efecto lo multiplicas por varios módulos, con este tipo de falta de validación, pues simplemente se puede llegar a convertir en un verdadero horror para el administrador del servidor, o si tienes varios peor, el archivo de error_log se puede convertir en un monstruo insaciable de espacio en disco, así que lo mejor que puedes hacer es corregir esto dentro de la programación del script y evitar estos errores tontos.
Entonces lo mejor que se puede hacer es una validación de los parametros que se estan pasando por el url para que el interprete de php no genere este error cuando se quiere hacer referencia a variables que no existen dentro del url que se pasa como parametro.
El url: www.misitioweb.com/nomina el script index.php espera el parametro llamado accion que tiene que ir dentro del url, la variable $accion = $_GET['accion'] esta definida dentro de este script, pero al momento de no encontrar la variable accion manda la notificación al archivo error_log [Tue Feb 09 08:00:39 2010] [error] [client 255.255.255.255] PHP Notice: Undefined index: accion in /var/www/vhosts/misitioweb.com/httpdocs/nomina/index.php on line 50, referer: http://misitioweb.com/
El contenido de la variable $accion es esperado dentro del contenido del script, en este caso en la línea 50, pero como esa variable no se encuentra en el URL que tiene cuando se accede a ese script, simplemente el interprete de php genera esa "alerta" dentro del archivo error_log, y si este efecto lo multiplicas por varios módulos, con este tipo de falta de validación, pues simplemente se puede llegar a convertir en un verdadero horror para el administrador del servidor, o si tienes varios peor, el archivo de error_log se puede convertir en un monstruo insaciable de espacio en disco, así que lo mejor que puedes hacer es corregir esto dentro de la programación del script y evitar estos errores tontos.
Entonces lo mejor que se puede hacer es una validación de los parametros que se estan pasando por el url para que el interprete de php no genere este error cuando se quiere hacer referencia a variables que no existen dentro del url que se pasa como parametro.
La corrección de este error es tan fácil como hacer una simple validación con un if para saber si la variable existe y si esta tiene un valor, de esta forma si no existe pues le asignas un valor nulo, y te olvidas de este dolor de cabeza. Un error menos en que pensar y aún faltarían otros por corregir.
Ejemplo de código de validación:
$variable = isset($_GET['nombre']) ? $_GET['nombre'] : null ;
A $variable le vas a asignar el valor de "nombre" si es que tiene algún valor, de lo contrario le asignas un valor null a $variable..
kowalick
Comentarios