Laravel galería de imágenes lógica

Recientemente comencé a desarrollar un sitio bastante grande. En el sitio me gustaría permitir a los usuarios subir sus trabajos de muestra. Estamos bastante limitados en este momento, por lo que las imágenes se almacenarán en nuestro servidor.

Estoy un poco atrapado con la lógica. Entonces mi lógica sería esta.

El usuario crea una carpeta con un nombre que está almacenado en la base de datos con el users id adjunto

tabla de carpetas

Filas

 id | folder | user_id 1 | Some folder | 1 2 | New folder | 4 3 | Nother folder | 7 

Tabla de imágenes

Filas

 id | image_name | folder_id | 1 | image1.jpg | 1 2 | image2.jpg | 1 3 | image3.jpg | 1 4 | image4.jpg | 2 5 | image5.jpg | 2 6 | image6.jpg | 2 

Relaciones

 class Folder extends Eloquent { public function images() { return static::has_many('Images'); } } class Image extends Eloquent { public function folder() { return static::belongs_to('Folder'); } } 

estructura de carpetas en el servidor

 - samples -user_id - folder_id - image1 - image2 - image3 

para que pueda ver, el usuario crea una carpeta, después de que se crea la carpeta, el user sube el nombre de la imagen a la base de datos con el folders id las folders id y muestra las imágenes de la manera descrita anteriormente con la realación.

Entonces mis preguntas

  • ¿Es esta una buena lógica en tu opinión?
  • puede esto causar problemas en el futuro
  • ¿Qué ofrecerías por esta funcionalidad?

Y de lo que soy más sagrado son 2 cosas.

Creo que esto conducirá a una enorme base de datos, en segundo lugar están los id's , después del tiempo x cuando habrá más usuarios, boostán los id's , y sé que esto parecerá extraño, pero dado que muchos usuarios subirán imágenes, se generarán enormes Identificación, lo que quiero decir con esto, tal vez llegue a millones, ¿hay alguna manera de resolver este problema?

Gracias por la ayuda

Ok, descompongo esto en algunas respuestas secundarias;

Pregunta:

 - Is this a good logic in your opinion - Can this lead problems in the future - What would you offer for this functionality 

Responder:

La lógica parece sonar, pero tengo curiosidad de dónde almacenarás las imágenes. Dentro de public_html – o fuera de la raíz web? Si tiene las imágenes dentro de public_html, y permite que el navegador acceda a ellas directamente, les permitirá a los usuarios ‘adivinar’ otras carpetas de usuarios y acceder a ellas. Debe almacenar los datos de forma segura.

Para crear imágenes fuera de la webroot y asegurarse de que solo los usuarios autorizados puedan acceder a ellas, debe usar readfile () . Algo así hará el truco

 function user_file($file_name = "") { if ($file_name) { // Ensure no funny business names to prevent directory transversal etc. $file_name = str_replace ('..', '', $file_name); $file_name = str_replace ('/', '', $file_name); // now do the logic to check user is logged in if (Auth::check()) { // Serve file via readfile() - we hard code the user_ID - so they // can only get to their own images readfile('../your_app/samples/'.Auth::user()->id.'/'.$file); } } } 

Pregunta:

Creo que esto conducirá a una enorme base de datos, en segundo lugar están los identificadores, después del tiempo x cuando habrá más usuarios, boostán los id, y sé que esto parecerá extraño, pero dado que muchos usuarios subirán imágenes, se generarán enormes Identificación, lo que quiero decir con esto, tal vez llegue a millones

Responder:

De acuerdo con la página de características mySQL :

Utilizamos el servidor MySQL con bases de datos que contienen 50 millones de registros. También sabemos de los usuarios que usan MySQL Server con 200,000 tablas y alrededor de 5,000,000,000 de filas.

Entonces eso son 5 mil millones de filas. Quizás puedas llegar a unos pocos millones. Entonces estás a salvo aquí (dependiendo de tu hardware).

Pregunta:

… pero dado que muchos usuarios subirán imágenes, obtendrán una gran cantidad de id., lo que quiero decir con esto, tal vez llegue a millones, ¿hay alguna manera de resolver este problema?

Responder:

Si no desea almacenar millones de registros y le preocupa el rendimiento, una opción es mantener la tabla de carpetas, pero suelte la tabla de imágenes. En su lugar, puede usar scandir () en la carpeta y obtener PHP para recuperar los nombres de los archivos del directorio. Entonces no tienes tanta sobrecarga.

 "; } ?> 

El método de Almacenar la tabla de carpetas y usar la función scandir es un procedimiento estándar. Y permita que php recupere los nombres de archivo de la carpeta. Si tiene varios archivos, intente categorizarlos con el orden de año y mes, como en wordpress. Me gusta

 2012 01 02 03 2013 01 02 03 

etc. dentro de la carpeta id. Entonces, el número total de imágenes en una carpeta será comparativamente menor.