Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Cómo Crear un Sitio Web de Almacenamiento de Archivos con CodeIgniter

by
Difficulty:IntermediateLength:LongLanguages:

Spanish (Español) translation by Dacia Egurrola (you can also view the original English article)

He visto algunos tutoriales introductorios para Codeigniter, y esperaba mostrarte algo un poco más avanzado. Este tutorial te mostrará cómo hacer un sitio web potente para alojamiento de imágenes, utilizando la flexibilidad de Codeigniter. Este tutorial te ensañará sobre la filosofía de codificación del modelo MVC, integral para producir aplicaciones útiles.

Paso 1: Configuración

Antes de adentrarnos en el código HTML que nos dirá cómo crear un sitio web de almacenamiento de archivos y en el modelo MVC en el que nos basaremos, necesitamos prepararnos un poco. Abre tu editor de bases de datos favorito (en este tutorial, usaremos SQLBuddy) y crea una nueva base de datos llamada 'uploadr'. Dentro de ella, crea dos tablas: 'usuarios' (users) y 'archivos' (files). Asegúrate de que los usuarios tengan una columna de clave primaria, una columna de 'id' auto-numerada, junto con dos columnas varchar: de 'contraseña' y 'nombre de usuario'. La tabla de archivos necesita otra columna de 'id' (clave principal y auto-numerada), así como una columna de 'propietario' y una columna de 'nombre' varchar.

primer paso en la configuracion de un sitio web de almacenamiento de archivos

Dado que este tutorial se centra en aprender a codificar con Codeigniter y siguiendo el modelo MVC para saber cómo hacer un sitio web, no nos vamos a adentrar con cuestiones de estilo (como CSS, Photoshop). Con este fin, he creado una instalación personalizada de Codeigniter para ti, con todos los archivos creados y las vistas (en su mayoría) ya con el código HTML-d y CSS-d. Las dos cosas que deberás cambiar son los ajustes de la configuración y de la base de datos. Incluso incluí un sello "Beta" para ayudarte.

utilizando Codeigniter para crear un sitio web

Paso 2: Registro

¡Ahora sí, empezaremos el proceso de cómo crear un sitio web de almacenamiento de archivos! Abre el controlador 'login.php' y crea una una función llamada 'registro'. Esto va a controlar todo el proceso de registro. Primero, debemos verificar si se han enviado las solicitudes POST al servidor. En este caso, esto significaría que alguien intenta registrarse. Podemos hacer esto al verificar si $ _POST ['nombre de usuario'] está configurado. Si es así, entonces sabemos que alguien ha intentado registrarse y puede ingresarlo en la base de datos.

Si el usuario aún no ha intentado registrarse, lo detecta y lo envía automáticamente a la vista de "registro" que he codificado para usted. Notarás la línea:

Esto está llamando a la función 'registro' en el modelo 'usuarios'. Por el momento, esto no funcionará, ya que no hemos cargado el modelo. Hacemos esto de la misma manera en que las vistas se cargan, pero ya que vamos a utilizar este modelo ampliamente en esta clase, lo cargaremos en la función de constructor (la función con el mismo nombre que la clase), para que siempre esté cargado y disponible:

Probablemente te interesen los contenidos de la función de registro. Básicamente, utiliza un par de funciones de registro activo de Codeigniter, que permiten la manipulación de DB. La gran ventaja de usar las funciones de registro activo incorporadas de Codeigniter (además del hecho de que son agradables y simples) es que son independientes de la base de datos: puedes hacer cambios entre los distintos tipos de bases de datos fácilmente (por ejemplo, mySQL, SQLite) en el archivo de configuración de DB, sin afectar la aplicación. En el caso de nuestro registro, estamos agregando una entrada a la tabla de usuarios. Crea esta función en el modelo de 'users.php':

Algo que vale la pena notar en la vista de registro son las funciones site_url () y base_url (). Cada una proporciona la URL de su sitio con y sin el sufijo index.php /. La mayor ventaja que tienen es que puedes cambiar la estructura del URL de tu sitio sin tener que pasar por todos los enlaces: solo se necesita un cambio en su archivo de configuración.

Una vez que todo esto esté configurado, podemos intentar registrar una cuenta. La función en nuestro controlador debe redirigirnos nuevamente a la página de inicio de sesión después de crear nuestra cuenta.

Paso 3: Iniciar sesión

Ahora que tenemos algunos usuarios configurados, necesitamos una forma de permitirles ingresar al sitio de alojamiento de imágenes. Para esto, vamos a utilizar la clase de sesión Codeigniter. Aunque en realidad usa cookies, funciona de una manera muy similar a las sesiones normales de PHP, solo con más opciones (te recomiendo que consultes la guía de usuario).

Para empezar, necesitamos crear la función a la que el botón de inicio de sesión apunta actualmente, 'ir'. Esta función deberá recopilar la información que ha enviado el formulario y luego verificarla con la base de datos utilizando un modelo. Si todo es correcto, iniciará una sesión y redirigirá al usuario a sus archivos. Si escribieron mal su información, serán redirigidos a la página de inicio de sesión.

Algunas partes de esta función deben parecerte muy familiares por la función de registro: esto recopila $ username y $ password, antes de enviarlos a un modelo (en esta ocasión, 'iniciar sesión'). Después de esto, sin embargo, las diferencias se empiezan a notar.

A continuación, esto comprueba si el inicio de sesión ha fallado; si es así, entonces el usuario es redirigido de nuevo a la página de inicio de sesión. Sin embargo, si el inicio de sesión es exitoso, entonces el script crea una sesión, configurando 'id de usuario' al id del usuario. Todo lo que necesitamos ahora para que el script de inicio de sesión funcione es el modelo. Agrega esta función al modelo de 'usuarios' que usamos anteriormente:

Un resumen rápido: primero, esto consulta la base de datos en busca de usuarios con exactamente el mismo nombre de usuario y contraseña. Si no encuentra ninguno, entonces el número de filas será 0 y la función regresa como falsa. Si se encontró un match, entonces utiliza otra de las funciones de registro activas de Codeigniter para cargarlo como un objeto. Este objeto viene como una matriz de filas de DB, y cada una contiene un objeto con esa información de las filas. Como queremos la primera y única fila, la sacamos de $resultado y de ahí le proporcionamos el ID.

Tendremos que comprobar si el usuario ha iniciado sesión mientras se encuentra en la página de perfil. Para hacer esto, simplemente insertamos dos líneas de código en el constructor del controlador de perfil. Esto comprobará que la sesión contiene un ID de usuario. Si no es así, se redirigirá a la página de inicio de sesión. Si lo hace, entonces todo está bien y se convierte en una variable pública. Mientras cambiamos el constructor, cargaremos los dos modelos que necesitaremos para la página de perfil:

Lo último que debemos hacer es permitir el cierre de sesión. Esto se logra al configurar el ID de usuario a nada, eliminándolo. Todo lo que requiere es una función simple:

Paso 4: Viendo y subiendo archivos

En este momento, acabamos de iniciar sesión por primera vez. ¿Y con qué nos encontramos?

sitio web para subir imagenes temporales

No está nada mal, aunque el texto de "archivo de muestra" no se genera desde nuestra base de datos, es estático. Arreglaremos eso pronto, pero primero debemos cambiar los permisos de la carpeta 'archivo' para que Codeigniter pueda leer y escribir en ella. Lo cambié a 777 Permisos:

interfaz para subir imagenes temporales

Ahora que ya nos ocupamos de eso, hay que volver a codificar. Necesitamos cargar todos los archivos de los usuarios desde la base de datos, y para hacer eso vamos a necesitar ...

... ¡un modelo! Esta vez, sin embargo, lo vamos a crear en el modelo de archivo 'files.php', para que nuestra tabla de usuario y tabla de archivos queden separadas. Inserta esta función:

