Programador PHP freelance

Habitualmente las contraseñas en los proyectos web son guardadas en la base de datos de forma encriptada en un formato hash. Con esto evitamos guardar en claro dichas contraseñas. El algoritmo de encriptación además suele ser bastante básico, com aplicar un MD5 o similar.

En algunos proyectos, no obstante, añaden cierta complejidad incorporando un valor adicional a la formula de encriptación. Es el caso de Prestashop que desde sus orígenes utiliza una cadena definida en el fichero config/settings.php. Dicha variable queda definida en ese fichero como _COOKIE_KEY_

Cuando deseamos resetear o modificar las contraseñas necesitamos regenerar los hash que se guardan en la bases de datos. En el caso de Prestashop deberemos de incorporar el valor antes comentado.

En los proyectos que muevo muchas veces clonar el entorno de producción en un entorno de desarrollo con la finalidad de realizar ampliaciones. Y muchas veces necesitas poder logarte con varios usuarios con roles diferentes, entre ellos el de administrador, el resto de empleados o los usuarios clientes. La forma más cómoda que he encontrado de trabajar es la de resetear o cambiar todas las contraseñas al mismo valor.

Os adjunto un script que he preparado para facilitar esto último. Es muy intuitivo. Si lo copiáis en el directorio config y lo ejecutáis desde consola o bien por URL, modificará todas las contraseñas a la definida en la variable $passwd.

<?php
require_once ‘settings.inc.php’;

$link = mysqli_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_, _DB_NAME_);

if (!$link) {
die(‘Connect Error (‘ . mysqli_connect_errno() . ‘) ‘
. mysqli_connect_error());
}

$passwd = ‘NoVaInternet’;
$md5 = md5(_COOKIE_KEY_ . $passwd);
$link->query(“UPDATE ” . _DB_PREFIX_ . “employee SET passwd = ‘$md5′”);
$link->query(“UPDATE ” . _DB_PREFIX_ . “customer SET passwd = ‘$md5′”);

mysqli_close($link);
?>

Chains
InnoDB, en MySQL, aportó en su día lo que muchos esperábamos: cumplir, entre otras cosas, con aquel concepto tan académico de integridad referencial que nos permitía estar seguros de que los datos estaban bien ligados entre ellos (siempre y cuando nuestro diseño fuera acertado, claro está ;-) )

Esto es bastante útil pero da algunas pegas en el día a día del programador. En concreto nos puede pasar que intentemos importar una copia de base de datos sobre una existente y nos encontremos con este error:

Cannot delete or update a parent row: a foreign key constraint fails.

Lógico, si lo pensamos. Tenemos las relaciones monitorizadas y ya no se puede eliminar al tun tun.

¿Solución?

Como estamos restaurando una base de datos entera no queremos mantener ninguno de los datos anteriores por lo que la restricción puede ser obviada sin ningún problema.

¿Forma de hacerlo?

Decirle a MySQL que desactive temporalmente la comprobación de la integridad con la siguiente orden:

SET FOREIGN_KEY_CHECKS=0;

Para activarlo, una vez recuperada la base de datos, con el inverso:

SET FOREIGN_KEY_CHECKS=1;

Si estáis recuperando la base de datos mediante la importación de un fichero SQL, tal vez des de un cliente como phpMyAdmin, una buena opción es integrar los dos comandos anteriores en el propio fichero SQL. El de deshabilitar el principio, y el de habilitar al final.

02 Oct, 2012

Configurar PEAR para un dominio en Plesk

Posted by: admin In: Desarrollo

Ahora mismo arranco los desarrollos con Zend Framework. MVC, robusto, bien pensado, bien documentado, escalable,… y muchas más cosas que a poco que hayamos oído hablar de él, ya nos suenan. La verdad es que lo estoy disfrutando. Pero antes de Zend estuve con otros frameworks, en especial, utilicé mucho PEAR.

PHP PEAR framework

PEAR se organiza por paquetes y la mayor crítica que se le puede hacer es que no es MVC. De hecho yo diría que es un framework a la antigua, con una gran variedad de librerías para realizar casi cualquier cosa. De todas ellas la más destacable para mi, una de las que permiten desarrollar la capa de datos: DB_DataObject. Si tenéis tiempo, os aconsejo que juguéis con ella.

