Post Top Ad

Your Ad Spot

jueves, 7 de mayo de 2020

Cómo cargar y descargar archivos PHP y MySQL

Este tutorial muestra cómo puede cargar archivos de varios formatos, incluidos .zip, .pdf, .docx, .ppt, así como archivos de imagen a través de un formulario usando PHP para almacenarlos en una carpeta en nuestro servidor.
También registraremos el nombre de los archivos cargados y la información relacionada, como el nombre del archivo, el tamaño y el número de descargas en una tabla de base de datos.
Cree una nueva carpeta de proyecto PHP y llámela  file-upload-download . Cree una subcarpeta dentro de esta carpeta llamada uploads (aquí es donde se almacenarán nuestros archivos cargados) y un archivo llamado index.php . 
index.php es donde crearemos nuestro formulario de carga de archivos. Ábrelo y pon este código dentro:
index.php :
<?php include 'filesLogic.php';?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="style.css">
    <title>Files Upload and Download</title>
  </head>
  <body>
    <div class="container">
      <div class="row">
        <form action="index.php" method="post" enctype="multipart/form-data" >
          <h3>Upload File</h3>
          <input type="file" name="myfile"> <br>
          <button type="submit" name="save">upload</button>
        </form>
      </div>
    </div>
  </body>
</html>
Es una forma muy simple que toma solo el campo de entrada para nuestro archivo y un botón de carga. 
En la sección de encabezado, estamos vinculando a nuestro archivo style.css para proporcionar un poco de estilo a nuestro formulario. Cree ese archivo en la raíz de nuestra aplicación y agregue este código CSS:
style.css :
form {
  width: 30%;
  margin: 100px auto;
  padding: 30px;
  border: 1px solid #555;
}
input {
  width: 100%;
  border: 1px solid #f1e1e1;
  display: block;
  padding: 5px 10px;
}
button {
  border: none;
  padding: 10px;
  border-radius: 5px;
}
table {
  width: 60%;
  border-collapse: collapse;
  margin: 100px auto;
}
th,
td {
  height: 50px;
  vertical-align: center;
  border: 1px solid black;
}
En la parte superior de index.php, estamos incluyendo el  archivo filesLogic.php . Este es el archivo que contiene toda la lógica de recibir nuestro archivo enviado y guardarlo en la carpeta de cargas , así como almacenar la información del archivo en la base de datos. Vamos a crear este archivo ahora.
filesLogic.php :
<?php
// connect to the database
$conn = mysqli_connect('localhost', 'root', '', 'file-management');

// Uploads files
if (isset($_POST['save'])) { // if save button on the form is clicked
    // name of the uploaded file
    $filename = $_FILES['myfile']['name'];

    // destination of the file on the server
    $destination = 'uploads/' . $filename;

    // get the file extension
    $extension = pathinfo($filename, PATHINFO_EXTENSION);

    // the physical file on a temporary uploads directory on the server
    $file = $_FILES['myfile']['tmp_name'];
    $size = $_FILES['myfile']['size'];

    if (!in_array($extension, ['zip', 'pdf', 'docx'])) {
        echo "You file extension must be .zip, .pdf or .docx";
    } elseif ($_FILES['myfile']['size'] > 1000000) { // file shouldn't be larger than 1Megabyte
        echo "File too large!";
    } else {
        // move the uploaded (temporary) file to the specified destination
        if (move_uploaded_file($file, $destination)) {
            $sql = "INSERT INTO files (name, size, downloads) VALUES ('$filename', $size, 0)";
            if (mysqli_query($conn, $sql)) {
                echo "File uploaded successfully";
            }
        } else {
            echo "Failed to upload file.";
        }
    }
}
En la parte superior de este archivo, nos estamos conectando a una base de datos, pero aún no la hemos creado. Hagámoslo ahora.
Cree una nueva base de datos llamada gestión de archivos . Bajo esta base de datos, cree una tabla llamada archivos  y dele los siguientes campos.
  • Yo dint
  • nombre - VARCHAR (255) 
  • tamaño - INT
  • descargas