De nuevo, esto se basa en las secciones anteriores de este tutorial, por lo que debería poder entenderlo. Básicamente, obtiene todas las filas donde el propietario = el ID del usuario, y las devuelve en una buena variedad de objetos. Creemos algo en el controlador de 'perfiles' para interactuar con él, y para pasar la información a la vista. Modifica la función de índice con esto:

Una vez más, una función muy simple. Esta toma los resultados del modelo de archivos y los empaqueta en la vista. Codeigniter pasa los datos a la vista generalmente a través de una matriz (en este caso, datos). Luego explotará la matriz automáticamente en muchas variables, de modo que cuando vayamos a la vista, podrás acceder a los resultados de la base de datos a través de $ archivo, en lugar de $ datos ['archivo']. ¡Pongamos este encantador resultado de base de datos en la mira! Pega esto en 'profile.php', sustituyendo el código que el comentario HTML te indica.

El bucle foreach carga cada fila de la matriz a su vez, y la hace accesible a través del objeto $ file. Luego, usando la "sección" de muestra como plantilla, completamos todos los enlaces y el nombre con información para el nuevo objeto $ file. Veremos cómo funciona la función de eliminación más adelante y cómo funciona el enlace de vista después de que hayamos subido algo.

Si abres esto en tu navegador ahora, no verás nada. Esto es porque no hemos subido ningún archivo. Para corregir esto tendremos que hacer un formulario de carga. Hagamos el controlador primero; abre 'profile.php' y añadir esta función:

Esta función agrega algunas cosas nuevas: especialmente el manejo de archivos de Codeigniter. Comienza de manera bastante simple, verificando si se ha enviado un formulario buscando un archivo. Si el archivo no existe, simplemente muestra la vista de carga (que actualizaremos a continuación). Si el archivo existe, entonces extraerá el archivo temporal que el servidor ha generado. El directorio del archivo temporal se puede encontrar en $ _FILES ['your_file'] ['tmp_name'], y el archivo se puede leer desde este directorio mediante el archivo de lectura de Codeigniter. Esto carga toda la información de los archivos en la variable $ file.

La siguiente línea obtiene el nombre del archivo de $ _FILES global de una manera similar a la de obtener el directorio temporal. Armado con estas dos piezas de información, Codeigniter escribe el archivo en la carpeta de archivos en el mismo directorio que el archivo de índice. Por último, el archivo debe agregarse a la base de datos. Nuevamente, vamos con un modelo, esta vez la función 'agregar' en 'archivos'. Veremos cómo funciona eso en unos minutos, pero ahora necesitamos crear el formulario de carga en la vista. Añade esto donde el comentario del código HTML 'upload.php's te indica:

Reemplaza el código HTML actual con esto. Lo que debes tener en cuenta aquí es que cuando estamos cargando archivos, usamos un tipo de entrada = archivo, que nos permite elegir qué subir imágenes temporales. Además, tenemos que especificar un enctype en nuestra etiqueta de formulario, para que el servidor sepa que está recibiendo un archivo y que debe guardarlo. Echemos un vistazo rápido a lo que hemos creado:

como hacer un sitio con codeigniter

Ahora pasamos a la parte final del script de subir imágenes temporales y archivos, el modelo. Esto agrega el archivo a la base de datos, con su nombre y propietario, para que el servidor sepa qué archivos pertenecen a quién. Vamos a ver; añade esto a tu modelo de 'archivos':

Una vez más, aprovechando la funcionalidad de registro activo de Codeigniter, agregamos una fila a la base de datos con el nombre del archivo y el propietario. Obtenemos el propietario al encontrar el ID de los usuarios a partir de los datos de la sesión que guardamos anteriormente al iniciar sesión. En definitiva, una función muy sencilla. Para probar la habilidad de subir imágenes temporales, vamos a intentar subir una bonita foto:

como hacer un sitio web de almacenamiento de imagenes

Et, Voila!

sitio web con codeigniter para alojamiento de imagenes

Al examinar la carpeta 'archivos', vemos que el archivo que cargamos apareció allí, como por arte de magia (¡la magia de Codeigniter!), y vemos por qué funciona el enlace de vista, ya que simplemente apunta directamente al archivo en el directorio. Con esto hecho, todo lo que queda para este tutorial es eliminar archivos.

Paso 5: Eliminar archivos

Ok, la última parte. Esto no debería tomar mucho tiempo, ya que podrás utilizar las ideas que aprendiste anteriormente para hacerlo. Primero agregaremos este código a nuestro controlador de 'perfiles':

Y este código a nuestro modelo de 'archivos':

El primer controlador debe ser muy fácil de entender. Llama a la función de eliminación desde el modelo de archivos (que definimos al mismo tiempo), que genera el nombre del archivo. Luego usa una función PHP básica para eliminar el archivo con ese nombre en el directorio de archivos. Finalmente, envía de vuelta al perfil de los usuarios (que ahora es menos un archivo).

El modelo es un poco más complejo. Debe devolver el nombre del archivo y borrarlo, así que primero consulta la base de datos para obtener los detalles de los archivos. Luego, carga esto en la variable $ result y elimina el archivo. Después, esto devuelve la columna 'nombre' de la primera fila de la matriz (la única fila que devolvió la consulta), que luego se usa en el controlador anterior.

Intentemos eliminar una función:

subir imagenes temporales

Y haz clic en eliminar ...

como hacer un sitio web para alojamiento de imagenes

¡Hurra! Funcionó y ahora sabes cómo hacer un sitio web para subir imágenes temporales con CodeIgniter y el modelo MVC.

Pensamientos Finales sobre Cómo Hacer un Sitio Web para Alojamiento de Imágenes con CodeIgniter

Borrar archivos

Por supuesto, este código HTML no debe ejecutarse en un servidor sin algunas mejoras. Aquí hay algunos de los problemas importantes que tiene:

  • Las contraseñas no están cifradas. Esto significa que si alguien ingresa en la base de datos, podrá robar todos los datos de los usuarios con el mínimo esfuerzo. Esto podría resolverse fácilmente agregando un hash simple a las contraseñas.
  • El subir imágenes temporales no es privado. Un usuario puede querer asegurarse de que su almacenamiento de archivos solo sea visibles por ellos. Esto probablemente requeriría otro controlador para servir los archivos (que verifica los datos de sesión).
  • La secuencia de comandos no comprueba que los archivos existan antes de escribir archivos. Esto podría causar conflictos con el alojamiento de imágenes, o podría resultar en que los datos de los archivos se sobrescriban. Lo que sea: no es bueno. Esto podría resolverse con una simple comprobación de la base de datos para garantizar que el archivo no se haya tomado, y podría minimizarse al dar a los usuarios sus propios directorios dentro de la carpeta de archivos.
  • No se generan errores. Esto no ayuda al usuario a descubrir qué está haciendo mal, y aunque esto no es un problema en un sitio tan pequeño con acciones tan limitadas, aún podría mejorarse.

En general, con este tutorial aprendiste cómo crear un sitio web bastante poderoso de alojamiento de imágenes, especialmente debido a la pequeña cantidad de código HTML que tuviste que escribir. Debido a la naturaleza de Codeigniter, es muy fácil extenderlo, tanto para resolver los problemas anteriores como para agregar nuevas funciones, por ejemplo, cambiar el nombre de los archivos. También espero que este tutorial te haya enseñado un poco sobre el uso de los conceptos del modelo MVC y la potencia que aportan: simplemente ajustando los modelos en nuestra aplicación, podemos intercambiar la base de datos por archivos de texto, XML o cualquier cosa, y al cambiar las vistas, podemos cambiar el tema completamente sin romper la funcionalidad. ¡Increíble!

  • Suscríbete a la fuente RSS de NETTUTS para obtener más información y artículos de desarrollo web diarios.
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.