sql >> Database teknologi >  >> RDS >> Mysql

Sådan uploader og downloader du filer PHP og MySQL

Denne vejledning viser, hvordan du kan uploade filer i forskellige formater, herunder .zip, .pdf, .docx, .ppt, samt billedfiler via en formular, der bruger PHP til at blive gemt i en mappe på vores server.

Vi registrerer også navnet på de uploadede filer og relaterede oplysninger såsom filnavn, størrelse og antallet af downloads i en databasetabel.

Opret en ny PHP-projektmappe, og kald den fil-upload-download. Opret en undermappe inde i denne mappe kaldet uploads (det er her, vores uploadede filer bliver gemt),  og en fil kaldet index.php.

index.php er hvor vi vil oprette vores filoverførselsformular. Åbn den og sæt denne kode i den:

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>

Det er en meget enkel formular, der kun tager inputfeltet til vores fil og en upload-knap.

I hovedsektionen linker vi til vores style.css-fil for at give lidt styling til vores formular. Opret denne fil i roden af ​​vores applikation og tilføj denne CSS-kode til den:

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;
}

Øverst i index.php inkluderer vi filen filesLogic.php. Dette er filen, der indeholder al logikken i at modtage vores indsendte fil og gemme den i uploadmappen samt gemme filoplysningerne i databasen. Lad os oprette denne fil nu.

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.";
        }
    }
}

Øverst i denne fil opretter vi forbindelse til en database, men vi har endnu ikke oprettet den. Lad os gøre det nu.

Opret en ny database kaldet filhåndtering. Under denne database skal du oprette en tabel kaldet filer og give den følgende felter.

  • id - INT
  • navn - VARCHAR(255) 
  • størrelse - INT
  • downloads

Åbn nu filen index.php i din browser. For mit vedkommende går jeg over til http://localhost/file-upload-download/download.php.

Klik på filindtastningsfeltet, og vælg en fil fra din maskine, der skal uploades.

Bemærk:Afhængigt af din php-konfiguration kan din fil muligvis ikke uploades, hvis størrelsen overstiger upload_max_filesize-værdien, der er angivet i din php.ini-fil. Du kan altid konfigurere disse oplysninger i din php.ini-fil. Forøg værdierne for post_max_size og upload_max_filesize .

Når du har valgt din fil, kan du klikke på upload-knappen. Hvis alt går godt, vil din fil blive uploadet til uploads-mappen i dit projekt, og en ny post vil blive oprettet i filtabellen i databasen, som indeholder filnavnet, størrelsen og antallet af downloads.

Nu er vores fil blevet uploadet. Du kan tjekke din uploadmappe og databasetabel for at bekræfte, at det lykkedes. Lad os vise det, så brugeren kan se det og klikke på det for at downloade det. Først skal vi hente filoplysningerne fra databasen.

Åbn filesLogic.php og tilføj disse 3 linjer kode lige under linjen, hvor vi forbinder til databasen:

<?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);

Dette vælger alle filoplysninger fra databasen og sætter den til en matrixvariabel kaldet $filer.

Opret nu en fil kaldet downloads.php i rodmappen i vores applikation og tilføj denne kode i den:

downloads.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>

Nu på denne side er filoplysningerne fra databasen angivet hver sammen med dens størrelse i KB og antal downloads. Der er også en downloadknap ved hver fil. Hvad der er tilbage nu er koden, der faktisk downloader filen fra vores uploads-mappe. Lad os skrive koden med det samme.

Åbn filesLogic.php igen og tilføj denne kode i slutningen af ​​filen:

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;
    }

}

Da vi listede filerne, havde hver downloadknap (eller rettere downloadlink) en parameter kaldet file_id knyttet til sig. Så når du klikker på download-linket til en fil, sendes filens id til siden filesLogic.php og gribes af dette stykke kode, vi lige har tilføjet nu.

Koden henter derefter den pågældende filinformation fra databasen ved hjælp af parameteren file_id og gemmer derefter filoplysningerne i en variabel kaldet $file. Ved at bruge PHP's file_exists()-metode med den fulde sti til vores fil som argument kontrollerer vi, at filen faktisk findes i vores uploads-mappe. Derefter fortsætter vi med at sætte nogle overskrifter og til sidst svarer vi med filen til brugeren ved hjælp af readFile()-funktionen i PHP.

Når filen er downloadet, opdaterer vi antallet af downloads for den pågældende fil i databasen.

Konklusion

Det handler om det med fil upload og download. Du kan tilpasse den yderligere til at bygge seje PHP-applikationer. Mange tak fordi du følger med. Fortæl mig, hvad du synes om denne artikel i kommentarfeltet nedenfor, hvis du vil.

God fornøjelse!


  1. Hvordan kan jeg slette en ikke-nul-begrænsning i Oracle, når jeg ikke kender navnet på begrænsningen?

  2. Apache Spark ODBC-driver

  3. Sådan slutter du dig til MySQL og Postgres i en live materialiseret visning

  4. Hvorfor er IS NOT NULL falsk, når du tjekker en rækketype?