Saltar al contenido Navegación Ir a buscar

Actualizaciones ocasionales en inglés, mayormente sobre programación, ocasionalmente de fútbol.

PHP PDO en Ubuntu Dapper

Si hay algo que me molesta sobremanera del modo de gestinar los paquetes de la gente de Debian es esa manía de separarlo todo en paquetitos más pequeños, no sea que alguien se instale 100KB que no sean absolutamente necesarios.

Para el caso de Ruby ya desistí hace tiempo de los paquetes proporcionados, y decidí instalar directamente desde los fuentes. Para el de PHP sigo tratando de emplear los paquetes oficiales.

Si nos ceñimos al manual de PHP, lo lógico sería esperar que PDO estuviese instalado por defecto, tal y como dice. Pero los chicos de PHP olvidan la coletilla que deberíamos tener presente los usuarios de Debian/Ubuntu: ”... a menos que uses Debian, y se trate de un mini-paquetito, si tienes suerte”.

Por supuesto, PDO1 no se instala por defecto en Ubuntu Dapper, ni existe mini-paquete, por lo que toca instalar a mano. La instalación no es que sea muy compleja, pero igual le ahorro a alguien un rato de whereis y demás, así que paso a resumirla:

  1. Vamos a necesitar PECL, así que sería interesante comprobar que está instalado: whereis pecl debería resultar en algo como pecl: /usr/bin/pecl /usr/bin/X11/pecl.
  2. Instalamos PDO: sudo pecl install pdo, que nos recordará que debemos añadir la línea extension=pdo.so en php.ini2
  3. Intentamos instalar PDO_MySQL con sudo pecl install pdo_mysql y nos devuelve un bonito error3, de modo que vamos a tratar de instalarlo a mano, tal y como se explica aquí – ¡y luego dicen que dependemos de Google! – ¡Que no se nos olvide comentar las líneas 4163 a 4173!.
  4. Para añadir la extensión a php.ini, recordar que el directorio por defecto es /etc/php5/ en lugar de /etc/php/, como dice en el documento citado anteriormente.
  5. Para cualquier otra extensión que queramos instalar nos devolverá el mismo error3, por lo que debemos repetir la operación de descarga de la extensión y comentario de las líneas que se quejan de que tenemos la extensión deshabilitada. A continuación los pasos para, por ejemplo, instalar PDO_SQLite:

wget http://pecl.php.net/get/PDO_SQLITE-1.0.1.tgz
tar zxvf PDO_SQLITE-1.0.1.tgz
cd PDO_SQLITE-1.0.1/
phpize

Editamos configure y comentamos, en este caso, las líneas desde la 5712 a la 5722.

./configure
make
sudo make install

Y una vez añadimos la extensión a php.ini, todo debería funcionar.

Podemos comprobarlo desde la línea de comandos aprovechando la opción -r de PHP que permite evaluar el código que le pasamos desde la línea de comandos:

php -r 'echo var_dump(extension_loaded("pdo"));'
php -r 'echo var_dump(extension_loaded("pdo_mysql"));'
php <del>r 'echo var_dump(extension_loaded("pdo_sqlite"));'

deberían devolver bool(true) si hemos instalado correctamente las extensiones y las hemos añadido al archivo php.ini para cli2.

Y eso es todo amigos. Ahora sólo os falta recordar el por qué de mi interés en PDO ;)

1 PDO define una interfaz unificada para acceder a bases de datos en PHP, proporcionando una serie de funciones comunes a todas ellas y algunas específicas para cada extensión.
Resulta bastante cómodo de emplear cuando necesitamos soportar más de un tipo de motor de bases de datos sin demasiadas complicaciones y es – ¡por fin! – una abstracción oficial de PHP.

2 En Ubuntu hay 3 archivos php.ini, uno para apache, otro para cgi y otro para la línea de comandos. Están todos bajo /etc/php5, en los directorios correspondientes, y habrá que habilitar las extensiones en función de qué interfaces queramos emplear con PDO.

3 You’ve configured extension pdo_mysql, which depends on extension pdo, but you’ve either not enabled pdo, or have disabled it.

18/06/2006 12:11 PM

  1. Sólo aclarar que, en mi opinión, la fragmentación que hace Debian (y por tanto Ubuntu) de sus paquetes es una gran ventaja que no sólo tiene por objeto ahorrarse esos 100Kb (o los que sean) en disco, sino también permiten no instalar software que no se necesita y que puede incluír potenciales agujeros de seguridad.
    Para resolver esto, que algunos pueden ver como un problema, se crearon lo que llaman “metapackages”, que son paquetes que no instalan ningún software pero que crean dependencias con varios paquetes para que estos se instalen simultáneamente. Por ejemplo, el paquete “kde” no contiene software, pero al instalarlo se instalan también todos los paquetes que dependen de él.


    Lillo    19/06/2006 07:34 AM    #
  2. De hecho, creo que la idea es bastante buena en la mayor parte de los casos, pero eso no quita para que si se deshabilitan características de un determinado lenguaje de programación que se supone están presentes por defecto, tengamos algún lugar al que ir a mirar.

    Vamos, que un poquito de documentación para seres humanos a cerca del software que instalas y el por qué de las modificaciones ayudaría.


    kusor    19/06/2006 03:22 PM    #
  3. Para que la pecl install pdo_mysql se instale correctamente solo hay que instalar antes las librerias de desarrollo de mysql, es decir apt-get install libmysqlclient15-dev , y listo.


    Ales    03/07/2006 08:55 PM    #