Cambiar nombre de archivo subido a PHP

publicado por: Anonymous

Un saludo cordial para todos

Tengo un formulario en HTML que captura unos datos, entre ellos un archivo que puede contener cualquier formato. Dichos datos son procesados por otro archivo PHP, que almacena el archivo en una carpeta y los demas datos en una base de datos mysql.

ARCHIVO 1: captura los dastos

_x000D_

_x000D_

	<form action="pse_guardar.php" method="POST" enctype="multipart/form-data">_x000D_
_x000D_
		<input type="text" id="estudiante" name="estudiante" value =" <?php echo $e_id ?>" readonly><br>_x000D_
_x000D_
		<input type="date" id="fecha" name="fecha" required><br>_x000D_
_x000D_
		<select name = "tipo">_x000D_
			<option>Selecciona</option>_x000D_
			<option>Excusa ausencia</option>_x000D_
			<option>Ausencia futura</option>_x000D_
			<option>Salida en jornada</option>_x000D_
			<option>Excusa uniforme</option>_x000D_
			<option>Llegada tarde</option>_x000D_
		</select><br>_x000D_
_x000D_
		<input type="text" id="descripcion" name="descripcion" placeholder="Descripcion" required><br>_x000D_
_x000D_
		<input type="file" name="file" id="file" > <br>_x000D_
_x000D_
		<input type="submit" name="" value="Almacenar">_x000D_
_x000D_
	</form>

_x000D_

_x000D_

_x000D_

ARCHIVO 2: Toma los datos y los almacena

_x000D_

_x000D_

<?php_x000D_
_x000D_
  $estudiante = $_POST["estudiante"];_x000D_
	$fecha = $_POST["fecha"];_x000D_
	$tipo = $_POST["tipo"];_x000D_
	$descripcion = $_POST ["descripcion"];_x000D_
	$directorio = "archivos/pse/";_x000D_
_x000D_
	if (!file_exists($directorio)) _x000D_
      {_x000D_
        mkdir($directorio, 0777, true);_x000D_
      }_x000D_
_x000D_
	$archivo = $directorio . basename($_FILES["file"]["name"]);_x000D_
_x000D_
	$tipoArchivo = strtolower(pathinfo($archivo, PATHINFO_EXTENSION));_x000D_
_x000D_
        if (move_uploaded_file($_FILES["file"] ["tmp_name"], $archivo)) {_x000D_
          echo "archivo subido con exito";_x000D_
_x000D_
        } else {_x000D_
          echo "error en la subida del archivo";_x000D_
        }_x000D_
_x000D_
    $adjunto = $archivo;_x000D_
_x000D_
    $sql = "INSERT INTO tabladelabasededatos (estudiante, fecha, tipo, descripcion, adjunto) values ('$estudiante', '$fecha', '$tipo', '$descripcion', '$adjunto')";_x000D_
_x000D_
    $consulta = mysqli_query($conexion, $sql);_x000D_
_x000D_
    if ($consulta==false) {_x000D_
        echo "Error en la consulta";_x000D_
_x000D_
        } else {_x000D_
          echo "<br><br>Datos almacenados exitosamente<br><br>";_x000D_
               }_x000D_
_x000D_
    mysqli_close($conexion);_x000D_
    echo "<a href ='" .$adjunto . "'>Descargar archivo</a>";_x000D_
_x000D_
_x000D_
_x000D_
_x000D_
	?>

_x000D_

_x000D_

_x000D_

Pregunta:

Cómo puedo cambiar el nombre del archivo subido de tal manera que el sistema, por ejemplos les vaya asignando un nombre como 001, 002, 003, 004?… porque asi como está el sistema me reemplaza los arhivos cuando tienen nombres iguales

solución

La solución es usar el mismo ID del registro de la base de datos. Así:

_x000D_

_x000D_

<?php_x000D_
    $estudiante = $_POST["estudiante"];_x000D_
    $fecha = $_POST["fecha"];_x000D_
    $tipo = $_POST["tipo"];_x000D_
    $descripcion = $_POST ["descripcion"];_x000D_
    $directorio = "archivos/pse/";_x000D_
    if (!file_exists($directorio))_x000D_
        mkdir($directorio, 0777, true);_x000D_
    $tipoArchivo = strtolower(pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION));_x000D_
    //EL CAMPO DE LA TABLA LLAMADO ADJUNTO DEBERÍA SER EL LA EXTENSIÓN DEL ARCHIVO Y EL ID AUTOINCREMENTAL SERÍA El NOMBRE DEL ARCHIVO._x000D_
    $sql = "INSERT INTO tabladelabasededatos (estudiante, fecha, tipo, descripcion, adjunto) values ('$estudiante', '$fecha', '$tipo', '$descripcion', '$tipoArchivo')";_x000D_
    if (!mysqli_query($conexion, $sql)) {_x000D_
        echo "Error en la consulta";_x000D_
    } else {_x000D_
        echo "<br><br>Datos almacenados exitosamente<br><br>";_x000D_
        $id = mysqli_insert_id($conexion);_x000D_
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $adjunto = $directorio . $id . "." . $tipoArchivo)) {_x000D_
            echo "archivo subido con exito";_x000D_
        } else {_x000D_
            echo "error en la subida del archivo";_x000D_
        }_x000D_
    }_x000D_
    mysqli_close($conexion);_x000D_
    echo "<a href ='" .$adjunto . "'>Descargar archivo</a>";_x000D_
?>

_x000D_

_x000D_

_x000D_

Ten en cuenta que el campo adjunto de la tabla, ahora almacena la extensión del archivo, y el ID autoincremental será el nombre.

Otra opción sería que cambiaras el nombre del archivo por la fecha con hora, minutos y segundos concatenar esto con un numero aleatorio de N cifras en caso de que simultáneamente más de un usuario esté cargando archivos, pero me parece mas confiable la primera opción.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *