Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie man Dateien hoch- und herunterlädt PHP und MySQL

Dieses Tutorial zeigt, wie Sie Dateien in verschiedenen Formaten hochladen können, einschließlich .zip, .pdf, .docx, .ppt, sowie Bilddateien über ein Formular mit PHP, um sie in einem Ordner auf unserem Server zu speichern.

Wir werden auch den Namen der hochgeladenen Dateien und zugehörige Informationen wie den Dateinamen, die Größe und die Anzahl der Downloads in einer Datenbanktabelle aufzeichnen.

Erstellen Sie einen neuen PHP-Projektordner und nennen Sie ihn Datei-Upload-Download. Erstellen Sie in diesem Ordner einen Unterordner namens uploads (dort werden unsere hochgeladenen Dateien gespeichert) und eine Datei namens index.php.

In index.php erstellen wir unser Datei-Upload-Formular. Öffnen Sie es und fügen Sie diesen Code ein:

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 ist ein sehr einfaches Formular, das nur das Eingabefeld für unsere Datei und eine Schaltfläche zum Hochladen enthält.

Im Head-Bereich verlinken wir auf unsere style.css-Datei, um unserem Formular ein gewisses Styling zu verleihen. Erstellen Sie diese Datei im Stammverzeichnis unserer Anwendung und fügen Sie diesen CSS-Code hinzu:

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

Oben in index.php fügen wir die Datei filesLogic.php ein. Dies ist die Datei, die die gesamte Logik zum Empfangen unserer eingereichten Datei und zum Speichern im Upload-Ordner sowie zum Speichern der Dateiinformationen in der Datenbank enthält. Lassen Sie uns diese Datei jetzt erstellen.

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

Oben in dieser Datei stellen wir eine Verbindung zu einer Datenbank her, haben sie aber noch nicht erstellt. Lass uns das jetzt tun.

Erstellen Sie eine neue Datenbank namens Dateiverwaltung. Erstellen Sie unter dieser Datenbank eine Tabelle mit dem Namen files und geben Sie ihr die folgenden Felder.

  • id - INT
  • Name – VARCHAR(255) 
  • Größe - INT
  • Downloads

Öffnen Sie nun die Datei index.php in Ihrem Browser. Für mich gehe ich zu http://localhost/file-upload-download/download.php.

Klicken Sie auf das Dateieingabefeld und wählen Sie eine beliebige Datei von Ihrem Computer zum Hochladen aus.

Hinweis:Abhängig von Ihrer PHP-Konfiguration kann es vorkommen, dass Ihre Datei nicht hochgeladen werden kann, wenn die Größe den Wert upload_max_filesize überschreitet, der in Ihrer php.ini-Datei festgelegt ist. Sie können diese Informationen jederzeit in Ihrer php.ini-Datei konfigurieren. Erhöhen Sie die Werte von  post_max_size und upload_max_filesize .

Nachdem Sie Ihre Datei ausgewählt haben, können Sie auf die Schaltfläche zum Hochladen klicken. Wenn alles gut geht, wird Ihre Datei in den Upload-Ordner Ihres Projekts hochgeladen und in der Dateitabelle in der Datenbank wird ein neuer Datensatz erstellt, der den Dateinamen, die Größe und die Anzahl der Downloads enthält.

Jetzt wurde unsere Datei hochgeladen. Sie können Ihren Upload-Ordner und die Datenbanktabelle überprüfen, um zu bestätigen, dass es erfolgreich war. Lassen Sie uns es anzeigen, damit der Benutzer es anzeigen und darauf klicken kann, um es herunterzuladen. Zuerst müssen wir die Dateiinformationen aus der Datenbank abrufen.

Öffnen Sie filesLogic.php und fügen Sie diese 3 Codezeilen direkt unter der Zeile hinzu, in der wir uns mit der Datenbank verbinden:

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

Dies wählt alle Dateiinformationen aus der Datenbank aus und setzt sie auf eine Array-Variable namens $files.

Erstellen Sie nun eine Datei namens downloads.php im Stammordner unserer Anwendung und fügen Sie diesen Code darin ein:

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>

Auf dieser Seite werden nun die Dateiinformationen aus der Datenbank jeweils zusammen mit ihrer Größe in KB und der Anzahl der Downloads aufgelistet. Es gibt auch einen Download-Button für jede Datei. Was jetzt noch übrig bleibt, ist der Code, der die Datei tatsächlich aus unserem Uploads-Ordner herunterlädt. Lassen Sie uns gleich den Code schreiben.

Öffnen Sie filesLogic.php erneut und fügen Sie diesen Code am Ende der Datei hinzu:

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

}

Als wir die Dateien aufgelistet haben, war jeder Download-Schaltfläche (oder vielmehr jedem Download-Link) ein Parameter namens file_id angehängt. Wenn Sie also auf den Download-Link einer Datei klicken, wird die ID dieser Datei an die Seite filesLogic.php gesendet und von diesem Codestück erfasst, das wir gerade hinzugefügt haben.

Der Code ruft dann diese bestimmten Dateiinformationen mithilfe des file_id-Parameters aus der Datenbank ab und speichert die Dateiinformationen dann in einer Variablen namens $file. Mit der file_exists()-Methode von PHP mit dem vollständigen Pfad zu unserer Datei als Argument prüfen wir, ob die Datei tatsächlich in unserem Upload-Ordner vorhanden ist. Dann setzen wir einige Header und antworten schließlich mit der Datei an den Benutzer, indem wir die Funktion readFile() in PHP verwenden.

Nachdem die Datei heruntergeladen wurde, aktualisieren wir die Anzahl der Downloads für diese bestimmte Datei in der Datenbank.

Schlussfolgerung

Das war's mit Datei-Upload und -Download. Sie können es weiter anpassen, um coole PHP-Anwendungen zu erstellen. Vielen Dank fürs Folgen. Teilen Sie mir Ihre Meinung zu diesem Artikel im Kommentarbereich unten mit, wenn Sie möchten.

Viel Spaß!