2011-12-19 24 views
7

Tengo un formulario de discusión de envío con carga de imágenes en mi sitio web. Ahora, deseo subir un nombre de archivo único cuando el usuario envíe su imagen para que pueda mostrar el resultado de todas las imágenes y pueda evitar el nombre duplicado del archivo. ¿Cómo puede hacer esto con php? Si necesita mi código de proceso del formulario, lo subiré.php Nombre de archivo único al cargar

Muchas gracias.

+1

http://stackoverflow.com/questions/8551763/storing-image-data-in-mysql-and-naming-conventions/8551813#8551813 – Richard

+1

Use 'uniqid()' nombrar el archivo permanente con 'move_uploaded_file() ' –

Respuesta

10

Usted puede utilizar la función uniqid() para generar un identificador único

/** 
* Generate a unique ID 
* @link http://www.php.net/manual/en/function.uniqid.php 
* @param prefix string[optional] <p> 
* Can be useful, for instance, if you generate identifiers 
* simultaneously on several hosts that might happen to generate the 
* identifier at the same microsecond. 
* </p> 
* <p> 
* With an empty prefix, the returned string will 
* be 13 characters long. If more_entropy is 
* true, it will be 23 characters. 
* </p> 
* @param more_entropy bool[optional] <p> 
* If set to true, uniqid will add additional 
* entropy (using the combined linear congruential generator) at the end 
* of the return value, which should make the results more unique. 
* </p> 
* @return string the unique identifier, as a string. 
*/ 
function uniqid ($prefix = null, $more_entropy = null) {} 
8

Puede usar una marca de tiempo en la fecha, de esa manera no obtendrá el mismo nombre de archivo/hora dos veces.

No es seguro exactamente lo que su código es similar, pero se podía hacer algo como esto:

$filename = uniqid() . $orig_filename; 

Read this documentation on the PHP docs about uniqid for more information. Utiliza la fecha y hora para generar una cadena identificadora única.

+0

lo siento, ¿podría darme algún ejemplo? –

+0

Bueno, es cambiar el nombre con id único a la base de datos, algo así: 4eef63add36881162_03.JPG.Pero en la carpeta de la imagen se muestra el nombre de la imagen original, Like: 1162_03.jpg, ¿puedo cambiar el nombre de la imagen original a exactamente el nombre de la imagen de la base de datos? –

+0

He solucionado este problema. Gracias por tu tiempo, Batkins. –

0

Creo que la manera más simple sería almacenar el nombre de la imagen en un campo de base de datos y luego cuando el usuario carga su imagen para validar que el nombre del archivo sea único al marcarlo con nombres de archivo existentes. Puede utilizar una interfaz ajax/jquery si no desea que el usuario tenga que esperar hasta que se envíe el formulario para obtener un error o un aviso para cambiar su nombre de archivo.

+0

bien, pero creo que hay alguna manera mejor ... –

+0

¿Qué quiere decir una mejor manera? Creo que el uso de un unique_id como se sugiere en los otros comentarios o tener el nombre de usuario de su archivo son las 2 mejores maneras? Si planea mostrar el nombre al cliente, la mejor manera es permitir que el usuario nombre su archivo con un nombre fácil de usar; de lo contrario, mostrará el unique_id a los clientes que puede no ser apropiado. – Robert

3

Si necesita un nombre único, puede utilizar uniqid.

$filename = uniqid() . '.jpeg'; 

Se advierte sin embargo que sólo será único a través de una máquina, es decir, puede generar el mismo que si se ejecuta en el mismo tiempo en dos máquinas diferentes.

+0

+1 por 'No obstante, tenga en cuenta que solo será único en una máquina, es decir, que puede generar lo mismo si lo ejecuta al mismo tiempo en dos máquinas diferentes'. –

1

La mejor opción IMO sería utilizar sha1_file Se creará un hash único basado en el contenido del archivo. Esto solo colisionaría si es la misma imagen o una colisión hash que es una probabilidad de 1 en 2^160. Puede evitar tener imágenes duplicadas de esta manera, sin embargo, debido a que está creando un hash del archivo, puede ser más lento.

$filename = sha1_file($upload_file) . $ext; 


Otra opción es tempnam Se va a crear un archivo temporal con un nombre único.

Nota: Si PHP no puede crear un archivo en el parámetro dir especificado, pasa a usar el sistema por defecto.

Ejemplo básico:

$filename = tempnam($dir, $prefix); 
unlink($filename)//we don't need the tempfile just the name 

También tenga en cuenta: Si cambia el nombre del archivo puede que no sea única.

Cuestiones relacionadas