PEAR tiene otra ventaja, para los linuxeros como yo, y es que tiene paquete en la mayoría de distros, por lo que instalar-lo en mi Ubuntu es tan fácil como apt-get install pear.

Y a partir de aquí viene la gracia. Y es que PEAR a su vez tiene un gestor de paquetes que es llamado desde consola por ejemplo así: pear install Auth, con lo que conseguimos instalar el paquete de autorización.

Si utilizamos este sistema para su instalación en un servidor donde alojamos varios proyectos con Plesk, como puede ser la misma máquina de desarrollo o un servidor de producción, tenemos la ventaja de que centralizamos la gestión de los paquetes PEAR y su posterior actualización.

Esto en servidores controlados por nosotros suele ser inmediato y PEAR, una vez instalado, se aplica a todos los dominios que albergue nuestro servidor web. En el caso de Plesk, dada su particular configuración de los planes requiere de ciertos cambios… Y a eso hemos venido.

Cuando necesitamos que un dominio en Plesk pueda acceder al PEAR del sistema necesitamos modificar el include_path del PHP para ese dominio, cosa que se consigue creando/modificando el fichero /var/www/midominio.com/conf/vhost.conf con el siguiente contenido:

<Directory /var/www/vhosts/midominio.com/httpdocs>
php_admin_value include_path “/var/www/vhosts/midominio.com/httpdocs/:/usr/share/pear/”
php_admin_value open_basedir “none”
</Directory>

Si nos fijamos, hemos añadido al include_path el path del PEAR en el sistema. Esta linea, de hecho, es valida para un CentOS mientras que para una Ubuntu suele ser así:

php_admin_value include_path “/var/www/vhosts/midominio.com/httpdocs/:/usr/share/php/”

Comentar que para editar este fichero es necesario tener permisos de root, lo cual seguramente nos obligará a acceder por SSH al sistema.

Una vez realizada esta modificación el siguiente paso es forzar a Plesk para que cargue la nueva configuración, lo que se consigue con el siguiente comando desde el shell:
/usr/local/psa/admin/sbin/websrvmng – -reconfigure-vhost –vhost-name=midominio.com
Esto era cierto para las versiones de Plesk 8 y 9. Para la 10 lo desconozco y para la 11 el comando actualizado es:
/usr/local/psa/admin/sbin/httpdmng –reconfigure-domain midominio.com
Con esto nuestro dominio queda configurado para trabajar con PEAR. Ahora solo queda instalar los paquetes que necesitemos.
pear list nos irá indicando que tenemos ya instalado.
PD. Si también utilizas PEAR tal vez nos interese conocernos ;-)
PD 2. Añadir que este tipo de configuraciones sólo funcionan en aquellos casos donde el PHP se ejecuta como módulo del servidor web Apache y no como CGI. El propio Plesk permite la configuración por dominio de este parámetro.
Tags: , ,

android

Desde hace un tiempo estoy metido en el desarrollo de aplicaciones para móviles. Además, este año he decidido arrancar unos proyectos propios en Internet, de los cuales iré hablando en este blog según vayan avanzando.

Como no podía ser de otra forma, emprender proyectos en este momento cuando hablamos de Internet, pasa casi irremediablemente por lanzar una app. Y llegado a este punto, en algún momento te ves obligado a decidir el nombre que tendrá la criatura. Así que me he puesto a investigar y esto es lo que he averiguado:

  • La mayoría de la gente encuentra las aplicaciones en los stores. Si no tienes capacidad de promoción (o presupuesto) conviene que el nombre elegido describa el producto sin llegar a utilizar un nombre genérico.
  • Si por lo contrario puedes hacer una buena promoción, tal vez puedas desmarcarte de la competencia utilizando un nombre no relacionado con la funcionalidad.
  • Prueba combinaciones con las palabras relacionadas para lo que puedes utilizar alguna herramienta de sinónimos.
  • La mente humana prefiere la simplicidad así que busca nombres simples y cortos.
  • Debe de recordarse bien, ser fácil de leer, pronunciar y deletrear.
  • Asegúrate que no tiene un significado negativo en otros idiomas.
  • Estudia la presencia de otras aplicaciones buscando por ese nombre en los stores.
  • Si hablamos de apps, hablamos de mercado global. Evita nombres restringidos a una zona geográfica a no ser que tengas claro que su ámbito no crecerá.
  • Evita utilizar conceptos que pueden ser obsoletos en poco tiempo, por ejemplo, nadie sabe lo que le queda de vida al pendrive.
  • Si el dominio .com está libre, es un plus.
  • Y por último, y bastante importante, pregunta a tus conocidos que les parece el nombre e intenta que el grupo sea lo más heterogéneo posible. No hay opiniones malas.

