Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara mengunggah dan mengunduh file PHP dan MySQL

Tutorial ini menunjukkan bagaimana Anda dapat mengupload file dari berbagai format termasuk .zip, .pdf, .docx, .ppt, serta file gambar melalui formulir menggunakan PHP untuk disimpan dalam folder di server kami.

Kami juga akan mencatat nama file yang diunggah dan info terkait seperti nama file, ukuran, dan jumlah unduhan dalam tabel database.

Buat folder project PHP baru dan beri nama file-upload-download. Buat subfolder di dalam folder ini yang disebut unggahan (ini adalah tempat file yang kami unggah akan disimpan),  dan file bernama index.php.

index.php adalah tempat kita akan membuat form upload file kita. Buka dan masukkan kode ini di dalamnya:

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>

Ini adalah formulir yang sangat sederhana yang hanya membutuhkan bidang input untuk file kita dan tombol unggah.

Di bagian kepala, kami menautkan ke file style.css kami untuk memberikan beberapa gaya ke formulir kami. Buat file itu di root aplikasi kita dan tambahkan kode CSS ini ke dalamnya:

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

Di bagian atas index.php, kami menyertakan file filesLogic.php. Ini adalah file yang berisi semua logika menerima file yang kami kirimkan dan menyimpannya ke folder unggahan serta menyimpan informasi file dalam database. Mari buat file ini sekarang.

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

Di bagian atas file ini, kami menghubungkan ke database tetapi kami belum membuatnya. Ayo lakukan sekarang.

Buat database baru yang disebut manajemen file. Di bawah database ini, buat tabel bernama file dan berikan kolom berikut.

  • id - INT
  • nama - VARCHAR(255) 
  • ukuran - INT
  • unduh

Sekarang buka file index.php di browser Anda. Untuk saya, saya akan membuka http://localhost/file-upload-download/download.php.

Klik pada bidang input file dan pilih file apa saja dari mesin Anda untuk diunggah.

Catatan:Bergantung pada konfigurasi php Anda, file Anda mungkin gagal diunggah jika ukurannya melebihi nilai upload_max_filesize yang ditetapkan dalam file php.ini Anda. Anda selalu dapat mengonfigurasi info ini di file php.ini Anda. Tingkatkan nilai post_max_size dan upload_max_filesize .

Setelah memilih file Anda, Anda dapat mengklik tombol unggah. Jika semuanya berjalan dengan baik, file Anda akan diunggah ke folder unggahan di proyek Anda dan catatan baru akan dibuat di tabel file di database yang berisi nama file, ukuran, dan jumlah unduhan.

Sekarang file kami telah diunggah. Anda dapat memeriksa folder unggahan dan tabel database untuk mengonfirmasi bahwa itu berhasil. Mari kita tampilkan sehingga pengguna dapat melihatnya dan mengkliknya untuk mengunduhnya. Pertama, kita perlu mengambil info file dari database.

Buka filesLogic.php dan tambahkan 3 baris kode ini tepat di bawah baris tempat kita terhubung ke database:

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

Ini memilih semua informasi file dari database dan menetapkannya ke variabel array yang disebut $files.

Sekarang buat file bernama downloads.php di folder root aplikasi kita dan tambahkan kode ini di dalamnya:

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>

Sekarang di halaman ini, informasi file dari database dicantumkan masing-masing beserta ukurannya dalam KB dan jumlah unduhan. Ada juga tombol unduh untuk setiap file. Yang tersisa sekarang adalah kode yang sebenarnya mengunduh file dari folder unggahan kami. Ayo tulis kodenya segera.

Buka filesLogic.php lagi dan tambahkan kode ini di akhir file:

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

}

Saat kami membuat daftar file, setiap tombol unduh (atau lebih tepatnya, tautan unduhan) memiliki parameter bernama file_id yang dilampirkan padanya. Jadi ketika Anda mengklik tautan unduhan suatu file, id file itu dikirim ke halaman filesLogic.php dan diambil oleh potongan kode yang baru saja kita tambahkan sekarang.

Kode kemudian mengambil info file tertentu dari database menggunakan parameter file_id dan kemudian menyimpan info file dalam variabel yang disebut $file. Menggunakan metode file_exists() PHP dengan path lengkap ke file kami sebagai argumen, kami memeriksa apakah file tersebut benar-benar ada di folder unggahan kami. Kemudian kami melanjutkan untuk mengatur beberapa header dan akhirnya merespons dengan file ke pengguna menggunakan fungsi readFile() di PHP.

Setelah file diunduh, kami memperbarui jumlah unduhan untuk file tertentu dalam database.

Kesimpulan

Itu saja dengan mengunggah dan mengunduh file. Anda dapat menyesuaikannya lebih lanjut untuk membuat aplikasi PHP yang keren. Terima kasih banyak untuk mengikuti. Beri tahu saya pendapat Anda tentang artikel ini di bagian komentar di bawah, jika Anda berkenan.

Selamat bersenang-senang!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panduan Merancang Database Untuk Task Manager Di MySQL

  2. PHP PDO vs mysql_connect biasa

  3. Bahasa Kueri Doktrin mendapatkan Maks/Baris Terbaru Per Grup

  4. Cara Menginstal WordPress:Perangkat Lunak Server

  5. Bagaimana saya bisa memanipulasi relevansi pencarian teks lengkap MySQL untuk membuat satu bidang lebih 'berharga' daripada yang lain?