El blog de Javier Aranda

aprendiendo a ser ingeniero informático

Archivo para la etiqueta ‘PHP’

dllight – script que muestra el contenido de un directorio y permite la descarga de los archivos

0 comentarios ¡escriba uno!

¿Qué es dllight?

dllight es un pequeño script escrito en php que permite explorar mediante una interfaz web el contenido de una carpeta situada en el servidor y descargar sus archivos, aunque esta carpeta no se encuentre visible en la ruta pública del servidor. Además permite proteger archivos por contraseña, de tal forma que para poder descargarlos hay que introducir la palabra de paso correcta. Y por último, permite insertar publicidad de Google AdSense en las páginas e insertar el código de seguimiento de Google Analytics.

Capturas del script en acción:

dllight listado del contenido del directorio

dllight listado del contenido del directorio


dllight descarga de un archivo protegida por contraseña

dllight descarga de un archivo protegida por contraseña

Descargar dllight

Para descargar este script pulse sobre el siguiente enlace: dllight-1.0.0

Instalación y configuración del script

  1. Descomprimir el zip descargado y copiar los archivos que se encuentran dentro de la carpeta dllight en la raíz del servidor o en la carpeta desde donde se quiera que sea accesible el script.
  2. Renombrar el archivo example.htaccess a .htaccess para que funcione la reescritura de la URL. Esto requiere obligatoriamente tener activado el mod_rewrite.
  3. Editar el archivo index.php para establecer una serie de variables de configuración que a continuación se detallan.
  • $description: texto que aparece bajo la URL de la página.
  • $footer: texto que aparece en la parte inferior de la página.
  • $basepath: ruta al directorio el cual queremos mostrar su contenido. Puede estar oculto al servidor web.
  • $passfile: archivo donde se especifican las contraseñas. El script buscará en cada directorio si existe este archivo y lo procesa.
  • $cookiename: nombre de la cookie usada para conocer si se ha visitado la página previamente a la descarga del archivo. Si no se ha hecho, no se puede descargar.
  • $offset: diferencia en segundos de la hora del servidor con la hora que se quiere mostrar en las páginas.
  • $google_analytics: código de la cuenta de Google Analytics para controlar las visitas.

El archivo de contraseñas permite establecer una contraseña a cada archivo del directorio en el cual se encuentre ese archivo. Su estructura es:

nombre-del-archivo.extension = mi_contraseña-123
proyecto.zip = 123abc

Como puede observarse, a la izquierda del igual va el nombre del archivo tal cual se encuentra en el sistema de archivos, y a la derecha la contraseña que queremos ponerle.

Miscelánea

Si tienes cualquier duda sobre dllight, tienes los comentarios de esta entrada a tu disposición.

Si te ha gustado mucho, te es muy útil o le obtienes algún beneficio económico, tal vez quieras agradecérmelo con una donación. Si este es tu caso, por favor visita la sección de Donaciones, gracias ;)

Escrito por javierav

17 Octubre 2009 a las 11:25 pm

Categoría: PHP

Etiquetado con , , ,

Instalando mongoDB + driver PHP en Ubuntu 9.04

1 comentario

logo mongoDB

¿Qué es mongoDB?

Es una base de datos orientada a documentos de código abierto escrita en C++. A diferencia de otros sistemas de gestión de bases de datos, mongoDB no sigue el modelo relacional. La base de datos gestiona colecciones de documentos en objetos JSON. Está orientada a la web 2.0, la nube y las configuraciones de varios servidores de bases de datos. En la entrada Más allá de las bases de datos relacionales hablamos de la utilidad de este tipo de bases de datos.

Más información:

Descargando e instalando mongoDB

Existen dos formas de realizar este proceso: podemos descargar el código fuente y compilarlo o bajar directamente los binarios. En este artículo optaremos por lo segundo por la facilidad y comodidad.

En la sección de descargas de la web de mongodb tenemos varias opciones, aunque las que nos interesa es la correspondiente a la versión 1.0.0 para Linux 32 bits (el que use 64 bits deberá escoger su opción). Tras la descarga, tendremos un archivo tar.gz que descomprimiremos con los comandos habituales:

cd Escritorio
tar -zxvf mongodb-linux-i686-1.0.0.tgz
cd mongodb-linux-i686-1.0.0

Si observamos el contenido del directorio vemos que se organiza en los subdirectorios bin, include y lib. En principio ya podríamos ejecutar mongodb desde ese directorio, pero por cuestiones de orden y claridad, copiaremos el contenido de esas subcarpetas en los directorios de igual nombre bajo /usr/local, operación para la que necesitamos adquirir permisos de root.

sudo -s
mv bin/* /usr/local/bin
mv include/* /usr/local/include
mv lib/* /usr/local/lib

De aquí en adelante asumiremos que estamos logueados en la terminal como root. Como ya tenemos los archivos donde nos interesan, podemos eliminar la carpeta descomprimida y el archivo descargado:

cd ../
rm -fr mongodb-linux-i686-1.0.0 mongodb-linux-i686-1.0.0.tgz

Configuración inicial

Antes de iniciar el demonio de mongodb es necesario crear una serie de directorios de trabajo, ya que al no instalarse, estos directorios no se crean. El más fundamental será el directorio donde el gestor almacenará las estructuras necesarias para almacenar en el disco duro los datos. Por defecto la carpeta es /data/db pero en este tutorial guardaremos los datos bajo /var/lib/mongodb (mysql por ejemplo también guarda los datos bajo /var/lib). Para ello creamos el directorio:

mkdir /var/lib/mongodb

Este directorio es propiedad de root. En este tutorial el demonio mongod se ejecutará bajo el usuario root. Podríamos ejecutarlo bajo otro usuario existente o crear uno específico para ello, tras lo que podríamos cambiar la propiedad del directorio de los datos por la del usuario usado por mongod.

El demonio puede configurarse mediante una serie de parámetros (ejecutar mongod –help para una lista) pasados al ejecutable del demonio, pero esta forma es un poco sucia y puede exponer ciertas configuraciones a la vista de cualquier usuario del sistema que explore la lista de procesos. Por ello, mongodb permite ser llamado especificándole la ruta a un archivo de configuración (de tipo conf). Ya que existe esa posibilidad, nosotros la vamos a hacer de esa forma. Para ello creamos un directorio bajo /etc llamado mongodb:

mkdir /etc/mongodb

Y con cualquier editor creamos el archivo mongodb.conf y le asignamos el contenido:

nano /etc/mongodb/mongodb.conf
# Config file for MongoDB

dbpath = /var/lib/mongodb

Como puede observarse, la directiva de configuración dbpath (que podía fijarse como parámetro del demonio) se usa de forma análoga en el archivo de configuración, especificándole a la aplicación dónde se encuentra el directorio con los datos. Existen directivas que no reciben argumentos, por ejemplo –auth no requiere nada a continuación. En estos casos, en el archivo de configuración deberemos igualarlo a true. Continuando con el ejemplo, –auth quedaría como auth = true. Por el momento no usaremos más directivas. En la web oficial existe un apartado dedicado a cada parámetro que podemos usar para configurar mongodb.

Iniciando el demonio

Para ejecutar el demonio escribiremos (le indicamos la ruta al archivo de configuración con -f):

mongod -f /etc/mongodb/mongodb.conf

Y si todo va bien, obtendremos algo como esto:

Tue Oct 13 21:47:02 Mongo DB : starting : pid = 16139 port = 27017 dbpath = /var/lib/mongodb master = 0 slave = 0  32-bit 

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations for more

Tue Oct 13 21:47:02 db version v1.0.0, pdfile version 4.4
Tue Oct 13 21:47:02 git version: afe21e02c11f9a923ab1c95edf6fdd95b9a4a51e
Tue Oct 13 21:47:02 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686
Tue Oct 13 21:47:02 waiting for connections on port 27017
Tue Oct 13 21:47:02 web admin interface listening on port 28017

Tras esta operación ya tenemos al demonio listo para atender nuestras peticiones.

Instalar el driver para PHP

Para poder instalar el driver de mongodb para php debemos tener instalado el paquete PEAR y la versión de desarrollo de php. Si no lo tenemos instalado, sólo tenemos que ejecutar:

apt-get install php-pear php5-dev

Y para instalar el driver:

pecl install mongo

Configurar PHP

El siguiente paso y último de la instalación y configuración consiste en indicarle a php que debe cargar la nueva extensión que contiene el driver en sí. Para ello creamos el siguiente archivo:

nano /etc/php5/conf.d/mongodb.ini

Y le asignamos la carga del módulo y sus directivas de configuración:

extension=mongo.so

[mongo]
; If the driver should reconnect to mongo
mongo.auto_reconnect = true

; Whether to allow persistent connections
mongo.allow_persistent = On

; Maximum number of persistent connections (-1 means unlimited)
mongo.max_persistent = -1

; Maximum number of links (persistent and non-persistent, -1 means unlimited)
mongo.max_connections = -1

; Default host for mongo connection
mongo.default_host = www.example.com

; Default port for mongo database
mongo.default_port = 42

; When saving files to the database, size of chunks to split them into
mongo.chunk_size = 1024

; Specify an alternate character to $ to use for special db functions ($set, $push, $exists, etc.)
mongo.cmd = "$"

Tras esta operación debemos reiniciar Apache para que PHP cargue de nuevo la configuración y los módulos (sólo si trabajamos con mod_php).

/etc/init.d/apache2 restart
Si ejecutamos un phpinfo() observamos que la extensión se ha cargado perfectamente.

Si ejecutamos un phpinfo() observamos que la extensión se ha cargado perfectamente.

Escrito por javierav

13 Octubre 2009 a las 10:42 pm

Categoría: Linux, PHP

Etiquetado con , , ,

Forzar la descarga de un archivo en php

0 comentarios ¡escriba uno!

Recupero una entrada que publiqué en mi antiguo blog para forzar la descarga de un archivo en php.

/**
 * Forzar la descarga de un archivo en PHP
 *
 * @author Javier Aranda 
 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero GPL 3
 */

$archivo = '/home/usuario/mi_archivo.pdf';

//Cabeceras HTTP para forzar la descarga (varia según el navegador)
if(isset($_SERVER['HTTP_USER_AGENT']) AND strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
{
   header('Content-Type: application/force-download');
}
else
{
   header('Content-Type: application/octet-stream');
}

//Calculamos el tamaño del archivo
$tamano = filesize($archivo);

//Envío cabecera con el tamaño del archivo
header('Content-Length: '.$tamano);

//Envío cabecera con el nombre del archivo
header('Content-disposition: attachment; filename=' . basename($archivo));

header('Pragma: no-cache'); //Cabecera anti-cache
header('Expires: 0'); //Cabecera que define la duración

//Esta función lee un archivo y lo vuelca a la salida (ver manual PHP)
readfile($archivo);

Nota: por fallos en el resaltador de sintaxis aparece un cierre de la etiqueta http inexistente. Reportaré el fallo.

Escrito por javierav

8 Agosto 2009 a las 2:11 pm

Categoría: PHP

Etiquetado con , , ,

Tutorial de desarrollo de webs con Kohana (I)

1 comentario

Cuando nos vemos envueltos en el proceso de diseñar y crear páginas web, son muchas las tareas y funciones que se repiten de forma común en cualquier proyecto y que normalmente nos veremos obligados a implementar. Esto supone un coste innecesario en tiempo, pues tendremos que dedicar parte a realizar una tarea que ya hemos realizado en proyectos anteriores. Además, en muchas ocasiones nos encontramos que tenemos que implementar clases y funciones nuevas para dar respuesta a un problema, pero que seguramente alguien ya ha desarrollado antes y que nosotros podremos reutilizar al ser publicadas con licencias libres.

Quizás la solución fácil pasa por copiar la estructura básica y nuestras clases y funciones desarrolladas o importadas cada vez que tenemos un proyecto nuevo que hacer. Pero esto presenta varios inconvenientes, como el arrastrar configuraciones específicas del proyecto padre que no nos servirán para el nuestro, con el consiguiente tiempo en depurar y eliminar lo innecesario.

En este punto, entran en juego los frameworks, que son un avance respecto a las clases. Si bien una clase nos permite abstraer la solución de un problema que podrá reutilizarse en futuros proyectos, un framework añade además la lógica necesaria para combinar varias clases con la forma de representar y tratar los datos de una página web.

¿Qué es Kohana?

Kohana es un framework escrito en PHP que usa el patrón de diseño Modelo Vista Controlador (MVC) y que como características principales destacan que es ligero, seguro, y no ocupa mucho espacio.

Este proyecto se encuentra en la URL http://www.kohanaphp.com

Características

  • Altamente seguro
  • Extremadamente ligero
  • Curva de aprendizaje corta
  • Usa el patrón de diseño MVC
  • Compatible 100% con UTF8
  • Arquitectura de acoplamiento débil (definición, descripción)
  • Extremadamente fácil de extender

Tecnología

  • Programación estricta en PHP5 orientada a objetos
  • Abstracción de la base de datos usando Helpers SQL
  • Varios drivers de manejo de sesiones (nativo, bases de datos y cookies)
  • Potente manejador de eventos que permiten pequeñas modificaciones dinámicas
  • Basado originalmente en CodeIgniter

¿Qué hace a Kohana diferente?

  • Gestionado por una comunidad y no una empresa. El desarrollo de Kohana está dirigido por un equipo de personas que necesitan un framework para soluciones rápidas y potentes.
  • Estricta programación orientada a objetos bajo PHP5. Ofrece muchos beneficios: protección por visibilidad, carga automática de clases, sobrecarga, interfaces, abstracciones y patrones de instancia única (singleton)
  • Extremadamente ligero. Kohana no depende de extensiones de PECL o librerías PEAR. Grandes librerías son descartadas en favor de  soluciones optimizadas.
  • Los arrays GET, POST, COOKIE y SESSION funcionan de la forma esperada. Kohana no limita el acceso a los datos globales, pero ofrece filtrado y protección XSS.
  • Autocarga de clases funcional. Carga de clases bajo demanda, según sean requeridas por la aplicación.
  • No hay conflictos en el espacio de nombres. Todas las clases poseen un sufijo para permitir nombres similares entre componentes, para una API más coherente.
  • Recursos en cascada. La mayor parte de Kohana puede ser sobrecargada o extendida sin editar los archivos del núcleo. Los módulos permiten plugins multiarchivo que pueden ser añadidos a la aplicación transparentemente.
  • Librería de Drivers y consistencia en la API. Las librerías pueden usar diferentes “drivers” para gestionar diferentes APIs externas de forma transparente. Por ejemplo, está disponible varias formas de almacenamiento de las sesiones (bases de datos, cookies, y la nativa de php), pero se usa la misma interfaz para todas ellas. Esto permite el desarrollo de drivers nuevos para librerías existentes, lo que mantiene la API consistente y clara.
  • Potente manejador de eventos. Los manejadores de eventos del estilo del observador permiten de forma potencial niveles extremos de personalización.
  • Ciclo rápido de desarrollo. Un rápido desarrollo conlleva una rápida respuesta a los bugs encontrados y la nuevas fucionalidades.

¿Me interesa usar Kohana?

Si quieres desarrollar un proyecto web desde cero sin necesidad de crear y programar estructuras básicas, si quieres disponer de una colección de clases y funciones mínimas para realizar varios proyectos web, si no quieres perder el tiempo en desarrollar funcionalidades que ya están implementadas por otros y si lo que quieres es directamente trabajar en tu proyecto en si, ¡te recomiendo Kohana!

¡Y ahora qué!

En este primer artículo hemos visto lo que Kohana nos ofrece. En entregas posteriores iremos abordando temas desde la instalación y puesta en marcha de nuestra primera web en Kohana, pasando por la descripción de todas las funcionalidades incorporadas hasta la creación de un pequeño foro para nuestra web.

Escrito por javierav

4 Julio 2009 a las 5:57 pm

Categoría: PHP

Etiquetado con , , ,