2010-11-23 15 views
5

Quiero permitir a mis usuarios cargar un avatar en su perfil. Mi primera idea fue nombrar el archivo de avatar así: [user_id] .jpg. Entonces, incluso si un usuario actualiza su avatar, conserva el mismo nombre.¿La manera más eficiente de nombrar un avatar de usuario?

El problema es que si utilizo el almacenamiento en caché en el servidor (o incluso si se usa en el cliente), el nuevo avatar no se mostrará.

Mi nueva solución es nombrar el archivo de la siguiente manera:

[user_id] _ [random_number] .jpg

y almacenar el número aleatorio en la tabla Usuarios. ¿Cómo generarías este número de la manera más eficiente? O tal vez hay una mejor solución?

+0

Supongo 'user_id' es un número? –

+0

@ Grzegorz: sí, la identificación real de la tabla de usuarios. Ahora veo que las personas están aconsejando no mostrar la identificación públicamente. – Max

Respuesta

5

Me gustaría hacer algo como:

$avatarName = $userId . uniqid(); 
// add extension if needed, store it 

Será rápido y hacer lo que quiera. uniqid()

EDITAR

Como sugerido por otros usuarios, debe caer el ID de usuario del nombre de la imagen. Tener un usuario público puede generar problemas en el futuro. Además, uniqid() solo debería funcionar.

$avatarName = uniqid(); 
// add extension if needed, store it 
+1

Upvoted, pero creo que $ userId debería eliminarse de la ecuación ... –

+0

Estoy de acuerdo. Solo estaba siguiendo la idea de OP. Editado en consecuencia. – acm

+0

Estoy usando $ userId públicamente en diferentes lugares de mi aplicación. ¿Hay alguna razón por la cual debería estar oculto? En SO, si hago clic en su perfil, obtengo una identificación en la URL: 333893. ¿No es tu ID de usuario? ¿O es un campo diferente? – Max

7

Debería poder invalidar la caché cuando el usuario carga un nuevo avatar.

Si esto no es posible, puede guardarlo como [uid] _ [YYYYMMDDhhmmss] .jpg o algo así. No es necesario generar nada al azar ...

+1

A menos que quiera ocultar el 'uid' de otros usuarios que posiblemente podrían aprovechar el uso del uid de alguien. –

+3

Claro ... OP probablemente solo debería usar uniqid(). ".jpg"; y luego almacena el avatar-nombre de archivo actual en el modelo de usuario. –

+0

@Jorge: estoy usando $ userId públicamente en diferentes lugares de mi aplicación. ¿Hay alguna razón por la cual debería estar oculto? En SO, si hago clic en su perfil, obtengo una identificación en la URL: 313194. ¿No es tu ID de usuario? ¿O es un campo diferente? – Max

1

¿Ha pensado en configurar ETags en su .htaccess?

Ver:

http://developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_11/

Aunque puede cambiar los nombres de archivo, tendrá que gestionar la limpieza y operaciones que apuntan (quitar/cambiar el nombre del archivo antiguo, informe a su aplicación el nuevo archivo). Si está contento de hacer esto, puede agregar la identificación de los usuarios con la marca de tiempo de Unix en el momento de la carga, es poco probable que puedan cargar el mismo archivo en el mismo segundo. Si desea hacerlo aún más único, agregue un número aleatorio/no líquido.

+0

Nunca he oído hablar de esto, pero definitivamente lo investigaré. – Max

0

Con un número aleatorio existe la posibilidad minúscula (insignificante) de una colisión, pero por qué no comienzan en 1 y simplemente aumentar el número cada vez desde que está almacenando este número.

+0

El problema es que tendría que consultar el DB cada vez para saber cuál es el siguiente. ¿O tenías algo más en mente? – Max

+0

Puede mantener un número maestro para todos los usuarios, igual tendrá que guardarlo en la base de datos cada vez que lo use. – aronp

Cuestiones relacionadas