¿Tienes algún criterio más a añadir a la lista? Deja un comentario, pues ;-)

HACK

Recientemente he dado alojamiento web a un cliente nuevo que disponía de un portal realizado, por lo que he podido deducir, from scratch.

Ya en su momento, después de realizar algunas modificaciones, observe que el acceso al backoffice se realizaba con una contraseña en claro que se encontraba en la base de datos.

¿A estas alturas aún hay contraseñas en claro?… Piensa uno.

 

El caso, es que semanas después de la migración al nuevo servidor el portal fue vulnerado y aparecieron algunas modificaciones en sus contenidos donde el hacker en cuestión se hacía publicidad.

Después de un vistazo rápido a los logs, compruebo que las modificaciones a los contenidos se realizaron limpiamente desde el backoffice, es decir, el hacker no accedió directamente a la base de datos, ni vulneró el Panel de control del servidor u otro servicio. Simplemente se colo utilizando el formulario de autenticación.

No creo que el hacker llegara a deducir la contraseña, aunque esta estuviera en claro, aunque ese detalle te hace tener una idea de la consideración que se ha tenido en la seguridad, al desarrollar el código. Por mi parte pienso que seguramente se trata de una SQL injection. Y aquí empieza el trabajo.

 

Analizando el error_log por la fecha/hora que suponemos que se realizó el ataque descubro frecuentes llamadas desde la misma IP en un espacio de tiempo corto, buscando la entrada al backoffice. Os pego aquí algunas, en las cuales he modificado el dominio real por example.com, por motivos obvios ;-)

[Sat Jul 14 17:41:58 2012] [error] [client 94.121.219.129] File does not exist: /var/www/vhosts/example.com/httpdocs/admin.htm
[Sat Jul 14 17:41:58 2012] [error] [client 94.121.219.129] File does not exist: /var/www/vhosts/example.com/httpdocs/admin.html
[Sat Jul 14 17:41:58 2012] [error] [client 94.121.219.129] File does not exist: /var/www/vhosts/example.com/httpdocs/adminitem
[Sat Jul 14 17:41:58 2012] [error] [client 94.121.219.129] File does not exist: /var/www/vhosts/example.com/httpdocs/adminitem.asp
[Sat Jul 14 17:41:58 2012] [error] [client 94.121.219.129] script ‘/var/www/vhosts/example.com/httpdocs/adminitem.php’ not found or unable to stat
[Sat Jul 14 17:41:58 2012] [error] [client 94.121.219.129] File does not exist: /var/www/vhosts/example.com/httpdocs/adminitems
[Sat Jul 14 17:41:58 2012] [error] [client 94.121.219.129] script ‘/var/www/vhosts/example.com/httpdocs/adminitems.php’ not found or unable to stat

A las 17:41:20 empezo a probar URLs y a las 17:42:48 dejan de aparecer registros en el error_log, lo que se puede deber a que finalmente consiguió localizar la entrada o simplemente a que decidió abrir la web con un navegador y confirmar que existía un formulario de acceso al backoffice en la parte pública (/index.php), el cual pasaba los datos por POST a log.php.

Si el user/pass no es correcto el usuario es redirigido a log.php donde vuelve a mostrársele otro formulario para que introduzca el acceso. Cabe destacar que esta es otra página y por tanto otro formulario.

Si el user/pass es correcto el portal redirecciona a la última noticia publicada.

Efectivamente, revisando el access_log vemos que el usuario accede a log.php desde el formulario de la parte pública, sin éxito.

94.121.219.129 – - [14/Jul/2012:17:42:09 +0200] “GET /log.php HTTP/1.1″ 200 1033 “-” “Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1″

El sistema lo redirige a log.php donde parece que realiza otro intento fallido

94.121.219.129 – - [14/Jul/2012:17:42:10 +0200] “GET /Imagenes/Aceptar.gif HTTP/1.1″ 200 869 “http://www.example.com/log.php” “Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1″

y posterirmente después de otro intento el usuario es redirigido a la url de la noticia, lo cual quiere decir que ha superado el acceso.

94.121.219.129 – - [14/Jul/2012:17:42:26 +0200] “GET /index.php?Id=79 HTTP/1.1″ 200 8930 “http://www.example.com/log.php” “Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1″

Sólo tres intentos para saltarse la seguridad del sistema. Esto es lo que me hace pensar que estamos hablando de SQL inyectada.

 

En un post posterior os cuento como sigue la aventura.

 

Estamos migrando la casa. Comparto servidor con un colega. Teníamos un VPS que hasta no hace mucho cubría nuestras necesidades pero que poco a poco se ha ido quedando corto así que nos decidimos por un dedicado.

Lo hemos configurado con una Ubuntu Server 10.04 LTS 64bit con un panel Plesk 10.

Podíamos elegir entre Cpanel y Plesk y de hecho dudamos pero el anterior servidor tenía un Plesk 8, el cual no me resultaba incómodo, y además nos aseguraba la compatibilidad… y efectivamente ha sido una buena elección.

El Plesk 10 modifica un poco la forma en que refleja los planes de alojamiento en el sistema de ficheros pero aún sigue la linea de su predecesor, lo cual tiene sus ventajas.

Para probar el rendimiento del nuevo servidor he movido un subdominio, pongamos test.example.com, de una tienda virtual, en concreto un Prestashop, que utilizo para que el cliente valide los cambios de desarrollo antes de subirlos a producción.

El dominio principal (example.com) sigue alojado en el servidor anterior pero modificando, desde la gestión de DNSs del mismo Plesk 8, la IP del registro A que se corresponde con el subdominio ya lo tenemos apuntando al nuevo servidor. Claro está, ahora hay que decirle al nuevo servidor que albergue ese subdominio (test.example.com) y la forma más rápida es creando un plan de alojamiento para el dominio (example.com) y creando dentro el subdominio (test.example.com).

Efectivamente el dominio example.com sigue alojado en el servidor anterior y así lo indican los DNS pero el subdominio test.example.com ya responde en el nuevo servidor, y lo que es mejor, si utilizas los mismos nombres de usuario FTP al crear los planes de alojamiento, te encuentras con que eso tiene ventajas a la hora de planear una migración. Ahora se verá.

El siguiente paso era importar el proyecto. Trabajo habitualmente con un repositorio, en concreto Subversion, y una opción pudiera haber sido descargar el código desde el mismo repositorio pero algunos ficheros, como imágenes de productos, adjuntos, etc… no se encuentran incorporados en el repositorio y por otro lado hacer un checkout no respeta los permisos de acceso a los ficheros.

La solución pasa por una sincronización con rsync aprovechándonos, como ya he comentado, del hecho de que Plesk está recreando los mismos identificadores de usuarios (UID) y de grupos (GID), como es el caso de los grupos psacln y psaserv.

Para sincronizar utilizo el rsync y le pido que replique el contenido del servidor origen, donde albergaba anteriormente el proyecto en test.example.com, al servidor destino

origen: example.com:/var/www/vhosts/example.com/subdomains/test/httpdocs/ 

destino: /var/www/vhosts/example.com/subdomains/test/

En concreto el comando es

rsync -r -a -v -e “ssh -l root” –delete example.com:/var/www/vhosts/example.com/subdomains/test/httpdocs/ /var/www/vhosts/example.com/subdomains/test/

El proyecto, incluida toda la estructura del Subversion, son un par de Gigabytes pero como estamos hablando de conexiones entre servidores os podéis imaginar lo rápido que va.

[ Huelga decir que para poder lanzar rsync hace falta tener acceso al shell como root y el servicio SSH accesible en ambas. ]

Sea como sea, como el tema iba a llevar un ratito, es hora de aprovechar el hueco tirando de GTD, que como está muy de moda no sé si se hace necesario explicar, pero que aprovecho para comentarlo.

Se trata de una metodología para mejorar la productividad. Como dice un compañero que se dedica a esto profesionalmente, más que un recetario de trucos para ser productivo, se trata de una receta completa (y compleja) que seguida con esmero consigue que seas más productivo en tu vida. Y cuando digo vida, lo abarco todo, no solo la parte profesional, lo que en mi caso hacía más atractivo aún el tema.

Bien, el caso es una de las que cosas que puedes hacer, de forma más óptima, cuando practicas GTD, es a aprovechar mejor los huecos. Así que mientras rsync hacía su trabajo he aprovechado para hacer un par de tareas de 5 minutos, que he identificado rápidamente, ya que lo tengo todo centralizado en rememberthemilk. Un gran servicio, que muy a mi pesar no cubre todas los requisitos para implementar GTD al 100%.

Una vez acabada la sincronización tenía el subdominio ya funcionando en el nuevo servidor pero como nunca las cosas son perfectas aparecían los detalles, que por otro lado ya estaban previstos.

El anterior servidor era un CentOS y el nuevo un Ubuntu. CentOS utiliza el usuario y grupo apache para el servicio Apache mientras que Ubuntu utiliza el usuario y grupo www-data. Con esto, después de la migración, en el nuevo servidor algunos ficheros, cuyo propietario o grupo eran apache en origen, habían sido ‘traducidos’ por el servidor destino como usuario y grupo 48, el uid y gid del usuario apache en origen.

Para arreglarlo necesitamos identificar (find) todos los ficheros con esa anomalía y modificar su usuario y grupo (chown). Sospechando que podía darse el caso de que algunos ficheros tuvieran el usuario 48 pero no el grupo 48 y viceversa. Dividí la corrección en dos comandos, uno que modificaba el usuario por un lado y otro que hacía lo propio con el grupo.

find . -user 48 -exec chown www-data {} \;

find . -group 48 -exec chown :www-data {} \;

Migración finalizada ;-)

….

Pero antes de despedirme aprovecho para añadir que es obvio que este proceso puede aplicarse, al menos a grosso modo, en cualquier tipo de paquete web, léase Prestashop, WordPress, Drupal, Joomla, etc…

 

Salgo a comer y desde hace un tiempo he migrado mi oficina a un vivero de empresas en Xàtiva.

El espacio es genial. Disfruto de un despacho compartido con un asesor financiero, el cual ya conocía anteriormente y con el que me llevo genial. El cambio fue casi imperativo con la llegada del segundo hijo. Imposible continuar trabajando en casa. Por otro lado, dejando a parte la mejora de al productividad que implica tener un espacio exclusivo para el trabajo, la ‘salud mental’ también mejora cuando te obligas a salir de casa todas las mañanas para dirigirte al trabajo. Vivir en el campo, junto a un pequeño pueblo de 4000 habitantes, tiene sus ventajas, pero el ajetreo de la ciudad que me vio crecer me contagia de un dinamismo que de alguna forma influye en mi trabajo. Todo un lujo para un programador freelance.

Sirva esta pequeña explicación para entender lo que sigue…

Como decía al principio, salgo a comer y estoy recuperando en local una copia de una tienda virtual que tengo en un servidor. Necesito programar unos cambios. Uno de esos que mejor trabajarlos en local. El caso es que estoy en la oficina y ya es hora de comer pero no todo el mundo lleva el mismo horario. ¿Qué quiero decir con esto? Que tengo la opción de descargar la tienda pero son 300 Mb y voy a saturar durante un rato el ADSL que compartimos en el vivero.

¿Solución? Pasamos del navegador, bajamos al shell del Linux y utilizamos el comando wget para descargar el paquetito, pero limitando la velocidad.

wget http://www.example.com/paquetito.tgz –limit-rate=75k

