Iloo

https://iloo.wordpress.com

Archivos por Etiqueta: server

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.

Tips: Ajustar las horas (PHP, MySQL, Servidor)

time

Este es un punto que la mayoría pasa por alto, en el mejor de los casos se configura la sección de timezones en PHP y ahí termina el asunto.

Para que no existan discrepancias en los registros es necesario sincronizar los tres aspectos,  ya que cada uno maneja su propio registro de tiempo.

  • PHP
  • MySQL
  • El Servidor.

El Servidor

En primer lugar para saber la fecha y la zona horaria en la que se encuentra el servidor ejecutamos lo siguiente en la consola:

date

Dependiendo del SO la manera de cambiar la fecha y zona horaria varia (no mucho) pero una herramienta útil es usar NTP (Network Time Protocol) para definir este aspecto, la mayoría por no decir todos los SO y sus respectivas distribuciones tienen paquetes para su instalación y uso.

PHP

Para ver la fecha actual se maneja la función date, por ejemplo:

<?php
    echo date('D M j G:i:s T Y');
?>

*Pero ojo que la función date devolvería la fecha del cliente y no del servidor.

Para definir la zona horaria se modifica el archivo php.ini en la directriz timezones:

...
date.timezone = America/New_York
...

MySQL

En primer lugar verificar la zona horaria y fecha en la que se encuentra MySQL, mediante una consulta:

SELECT NOW();

Y finalmente definir la fecha:

SET GLOBAL time_zone = America/New_York;

Mas info: MySQL Server Time Zone Support

CherryMusic: music streaming server

cherrymusic_logo

Hace tiempo realice un post sobre streeme, una manera de compartir la colección de música local.

Como cambie de equipo hace un tiempo, y si bien la instalación de streeme no es difícil, pero si un poco larga, busque otra alternativa que sea un poco mas sencilla y rápida de instalar, después de probar algunas aplicaciones similares vi que todas tenían algunos detalles que no eran convincentes.

  • Subsonic, no cargaba el frame izquierdo, donde se encuentra la colección.
  • Ampache, la versión alpha no contenía el reproductor y en la última versión estable la página de instalación se encontraba en blanco.
  • jinzora, alertas por todo lado, imposible de visualizar la aplicación y la colección de música.

A punto de instalar y configurar streeme de nuevo intente con CherryMusic y la verdad es genial, escrito en python, aquí algunas características.

  • Instalación fácil y rápida.
  • Indexa la colección casi de inmediato (50GB en menos de 3 minutos).
  • Configuración sencilla.
  • Interfaz limpia, para nada complicada (creo que usaron twitter bootstrap).
  • Posibilidad de manejar varios “playlists”.
  • Multiusuario,

La instalación (mínima):

yaourt -S cherrymusic

Y la configuración:

cherrymusic --setup --port 8080

cherrymusic1

 

cherrymusic2

Más info | CherryMusic (official) y CherryMusic (Arch)

Arch: error al actualizar xf86-video-intel / intel-dri

Arch-Linux

Hoy al actualizar Arch, obtengo lo siguiente en la consola:

...
xf86-video-intel: /usr/lib/libI810XvMC.so exists in filesystem
xf86-video-intel: /usr/lib/libI810XvMC.so.1 exists in filesystem
xf86-video-intel: /usr/lib/libI810XvMC.so.1.0.0 exists in filesystem
xf86-video-intel: /usr/lib/libIntelXvMC.so exists in filesystem
xf86-video-intel: /usr/lib/libIntelXvMC.so.1 exists in filesystem
xf86-video-intel: /usr/lib/libIntelXvMC.so.1.0.0 exists in filesystem
...

Después de realizar algunas configuraciones reinicio y el problema, no arranca el entorno grafico.

La salida que se muestra es la siguiente:

...
Loading extension GLX
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error

Imagino que debe ser alguna dependencia al actualizar algunas paquetes, procedo a reinstalar xf86-video-intel e intel-dri y la misma salida anterior.

La solución, primero verificar los archivos que producen el error, verificar que no pertenezcan a ningón otro paquete:

pacman -Qo /usr/lib/libI810XvMC.so

Una vez verificado que no pertenece a ninguno se procede a borrarlo

rm /usr/lib/libI810XvMC.so

Y volver a instalar los paquetes en cuestion:

pacman -S xf86-video-intel intel-dri

streeme: servidor de música

streeme es un servidor de música parecido a Grooveshark pero que uno mismo puede administrar, la ventaja es de poder tener acceso a nuestra música desde cualquier sitio, creo que este tiene muchas más ventajas a otros parecidos (Ampache, Subsonic, etc), entre los cuales:

  • Hecho en python y HTML5, incluyendo el reproductor.
  • Administración por línea de comando.
  • Versión para terminales móviles incluido.
  • Interfaz muy bien trabajada.

La aplicación esta disponible en su sitio www.streeme.com, y la instalación también se encuentra allí, es bastante sencilla y si se siguen los pasos al pie de la letra se tiene todo funcionando.

El único detalle que no incluyen es en el caso de que se tenga la colección de música en  otra partición (y se haya configurado esa dirección en streeme), y si se tiene el modulo PHP safe habilitado conlleva a que la colección de música no se pueda leer, esto se soluciona de la siguiente manera:

Se agrega a la variable open_basedir la ruta de la colección de música, por ejemplo /media/ParticionA/Music, todo en el archivo php.ini