Delirios de un Informático

Instalar Phalcon en el PHP “nativo” de Mac OS X

Phalcon es un excelente framework para PHP con la particularidad de estar programado en C como una extensión del lenguaje. Ha evolucionado muchísimo y se ha convertido, en mi opinión, en uno de los frameworks más completos e interesantes después de Laravel.

La instalación en Mac puede realizarse con Homebrew pero realiza la instalación de una versión de PHP aparte de la versión nativa de Mac OS X. Si queremos compilar la extensión de Phalcon sin más dependencias, los pasos a seguir difieren un poco de las instrucciones oficiales:

brew install gettext
brew link --force gettext
git clone https://github.com/phalcon/cphalcon
cd cphalcon/build/64bits
git checkout 1.3.4
phpize
./configure --enable-phalcon
make
sudo cp modules/phalcon.so /usr/lib/php/extensions/no-debug-non-zts-20121212

Siguiendo las instrucciones de la web oficial, nos encontramos con dos problemas: el primero es que no localiza el archivo libintl.h (de ahí el uso de Homebrew para instalar GetText) y el segundo es un fallo con _libintl_setlocale en ciertas versiones, que provoca el siguiente error:

dyld: lazy symbol binding failed: Symbol not found: _libintl_setlocale
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20100525/phalcon.so
  Expected in: flat namespace

dyld: Symbol not found: _libintl_setlocale
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20100525/phalcon.so
  Expected in: flat namespace

Este error se evita haciendo el checkout a la última versión publicada.

Cómo instalar extensiones PHP en Mac OS X

Además de poder utilizar PECL es posible compilar e instalar cualquier extensión de PHP en Mac OS X. Resulta útil si es necesario que los parámetros de ./configure sean diferentes de los que se usan por defecto o si se necesita instalar una extensión que no tenga Mac de serie.

Los únicos requisitos son disponer de Xcode y descargar la versión exacta que esté instalada en Mac (la 5.3.6 en Lion). Luego, el proceso es sencillo (tomaré como ejemplo la extensión pdo_odbc):

wget http://es2.php.net/get/php-5.3.6.tar.gz/from/es.php.net/mirror
tar xzvf php-5.3.6.tar.gz && cd php-5.3.6/ext/pdo_odbc
phpize
./configure --with-pdo-odbc=iODBC
make
sudo cp modules/pdo_odbc.so /usr/lib/php/extensions/no-debug-non-zts-20060613/

Luego basta añadir la correspondiente línea al php.ini y reiniciar el servidor web :).

Cómo conectar PHP a SQL Server en Mac OS X

Siguiendo con mi serie de anotaciones sobre el desarrollo con PHP en Mac OS X, hoy toca hablar de algo que es más sencillo de lo que parece a primera vista: conectar PHP con SQL Server (virtualizado en una máquina Windows Server 2003 en mi caso) utilizando iODBC en Mac OS X Lion.

Con la versión de PHP que trae Lion de serie viene incluído el soporte para iODBC (una implementación de código abierto de ODBC y alternativa a unixODBC), al que le basta un controlador compatible para acceder a cualquier servidor de bases de datos. En este caso se recurre a FreeTDS, la implementeación de código abierto del controlador para SQL Server.

Como para muchas otras aplicaciones que se necesitan compilar en Mac OS X, he recurrido a Homebrew, que tras instalarlo sólo hay que ejecutar lo siguiente:

brew install freetds

La configuración también resulta sencilla: el archivo /usr/local/etc/freetds.conf debe contener lo siguiente al final:

[sqlserver]
	host = ip_o_host_del_servidor
	port = 1433
	tds version = 7.1

Luego, hay que crear el archivo /etc/odbcinst.ini con el siguiente contenido:

[FreeTDS]
Description = FreeTDS
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/local/lib/libtdsodbc.so
UsageCount = 1

Por último, debe definirse el DSN creando el archivo /etc/odbc.ini:

[ejemplo]
Driver = FreeTDS
Database = ejemplo
Description = Base de datos de ejemplo
ServerName = sqlserver

Tras estos pasos, PHP debería poder conectarse al servidor SQL Server sin ningún problema. Pueden usarse las funciones ODBC de PHP para realizar la conexión:

$db = odbc_connect('ejemplo', 'usuario', 'contraseña');
$result = odbc_exec($db, "SELECT campo1, campo2 FROM tabla");
while($row = odbc_fetch_object($result)) var_dump($row);
odbc_close($db);

Si existe cualquier problema con la conexión, puede instalarse unixODBC con Homebrew (brew install unixodbc) y testear la conexión y obtener mensajes de error con el siguiente comando:

tsql -S ip_o_host_del_servidor -U sa

Por último es importante no añadir espacios o tabulaciones en los archivos .ini o iODBC no podrá obtener correctamente los valores causando un error en la conexión.

Komodo Edit, un excelente editor de código

Hace años que probé un pequeño IDE llamado Komodo que prometía pero estaba bastante verde. Pero con la versión 6 ha evolucionado muchísimo y tiene una versión simplificada llamada Komodo Edit, un editor Open Source pensado para desarrollo web (XHTML, XML, CSS, JavaScript…) con lenguajes dinámicos (PHP, Perl, Python, Ruby…). La lista de características es pequeña comparada con Komodo IDE pero como editor sin más es una maravilla. Es ideal para todos pequeños scripts o proyectos que no requieren de todas las complejas herramientas que proporcionan Eclipse o NetBeans. Es además muy personalizable (hasta en esquemas de colores) y multiplataforma (Linux, Mac y Windows).

Uso Vim desde hace años para programar todos los pequeños scripts que realizo en Bash, Perl o Python pero es una tortura configurarlo para hacer ciertas cosas, y la implementación de otras caracteríticas nunca me ha gustado. Por eso Komodo ha ganado muchos puntos y prácticamente es lo único que uso.

Cómo usar Twitter Tools con la extensión OAuth de PECL

Un plugin para WordPress muy utilizado últimamente es Twitter Tools, del famoso Alex King. El problema es que si tienes el blog alojado en un servidor que disponga de la extensión OAuth de PECL te encontrarás con un bonito error al intentar conectar con Twitter:

Fatal error: Class 'OAuthSignatureMethod_HMAC_SHA1' not found

Se debe a que se comprueba de forma incorrecta la existencia de las clases necesarias, no incluyendo las necesarios en caso de que no existan. Como he leido cosas como que se recomienda solicitar que se deshabilite la extensión de PHP, he pensado que es mejor crear este pequeño plugin para WordPress que complemente la extensión PECL añadiendo lo necesario para que funcione correctamente Twitter Tools sin necesidad de deshabilitar la extensión ni hacer cosas extrañas. Para hacerlo funcionar, basta con subirlo al directorio wp-content/plugins y habilitarlo desde el panel de control como cualquier otro plugin.