Aplicación UpTimeCheck 0.1

UpTimeCheck es una aplicación muy simple desarrollada en PHP para verificar y registrar que diferentes sitios web se encuentren en línea.

Esta aplicación corre como un script de CLI (command line interface) y puede ejecutarse por demanda o a través de un proceso cron como es más conveniente. En la configuración pueden especificarse los sitios a revisar sin ningún límite o restricción respecto a su cantidad y algunos parámetros adicionales para personalizar su funcionamiento.

Para más información acerca de la aplicación por favor consultar el archivo README de la misma.

Como para todo en la vida, se reciben sugerencias y reportes de problemas.

Enlace: uptime_0.1.zip

Acceso a MSSQL Server desde PHP en un servidor Linux

El día de hoy realicé la actualización del servidor de desarrollo (OpenSuse 10.2) para soportar las conexiones a un servidor de bases de datos MS SQL Server 2005. El servidor de bases de datos se encuentra en la red privada (192.168.1.5). El servidor de desarrollo tiene dos interfaces, una de ellas es privada también (192.168.1.3). La versión de PHP que se encuentra actualmente instalada es la 5.2.0.

Actualicé algunos paquetes que eran necesarios para instalar el software FreeTDS.

# rpm -i readline-devel-5.1-55.i586.rpm
# rpm -i  libxml2-devel-2.6.26-26.i586.rpm
# rpm -i  libapr1-devel-1.2.7-23.i586.rpm
# rpm -i  libapr-util1-devel-1.2.7-26.i586.rpm
# rpm -i  apache2-devel-2.2.3-20.i586.rpm

Otros paquetes que puedan llegar a necesitarse se pueden descargar de la siguiente dirección.

http://download.opensuse.org/distribution/10.2/repo/oss/suse/i586/.

Descargué y descomprimí la última versión de FreeTDS.

# wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
# tar zxvf freetds-stable.tgz
# cd freetds-0.64

Se compila e instala en el directorio /usr/local/freetds-0.64 con soporte para la versión 8.0 del protocolo. Para consultar información adicional acerca del protocolo consulte la dirección siguiente: http://www.freetds.org/userguide/choosingtdsprotocol.htm.

# ./configure --prefix=/usr/local/freetds-0.64 --with-tdsver=8.0
# make
# make install

Creé un enlace dinámico desde /usr/local/freetds al directorio de instalación para facilitar el manejo de diferentes versiones en un futuro cercano cuando vaya a actualizar la librería.

# ln -s /usr/local/freetds-0.64 /usr/local/freetds

Edité el perfil general de los usuarios para añadir al final de este información de las variables de ambiente de FreeTDS .

# vi /etc/profile
###################################################
SYBASE=/usr/local/freetds
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$SYBASE/lib
export SYBASE LD_LIBRARY_PATH
###################################################

Descargué y descomprimí el código fuente de la versión de PHP instalada. Para descargar versiones históricas de PHP visite el siguiente enlace: http://www.php.net/releases/.

# wget http://museum.php.net/php5/php-5.2.0.tar.gz
# tar zxvf php-5.2.0.tar.gz
# cd php-5.2.0

Se crearon los scripts de compilación para realizar una instalación temporal en /root/tmp/php-5.2.0/installation y de allí obtener el módulo dinámico de soporte para MSSQL.

# SYBASE=/usr/local/freetds
# LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$SYBASE/lib

# export SYBASE LD_LIBRARY_PATH# ./configure --with-apxs2=/usr/sbin/apxs2 
--with-mssql=shared,$SYBASE 
--with-sybase=$SYBASE 
--with-libxml-dir=/usr/lib/ 
--prefix=/root/tmp/php-5.2.0/installation
# make

# make install

Se copió el módulo recién generado a la ubicación donde PHP almacena sus propios módulos.

# cp ./installation/modules/mssql.so /usr/lib/php5/extensions/
# chmod -x  /usr/lib/php5/extensions/mssql.so

Se creó el archivo mssql.ini para activar el módulo.

# vi /etc/php5/conf.d/mssql.ini
extension=mssql.so

Se reinicio el servicio de Apache2 para refrescar los cambios recién hechos.

# rcapache2 restart

Al consultar la información resultante de phpinfo ya aparece la sección de MSSQL.

Para realizar una prueba fiable de conexión entre PHP y MSSQL puede utilizar el script adjunto a continuación editando adecuadamente la información de conexión al inicio de este.

Enlace: prueba_mssql.php

CatalogoArchivos 0.1

 

Screenshot CatalogArchivos
Este script genera el catálogo de una carpeta determinada por el usuario especificando el nombre de las carpetas y de los archivos contenidos incluyendo su extensión y última fecha de modificación. Los archivos se colorean según unas extensiones predefinidas.
La finalidad de este simple programita era la de utilizar el lenguaje Ruby del cual he estado leyendo un poco en esta semana de reflexión y evitar que un humano hiciera este trabajo manualmente en el lugar donde trabajo actualmente 😛
Para ejecutar esta aplicación es necesario tener instalado el runtime de Ruby, descargar el script de la sección de enlaces y ejecutar el siguiente comando:

$ ruby CatalogoArchivo.rb <ruta orígen> <ruta destino> [titulo]

Donde CatalogoArchivo.rb es el script descargado y ubicado en la carpeta actual, ruta origen es la carpeta raíz desde la cual se realizará el catálogo de los archivos, ruta destino es la ubicación del archivo HTML donde se guardará el resultado y título (opcional) es el mensaje que aparecerá en la parte superior del reporte.

Actualizado a la versión 0.1.1 que soluciona ciertos bugs encontrados recientemente: problemas con la portabilidad respecto a los separadores de path y problemas con la clase DateTime.

Enlaces:

position:fixed en IE

Nada funciona bien en IE. La gente inteligente debería utilizar Firefox únicamente. Desarrollar para IE es totalmente frustrante, no se adhiere completamente a los estándares y lo que se desarrolla para Firefox de CSS y JavaScript casi nunca le funciona. Hoy tuve un capítulo mas de esta historia.

Mi IE 7.0.5730.11 no entiende la instrucción position:fixed de CSS!

Tuve que implementar la solución expuesta por http://www.gunlaug.no/contents/wd_additions_15.html.

* html div#miDivId
{
top:expression(eval(document.compatMode &&
document.compatMode=='CSS1Compat') ?
documentElement.scrollTop + 5: document.body.scrollTop + 5);
}

Véalo en vivo y a todo color siguiendo este enlace.

Skype en el puerto 80

Este mes decidí volver a reencontrarme con la parte técnica que vive en algún lado de mi. Decidí entonces instalar de nuevo Apache/PHP/MySQL para empezar a desempolvar mis neuronas. En esta ocasión decidí que ya había instalado suficientes veces estas aplicaciones de manera individual y que esta vez tomaría ventaja de esos muchos paquetes que incluyen todo el software en unos cuantos siguientes. Para esto elegí el paquete XAMMP de ApacheFriends.

Extrañamente después de instalar todo el software sin ningún problema, Apache no quiso funcionar. Al parecer alguien estaba utilizando el puerto 80. 😮

Esa semana no tuve mucho tiempo para ver que sucedía hasta hoy que decidí no irme a dormir hasta que el servidor de páginas funcionara.

Hace un tiempo utilicé un programita que listaba los puertos activos junto con las aplicaciones que acceden a ellos. Descargué fport y encontré con sorpresa que quien utilizaba mi puerto 80 para servir páginas en blanco era Skype.

FPort v2.0 – TCP/IP Process to Port Mapper
Copyright 2000 by Foundstone, Inc.
http://www.foundstone.com
Pid Process Port Proto Path
2172 Skype -> 80 TCP C:Archivos de programaSkypePhoneSkype.exe
2172 Skype -> 443 TCP C:Archivos de programaSkypePhoneSkype.exe

Modifiqué entonces a Skype para que no utilizara mas estos puertos.

Herramientas > Opciones > Avanzada > Conexión > (desactivar) Usar puertos 80 y 443 como alternativas para las conexiones entrantes.

Es necesario reiniciar Skype para que los cambios surtan efecto.

Revisando algunas páginas que había abierto durante mi búsqueda en Google, encontré que Matthew Mullenweg en su sitio hacía referencia al mismo problema en su post Windows Tip y que lo había diagnosticado únicamente con herramientas de Windows XP y me mas pareció interesante.

Con el comando netstat -a -o -n se listan los puertos activos junto con el PID de la aplicación propietaria.

Con tasklist se lista la información de las aplicaciones activas. Con tasklist /FI “PID eq 2172” se filtra la información de la aplicación cuyo PID sea 2172.

Finalmente, es posible con taskkill /PID 2172 matar el proceso 2172 para ahora si, hacer funcionar correctamente a Apache.