Ya sé que es un poco rollo, total para decir esto, pero he cumplido con los tres objetivos que tenía este post:

  • Volver a escribir con cierta frecuencia.
  • Escribir sobre el cambio de oficina (que aún no había tenido tiempo).
  • Aportar un truco a la comunidad.

Voy a comer. Buen provecho!

Tengo un servidor local de Subversion el cual he dedcido mover a unos de mis servidores en Internet para evitar problemas de conectividad y mejorar los tiempos de acceso desde el exterior.

El servidor en concreto es una distribución Ubuntu 10 contratado a OVH, la cual, al encargarla pedimos que viniera configurada en español. No es nada grave pero reconozco que me siento más cómodo con el sistema en inglés.

Como el servidor local también era una Ubuntu (le tengo amor), coger el SVN y moverlo al nuevo servidor ha sido tan sencillo como comprimirlo todo en un tgz y descomprimirlo luego en el destino. Cuatro apt-gets para instalar el servicio y a funcionar. Bueno, a medias.

El caso es que a cada llamada del cliente svn en consola, el sistema me devuelve esto.

svnadmin: warning: cannot set LC_CTYPE locale

svnadmin: warning: environment variable LANG is es_ES.UTF-8

svnadmin: warning: please check that your locale name is correct

Argh, con lo bien que iba todo.

Bueno, la verdad es que es poco grave, y lo posteo para evitar perder el tiempo que ya he perdido yo (entre otras cosas, de eso va esto de compartir, no?).

El sistema se queja de que la variable de entorno LANG está configurada de forma ‘incorrecta’ a es_ES.UTF-8. Sospecho un poco, lanzo un man ls y veo que toda la información del manual está en inglés (como a mi me gusta). Y entonces recuerdo que efectivamente pedimos el servidor en español en el momento de encargarlo.

Ok, hago locale y veo que mi perfil de usuario tiene configurado el español.

locale: Cannot set LC_CTYPE to default locale: No such file or directory

locale: Cannot set LC_MESSAGES to default locale: No such file or directory

locale: Cannot set LC_ALL to default locale: No such file or directory

LANG=es_ES.UTF-8

LANGUAGE=es_ES:

LC_CTYPE=”es_ES.UTF-8″

LC_NUMERIC=”es_ES.UTF-8″

LC_TIME=”es_ES.UTF-8″

LC_COLLATE=”es_ES.UTF-8″

LC_MONETARY=”es_ES.UTF-8″

LC_MESSAGES=”es_ES.UTF-8″

LC_PAPER=”es_ES.UTF-8″

LC_NAME=”es_ES.UTF-8″

LC_ADDRESS=”es_ES.UTF-8″

LC_TELEPHONE=”es_ES.UTF-8″

LC_MEASUREMENT=”es_ES.UTF-8″

LC_IDENTIFICATION=”es_ES.UTF-8″

LC_ALL=

Es decir, la configuración es correcta pero si hago locale -a, para ver los locales instalados, veo lo siguiente:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX
cs_CZ.utf8
de_AT.utf8
de_BE.utf8
de_CH.utf8
de_DE.utf8
de_LI.utf8
de_LU.utf8
en_AG
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_NG
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
fi_FI.utf8
fr_BE.utf8
fr_CA.utf8
fr_CH.utf8
fr_FR.utf8
fr_LU.utf8
it_CH.utf8
it_IT.utf8
lt_LT.utf8
lv_LV.utf8
nl_AW
nl_BE.utf8
nl_NL.utf8
pl_PL.utf8
pt_BR.utf8
pt_PT.utf8
Efectivamente. El español no está instalado.
Llegados aquí la solución es fácil. Tiramos de apt-get install language-pack-es-base y en un momento tenemos el nuevo locale configurado en el sistema, y para mi desgracia, ahora el shell ya no lo tengo en idioma anglosajón. Snifff
Aclaración: El servidor lo comparto con un colega de profesión y amigo desde la infancia, con quién ‘pacte’ instalar la máquina en spanish por defecto. Aprovechando esto os comento dos cosas:
1.- Compartir un servidor con alguien de confianza tiene muchas ventajas, a parte de las obvias, como son soportar a medias un gasto.
2.- Quién quiera modificar, a nivel de sistema, el locale por defecto solo tiene que editar /etc/default/locale

11 May, 2011

Una galería de fotos enlazada con DropBox

Posted by: admin In: Desarrollo

Buscaba una solución para una galería de fotos, de rápida implantación y que permitiera una gestión intuitiva de las imágenes a los usuarios. Existen en Internet un montón de scripts de galerías realizados en PHP, entre ellos y de los más extendidos, Gallery Son bastante completos, e incluso vienen con pequeños programas cliente que te permiten agilizar la subida de imágenes desde el escritorio, pero siempre lo he visto como un acercamiento a la solución definitiva más que la propia solución.

Por otro lado, integrar un script de este tipo en un proyecto web más completo o complejo que una galería de fotos puede resultar costoso y farragoso. De hecho, muchas veces puede que el script de galería de fotos tenga más peso o entidad que la propia web que estás desarrollando, por lo que su integración no acaba de justificarse.

No puedo dejar de nombrar el caso del trabajo con CMS. En mi caso suelo realizar bastante programación con Drupal. En estos casos existen un sinfín de plugins para implementar una galería de fotos. Dependiendo del caso puede interesar realizar personalizada a partir de CCK i Views o tirar de plugins muy especializados que ya incorporan toda la funcionalidad. Lo último que he probado en este sentido ha sido la utilización del módulo Image FUpload para la subida masiva de ficheros de imágenes y la verdad es que el resultado es tan ágil, intuitivo y amigable que el usuario que debe de gestionar las galerías se adapta rápidamente a su uso.

Volviendo al tema del post, la pura cuestión es que hará un par de semanas que estuve hurgando por Internet cuando me encontré con lo que prometía ser una joya: un script que permitía desplegar una galería de fotos a partir de las imágenes de una carpeta en DropBox: My PHP DropBox Gallery

No tuve tiempo en ese momento para testearlo, pero hoy, con la necesidad de encontrar una solución rápida e intuitiva para la web de un familiar, he encontrado los argumentos perfectos para acostarme un poco más tarde.

La instalación es rapidísima ya que sólo se necesita modificar el fichero de configuración añadiendo el email y la contraseña de la cuenta de DropBox. Aprovecho para comentar que existe otro parámetro (DB_PASSWORD_SALT) en la configuración que debe ser puesto como cadena vacía para que funcione.

Esto y dar permisos para que Apache pueda cachear en el directorio correspondiente y a funcionar. Ya tenemos nuestra galería en pantalla. Por defecto el script coge como raíz las imágenes que encuentre en el directorio Photos que viene creado por defecto con DropBox.

Al pie de la galería podemos encontrarnos con un enlace para acceder a la administración de la galería, a la cual se accede con el mismo email y password de DropBox y desde donde podremos acabar de configurar los parámetros de la misma. Para no extenderme más de lo necesario pongo un listado de las características más significativas:

  • Crea una árbol de álbumes con la estructura de directorios que encuentra en DropBox.
  • Permite configurar cual es el directorio raíz a partir del cual se genera la galería de fotos
  • Las fotos se visualizan con un efecto Lightbox con presentación (slideshow) incluido.
  • Permite configurar la caché de todos los tamaños de imágenes generados por la galería.
  • Incluye varios themes, incluido uno para Iphone.
  • Incluye también varios efectos de presentación de los álbumes.
  • Tiene una estética muy actual.

Bueno, lo recomiendo y estoy seguro que dará que hablar una vez se extienda.

Os dejo una captura de la implantación de pruebas que he hecho.

Galeria My PHP DropBox Gallery

Habitualmente, en un servidor Linux, encontramos los logs del servidor de mail bajo /var/log/mail o /var/log/maillog .

En el caso de Plesk, el cual suele utilizar Qmail, los logs se encuentran bajo /usr/local/psa/var/log/maillogm .

Es una información breve pero que os puede evitar perder tiempo ;-)

About

ProgramadorPHP.es es el blog profesional de Vicent González i Castells, programador freelance especializado en desarrollo de aplicaciones web. vigoncas@programadorphp.es

CURRÍCULUM

Tags