Ahora abra el archivo index.php en su navegador. Para mí, iré a http: //localhost/file-upload-download/download.php.http : // localhost file upload download download php .
Haga clic en el campo de entrada de archivo y seleccione cualquier archivo de su máquina para cargar. 
Nota: Dependiendo de su configuración de php, su archivo puede fallar al cargar si el tamaño excede el valor upload_max_filesize establecido en su archivo php.ini. Siempre puede configurar esta información en su archivo php.ini. Aumente los valores de  post_max_size y  upload_max_filesize  . 
Una vez que haya seleccionado su archivo, puede hacer clic en el botón de carga. Si todo va bien, su archivo se cargará en la carpeta de cargas de su proyecto y se creará un nuevo registro en la tabla de archivos en la base de datos que contiene el nombre de archivo, el tamaño y el recuento de descargas.
Ahora nuestro archivo ha sido cargado. Puede verificar la carpeta de cargas y la tabla de la base de datos para confirmar que se realizó correctamente. Vamos a mostrarlo para que el usuario pueda verlo y haga clic en él para descargarlo. Primero, necesitamos obtener la información del archivo de la base de datos. 
Abra filesLogic.php y agregue estas 3 líneas de código justo debajo de la línea donde nos conectamos a la base de datos:
<?php
// connect to database
$conn = mysqli_connect('localhost', 'root', '', 'file-management');

$sql = "SELECT * FROM files";
$result = mysqli_query($conn, $sql);

$files = mysqli_fetch_all($result, MYSQLI_ASSOC);
Esto selecciona toda la información de los archivos de la base de datos y la establece en una variable de matriz llamada $ files.
Ahora cree un archivo llamado downloads.php en la carpeta raíz de nuestra aplicación y agregue este código dentro de él:
descargas.php :
<?php include 'filesLogic.php';?>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <link rel="stylesheet" href="style.css">
  <title>Download files</title>
</head>
<body>

<table>
<thead>
    <th>ID</th>
    <th>Filename</th>
    <th>size (in mb)</th>
    <th>Downloads</th>
    <th>Action</th>
</thead>
<tbody>
  <?php foreach ($files as $file): ?>
    <tr>
      <td><?php echo $file['id']; ?></td>
      <td><?php echo $file['name']; ?></td>
      <td><?php echo floor($file['size'] / 1000) . ' KB'; ?></td>
      <td><?php echo $file['downloads']; ?></td>
      <td><a href="downloads.php?file_id=<?php echo $file['id'] ?>">Download</a></td>
    </tr>
  <?php endforeach;?>

</tbody>
</table>

</body>
</html>
 Ahora en esta página, la información de los archivos de la base de datos se enumera cada uno junto con su tamaño en KB y el número de descargas. También hay un botón de descarga en cada archivo. Lo que queda ahora es el código que realmente descarga el archivo desde nuestra carpeta de cargas . Escribamos el código de inmediato.
Abra nuevamente filesLogic.php y agregue este código al final del archivo:
filesLogic.php :
// Downloads files
if (isset($_GET['file_id'])) {
    $id = $_GET['file_id'];

    // fetch file to download from database
    $sql = "SELECT * FROM files WHERE id=$id";
    $result = mysqli_query($conn, $sql);

    $file = mysqli_fetch_assoc($result);
    $filepath = 'uploads/' . $file['name'];

    if (file_exists($filepath)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . basename($filepath));
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize('uploads/' . $file['name']));
        readfile('uploads/' . $file['name']);

        // Now update downloads count
        $newCount = $file['downloads'] + 1;
        $updateQuery = "UPDATE files SET downloads=$newCount WHERE id=$id";
        mysqli_query($conn, $updateQuery);
        exit;
    }

}
Cuando estábamos enumerando los archivos, cada botón de descarga (o más bien, enlace de descarga) tenía un parámetro llamado file_id  adjunto. Entonces, cuando hace clic en el enlace de descarga de un archivo, la identificación de ese archivo se envía a la página filesLogic.php y se encuentra en este código que acabamos de agregar. 
El código luego obtiene esa información de archivo en particular de la base de datos usando el parámetro file_id y luego almacena la información del archivo en una variable llamada $ file . Usando el método file_exists () de PHP con la ruta completa a nuestro archivo como argumento, verificamos que el archivo realmente exista en nuestra carpeta de cargas. Luego procedemos a configurar algunos encabezados y finalmente respondemos con el archivo al usuario usando la función readFile () en PHP.
Después de descargar el archivo, actualizamos el recuento de descargas para ese archivo en particular en la base de datos. 

Conclusión

Eso es todo con la carga y descarga de archivos. Puede personalizarlo aún más para crear aplicaciones PHP geniales. Muchas gracias por seguirme. Déjeme saber lo que piensa sobre este artículo en la sección de comentarios a continuación, por favor.
¡Pasar un buen rato!

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas