Iloo

https://iloo.wordpress.com

Archivos por Etiqueta: tips

PHP: tips, limpiar el codigo

0fd309979dce4933f1ae8fc364a9febe

Si bien los mensajes de tipo warning o notice no causando problemas “reales” en el funcionamiento de una aplicación o al menos la mayoría piensa eso, la realidad es que si causan problemas y bastante serios.

En primer lugar para cualquier aplicación se tiene que habilitar el registro de logs, la importancia de eso lo dejo para otro post, cuando este archivo es demasiado grande (experiencia propia) ocasiona que el servidor y por tanto la aplicación funcionen mas lentos de lo normal. A demás es una de las razones para el famoso 500 Internal Server Error.

Algunas alertas comunes son las siguientes:

PHP Notice: Undefined index: var1 in …

Obviamente se esta buscando el index en un array o una variable enviada por get o post que no existe.

por ejemplo este error se reproduciria de la siguiente manera:

$var_array = array('var2' => 2, 'var3' => 3);
echo $var_array['var1'];

O el mas común que el archivo espere recibir datos enviados mediante get o post y que estos no hayan sido enviados. Por ejemplo:

if($_GET['var1'])
  echo 'yes';

Si var1 no fue enviada por el método get en este caso produciría la alerta.

Para esto es mejor verificar antes si la variable esta “seteada”

if(isset($_GET['var1']) && $_GET['var1'])
  echo 'yes';

PHP Notice: Undefined variable: var2 in …

Muchas veces vi que código de esta manera:

if ($a == 1)
  $b = 2;
echo $b;

Pero en el caso que la variable $a sea igual a 2 entonces la variable $b nunca seria inicializada, una solución es definir la variable antes:

$b = 0;
if ($a == 1)
  $b = 2;
echo $b;

Esto también pasa cuando se usa un array sin haber sido inicializado, por ejemplo:

foreach($orders as $order)
  $var_array[] = $order;
print_r($var_array);

La solución seria tan simple como definir la variable antes de usarla.

$var_array = array();
 foreach($orders as $order)
 $var_array[] = $order;
print_r($var_array);

PHP Notice: Use of undefined constant var3 – assumed ‘var3’ in …

Este es un clásico, la regla es: si el index de un array es un entero no se necesita comillas, si es una cadena si necesita comillas.

echo $array[0]; // bien
echo $array['0']; // bien
echo $array['index']; // bien
echo $array[index]; // MAL

PHP Notice: A session had already been started – ignoring session_start() in …

Si la sesion ya ha sido iniciada no es necesario volver a iniciarla. Si uno no esta seguro de haber iniciado la sesión mejor verificar antes de iniciarla:

if(!isset($_SESSION)) 
  session_start();

Estos son algunas sugerencias para arreglar y limpiar los warnings y notices en el log de php.

Desarrollo, arreglar no parchar

Soy el más nuevo en mi equipo de trabajo y creo que cuando vas trabajando mucho tiempo con un equipo adoptas sus malas costumbres de trabajo, el punto es que realice un modulo que a partir de una entrada de datos realiza un proceso y devuelve una salida, el típico sistema Entrada – Proceso – Salida, pero los datos de entrada son la respuesta de una llamada a un API externo, el cual no es manejado por nosotros.

Por un tiempo el modulo funcionaba de la manera correcta, realizaba todo el proceso y devolvía los resultados esperados, hasta que un día, los resultados no eran los que se esperaban, el resultado tampoco era demasiado grave se arreglaba agregando una sentencia if.

Obviamente un compañero de trabajo me sugirió esta solución y eh aquí el tema del post, algo tuvo que variar en la entrada de datos para que la salida no sea la esperada, personalmente creo que esto se considera como un error y agregando la sentencia if el error en el fondo seguiría ocurriendo, creo que lo más correcto sería arreglar esto en el proceso del modulo y no en la salida.

Solo se estaría ocultando el error, no se estaría solucionando, en este caso particular no afecta mucho pero imagino que en sistemas mucho más complejos un error como este sería algo serio, en sistemas grandes donde hacer un proceso extra puede sobrecargar y afectar a todo el sistema.

La cosa que al final fue como lo sospeche, la respuesta del API había cambiado me tomo más tiempo descubrir el error pero creo que esta es la manera correcta de solucionar los errores.

Desarrollo: lo que no se debe hacer

Hace tiempo que voy trabajando para una compañía medianamente grande, claro que no soy el único desarrollador y a veces es necesario modificar código ajeno, es muy gracioso cuando te encuentras con cosas como esta:

<p><strong>Administrator<? echo "'" ?>s Email:</strong></p>

Osea que paso ?

Lo aconsejable (creo yo) hubiera sido poner &#39 ; (sin tomar en cuenta el espacio entre el 9 y ; ) en vez de <? echo “‘” ?> y se obtenía el mismo resultado, la comilla simple.

Pero siempre hay fanáticos de PHP.

Arch: tips

Actualizar solo un paquete

pacman -S nombre_paquete

Actualizar paquetes de desarrollo

yaourt -Syu --devel --aur

Arreglar problema del mensaje “No queda espacio en el dispositivo”

Borrar la cache:

pacman -Scc

Borrar los archivos temporales

rm -R /tmp/yaourt-tmp-root/

Eliminar paquetes huérfanos

pacman -Rsn $(pacman -Qdtq)