Tips de PHP: Funciones para el manejo de Nombres de Archivo

Hay tres funciones en PHP que ayudan mucho para programar, las tres tienen que ver con el manejo de nombres de archivo (no con el archivo en si), estas son:

basename($cadena[, $sufijo])
Regresa el nombre del archivo o directorio, por ejemplo:

<?php
basename('/var/www/index.html'); //regresa 'index.html'
basename('/var/www'); //regresa 'www'
?>

Adicionalmente si se le pasa un segundo parámetro se removerá el sufijo si es que existe por ejemplo:

<?php
basename('/var/www/index.html', '.html'); //regresa 'index'
?>

dirname($cadena)
Regresa el nombre del directorio padre del archivo o directorio, es decir regresa lo opuesto a basename

<?php
dirname('/var/www/index.html'); //regresa '/var/www'
dirname('/var/www'); //regresa '/var'
?>

Debe notarse que no regresará el último separador (/)

pathinfo($cadena[, $opciones])
Regresa información del archivo, si no se le pasan opciones regresa un arreglo con las siguientes llaves:
dirname: nombre del directorio, es la misma salida de dirname($cadena)
basename: nombre del archivo, es la misma salida de basename($cadena)
extension: Si la extensión existe estará presente y será la extensión del archivo (cadena a partir del último .)
filename: nombre del archivo sin extension

Por ejemplo:

<?php

pathinfo('/var/www/index.html');
/*
regresa:
Array
(
    [dirname] => /var/www
    [basename] => index.html
    [extension] => html
    [filename] => index
)
*/

pathinfo('/var/www/index');
/*
regresa:
Array
(
    [dirname] => /var/www
    [basename] => index
    [filename] => index
)
*/

pathinfo('/var/www/index.inc.php');
/*
regresa:
Array
(
    [dirname] => /var/www
    [basename] => index.inc.php
    [extension] => php
    [filename] => index.inc
)
*/

pathinfo('/var/www');
/*
regresa:
Array
(
    [dirname] => /var
    [basename] => www
    [filename] => www
)
*/

?>

Adicionalmente se puede pasar una constante como parámetro para especificar unicamente un valor, en este caso la función regresa una cadena solamente; las constantes posibles son:

  • PATHINFO_DIRNAME
  • PATHINFO_BASENAME
  • PATHINFO_EXTENSION
  • PATHINFO_FILENAME

De los cuales, solamente son útiles: PATHINFO_EXTENSION y PATHINFO_FILENAME ya que PATHINFO_DIRNAME es equivalente a dirname y PATHINFO_BASENAME es equivalente a basename

PATHINFO_FILENAME evitar hacer dos llamadas (una a filepath para saber la extensión y la siguiente a basename con la extensión como sufijo para saber el nombre del archivo)

Ejemplo:

<?php

pathinfo('/var/www/index.html', PATHINFO_EXTENSION); //regresa 'html'
pathinfo('/var/www/index.html', PATHINFO_FILENAME); //regresa 'index'
?>

Spam Idiota

Si nos quejamos de que en la mercadotecnia se les han acabado las ideas (como a muchos otros sectores creativos) y terminan con anuncios sin sentido, pues también al SPAM se les agotan las ideas para atraer incautos, para muestra uno de los que tantos me llegan (traducido):

Asunto:

¿Eres Tu? Tany aqui

Mensaje: 

No me ignores por favor,
Encontré tu  correo en alguna parte y me decidí a escribirte.
Por favor dime si no te importa. Si quieres te puedo mandar algunas fotografías mias.
Soy una chica guapa. No respondas a este correo.
Respóndeme directamente a: correo@servidor 

Supongo que el contenido es tan simple para evitar algunos filtros de SPAM, pero sinceramente, ¿alguien su sano juicio responderá a esto?

Solución a “Failed to find an unused loop device”

En Xen, si no configuras de antemano linux verás que después de iniciar varios servidores virtuales te marcará un error que dice: “Failed to find an unused loop device

Esto significa que linux ya no tiene “lugar” para montar más dispositivos loop (montar tu disco duro virtual o swap), por defecto tienes ochos dispositivos loop permitidos, que son para cuatro máquinas virtuales (debido a que utilizan al menos dos imágnes, una para el swap y otra para el disco duro)

Para aumentar este límite es muy fácil, primero detienes las instancias virtuales de Xen:

/etc/init.d/xendomains stop

Agregas al archivo /etc/modprobe.d/local-loop lo siguiente (o crealo si no existe):

options loop max_loop=64

Después vuelves a cargar el módulo

rmmod loop
modprobe loop

Por último inicias las instancias virtuales

/etc/init.d/xendomains start

Con esto puede tener hasta 32 instancias de Xen sin problemas.

Ruteo en Xen

Hace poco instalé un servidor Xen, después para terminar de configurarlo solicitamos IP’s adicionales para que cada servidor virtual tuviera su IP dedicada.

Lamentablemente nos dieron IPs en otra subred, esto puede ocasionar algunos problemas pero aqui está una solución =)

Vamos a suponer que nuestro servidor Xen tiene ip 192.168.1.90 y que nuestras nuevas ips a asignar son 192.168.247.130 y 192.168.247.131, y que el gateway de nuestra máquina anfitrión es 192.168.1.1

 

Configuración de Xen

Debido a que en mi caso necesitaba rutear los datos entre mi máquina anfitrión (dom0) y mis máquinas virtuales (domU) habilité lo siguiente en xen:

(network-script network-route)
(vif-script vif-route)

Tanto network-script  y vif-script deben ser las únicas configuraciones disponibles (esto es comentar todos los otro network-script y vif-script)

 

Reiniciamos el servidor Xen:

/etc/init.d/xend restart
/etc/init.d/xendomains restart 

Es muy importante que verifiques si te marca un error, ya que a mi me mandaba un error por un script que no reconocía la interfaz que ibamos a utilizar, así que hice el siguiente cambio en el archivo: /etc/xen/scripts/network-route

dir=$(dirname "$0")

. "$dir/xen-script-common.sh"

evalVariables "$@"

 

#netdev=${netdev:-eth${vifnum}}

netdev=eth0 #definir por defecto la interfaz a utilizar

echo 1 >/proc/sys/net/ipv4/ip_forward
echo 1 >/proc/sys/net/ipv4/conf/${netdev}/proxy_arp

 

Básicamente lo que hace el script de Xen es habilitar el ruteo en linux y crear unas reglas de iptables (que tu puedes configurar si quieres personalizar el rendimiento o seguridad de tus máquinas virtuales por medio del anfitrión)

Ya por último debes borrar el puente que hace Xen en la configuración por defecto de bridge (usando el comando brctl)

 

Configuración de la Imagen

Al crear la imagen. proporciona la IP, el gateway de tu máquina anfitrión (dom0) y la máscara de red correspondiente, en nuestro ejemplo 255.255.0.0, ejemplo:

xen-create-image --hostname=misitio.com --ip=192.168.247.130 --netmask=255.255.0.0 --gateway=192.168.1.1 --passwd

 

Con esto tus máquinas clientes podrán ser vistas y accesar a internet sin problemas.

Super Nintendo Portable

Esto alegró mi día y me recordó viejos tiempos (por lo del Super Nintendo) =)

Xen 3.3 y Debian Etch

Recientemente me tocó configurar un servidor para tener máquinas virtuales mediante XEN. Anteriormente sólo había trabajado con un poco con VMWare ESXi y XenServer (la versión “comercial” de XEN), el problema es que se tenía que instalar en un servidor remoto que solo se tiene acceso mediante ssh.

Con algo de trabajo y pruebas (y con las buenas herramientas de ServerBeach, que sólo le faltan una vista a la consola para diagnosticar kernel panics) por fin pude instalarlo.

Debian tiene una versión de Xen, pero es la 3.0.3 que para mi gusto es demasiado vieja (se liberó en 2006) y la versión Lenny (testing) tiene la versión 3.2, pero también algo “inestable” a mi gusto para un servidor de batalla.

Como dije después de hacer varias pruebas logré instalar la versión Xen 3.3 utilizando el kernel que viene en Debian preparado para Xen.

Una breve descripción de Xen, es que está separado en varias partes, en primer lugar Xen tiene un kernel modificado para llevar a cabo la virtualización, la ventaja es que la versión 3.3 utiliza la versión 2.6.18 que es la que viene con Debian.

Después la parte “fuerte” de Xen es el denominado hypervisor que es un servidor que se encarga de hacer la virtualización propiamente dicha. Después vienen las máquinas virtuales que utilizan por lo general otro kernel que se denomina domU (y el kernel de la máquina base se denomina dom0).

Pues bien, para lograr esto simplemente primero instalé la imagen del kernel apropiado y compilar solamente el hypervisor de Xen 3.3

En pasos simples:

#Instalar la imagen del kernel con parche para xen
apt-get install linux-image-2.6.18-6-xen-amd64

#Descargar el código fuente de xen
wget http://bits.xensource.com/oss-xen/release/3.3.0/xen-3.3.0.tar.gz
tar zxvf xen-3.3.0.tar.gz
cd xen-3.3.0

#Compilar solamente el hypervisor
make xen
make install-xen

#Compilar los archivos ejecutables como xm y herramientas de red
make tools
make install-tools

#Hacer que Debian cree las entradas correspondientes en los rc.X
#para que cuando el servidor se inicie ejecute los servidores de Xen
update-rc.d xend defaults 20 21
update-rc.d xendomains defaults 21 20

#Hacer que grub reconozca el nuevo kernel con la configuración de Xen 3.3.0
update-grub

Con eso deberían de ver una entrada en el grub como:

title           Xen 3.3.0 / Debian GNU/Linux, kernel 2.6.18-6-xen-amd64
root            (hd0,0)
kernel          /xen-3.3.0.gz
module          /vmlinuz-2.6.18-6-xen-amd64 root=/dev/sda6 ro console=tty0
module          /initrd.img-2.6.18-6-xen-amd64
savedefault

Que debería de bootear con el hypervisor 3.3

Incluyo algunas ligas de sitios (en inglés) que me ayudaron muchísimo para entender algo más de Xen ;)

El culto a la ardilla (o perro de pradera)

Desde que se dio a conocer un video (de un programa japonés para variar) donde una ardilla o perro de la pradera hace una “cara dramática” han salido decenas de videos sobre este personaje, algunos ejemplos:

Todo viene de este video

 

Cancion del Dia – Al vaiven de mi carreta

Debido a que de la tarjeta American Express me mandaron un CD de Putumayo por mi primer “aniversario” con la tarjeta me puse a buscar música de Putumayo, tiene excelentes compilaciones el de Cuba es genial.

La que me ha gustado más es Al Vaiven de mi carreta, una excelente canción sobre el trabajo >=)

Después pondré una canción de su compilación “Music from the Tea Lands” (Música de las Tierras de Té)  que tiene también un muy buen sonido, muy tranquilo

 

Certificación en Zend Framework

Hace poco Zend publicó la certificación de Zend Framework:
http://www.zend.com/en/services/certification/framework/

Estoy algo divergente entre si es una buena opción o no

Buena opción:

  • El Framework está muy bien hecho como para que valga una certificación
  • Tiene tantos componentes que es una buena medida para destacar entre los que han utilizado solamente brevemente el Framework

 

Mala opción

  • Cuesta más que la certificación en PHP ($160 dolares en contra de $125 para la certificación de PHP)
  • Lamentablemente la certificación es en la versión 1.5 y la versión estable es la versión 1.6, si bien la versión 1.5 ya tenía muy estandarizado el modelo del Framework, a menos que tengan un periodo largo de liberar versiones (lo cual puede ser malo ya que ahora hay mucho movimiento) en menos de un año seguramente saldran al menos un par de versiones por lo que ¿se va a certificar en cada version? =P
Tampoco hay guia oficial, solamente está la opción de curso.
Creo que el Zend Framework debe crecer un poco más para estabilizarse en cuestión de características generales y de ahi ya es una opción muy válida de certificación; ya que en el momento hay mucho movimiento en cuestión de nuevas características, por ejemplo la versión 1.6 la principal mejora fue la introducción de Dojo.

 

Mujer que no reconoce su propia voz

Algo muy risible en un tele-juego: “entraron dos llamadas a la vez y si no se calla la otra no puede uno hablar”, porque habia un retraso entre cuando habla por telefono a cuando se escucha en la televisión.


Esto me lo mandó Nexus