Skip to content

Upload File Dengan PHP dan MySQL, Bag. 3

Boleh dibilang menyimpan file atau gambar ke database itu memang praktis. Pengelolaannya pun lebih mudah, apalagi jika jumlah filenya cukup banyak. Akan tetapi ada hal yang harus dikorbankan, yaitu kinerja server.

Kenapa demikian?

Pertama, perlu akses ke database setiap kali ingin membuka file tersebut.

Jika file yang dibuka cuma satu, mungkin tidak terlalu bermasalah. Namun jika dalam satu halaman web terdapat puluhan gambar, yang masing-masing harus diakses dari database tentu akan menimbulkan persoalan tersendiri.

Bisa Anda bayangkan bagaimana sibuknya server database menangani hal tersebut.

Kedua, ukuran file.

Pada umumnya file gambar itu berukuran cukup besar. Tentu diperlukan database yang besar untuk bisa menampung file-file tersebut. Lalu bagaimana solusinya?

Salah satu cara untuk mengatasi permasalahan tersebut adalah dengan menggabungkan penyimpanan pada direktori dan database. Informasi yang berkaitan dengan file seperti nama file, ukuran, dan sebagainya disimpan di database, sedangkan filenya sendiri disimpan pada direktori.

Mengapa database tetap diperlukan?

Pada kasus ini database hanya dipergunakan untuk keperluan pengelolaan saja. Tentu akan jauh lebih cepat mengakses informasi file yang sudah disimpan di database daripada harus memeriksa file pada direktori satu persatu.

Kita memerlukan satu buah tabel untuk menyimpan informasi file dengan struktur sebagai berikut:

CREATE TABLE upload2 (
   id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
   deskripsi VARCHAR(200) NULL,
   filename VARCHAR(200) NOT NULL,
   filesize BIGINT NULL,
   filetype VARCHAR(200) NULL,
   location VARCHAR(200) NULL,
   PRIMARY KEY(id)
);

Koneksi Database

Nama File: koneksi.php

<?php
$error_message = "";

if (! @mysql_connect("localhost", "root", ""))
{
   $error_message = "Koneksi database gagal!";
}

@mysql_select_db("foto");
?>

Upload File

Kode untuk mengupload file hampir sama dengan pembahasan sebelumnya. Hanya disini data biner tidak disimpan di database. Semua file akan disimpan pada direktori data yang terletak pada DOCUMENT_ROOT.

Agar lebih jelas, berikut ini adalah struktur direktorinya:

  • DOCUMENT_ROOT
    • /index.php
    • /upload.php
    • /koneksi.php
    • /data/

Nama File: upload.php

<?php
include ("koneksi.php");

if ($_POST)
{
   $tmp_file = $_FILES['imagefile']['tmp_name'];
   $filetype = $_FILES['imagefile']['type'];
   $filesize = $_FILES['imagefile']['size'];
   $filename = $_FILES['imagefile']['name'];
   $path = pathinfo($_SERVER['PHP_SELF']);
   $destination = $path['dirname'] . '/data/' . $filename;
   $deskripsi = $_POST['deskripsi'];

   if (move_uploaded_file($tmp_file, $_SERVER['DOCUMENT_ROOT'] . $destination))
   {
      $result = mysql_query ("insert into upload2 (deskripsi, location,
                filetype, filename, filesize)
                values ('" . $deskripsi  . "','" . $destination . "','" . $filetype .
                "','" . $filename . "'," . $filesize . ")");

      if ($result) header('Location: index.php');
   }
   else echo "Upload gagal";
}
?>

<html>
<head>
   <title>Form Upload File</title>
</head>
<body>
<form enctype="multipart/form-data" method="post">
<table border="1">
   <tr>
      <td>File</td>
      <td><input type="file" name="imagefile"></td>
   </tr>
   <tr>
      <td>Deskripsi</td>
      <td><input type="text" name="deskripsi"></td>
   </tr>
   <tr>
      <td>&nbsp;</td>
      <td><input type="submit" value="Upload"></td>
   </tr>
</table>
</form>
</body>
</html>

Preview File

Berhubung file disimpan pada direktori, maka kita bisa langsung mengakses lokasi file tersebut. Tidak perlu melakukan konversi data biner seperti sebelumnya.

Nama File: index.php

<?php
include ("koneksi.php");
$data = @mysql_query ("select * from upload2");
?>

<html>
<head>
   <title>Daftar File</title>
</head>

<body>
<h2>Daftar File</h2>
<table border="1">
   <tr>
      <th>ID</th>
      <th>Nama file</th>
      <th>Tipe</th>
      <th>Ukuran</th>
      <th>Deskripsi</th>
      <th>Preview</th>
   </tr>
   <?php while ($row = @mysql_fetch_assoc($data)) { ?>
   <tr>
      <td><?=$row['id'] ?></td>
      <td><?=$row['filename'] ?></td>
      <td><?=$row['filetype'] ?></td>
      <td><?=$row['filesize'] ?></td>
      <td><?=$row['deskripsi'] ?></td>
      <td><a href="<?=$row['location'] ?>">Preview</a></td>
   </tr>
   <?php } ?>
</table>
<p><a href="upload.php">Upload File</a></p>
</body>
</html>

Selamat mencoba.

Source code bisa didownload di sini.

Tulisan Terkait:

Bagaimana Komentar Anda?

Monggo kalau Anda mau mengomentari tulisan di atas! Bertanya atau mengkritik juga boleh, tapi jangan terlalu menyakitkan :).

  • Felik Admaja | August 3rd, 2009 jam 9:03 am

    Artikelnya bagus banget dan mudah untuk dipelajari. Apakah setiap programer PHP memiliki gaya penulisan yang berbeda-beda? saya baca buku dengan fungsi yang sama, namun syntax nya berbeda. Artikel ini mudah dipelajari dan sangat mendidik

  • jonk java | October 30th, 2009 jam 9:17 am

    saya mau tanya pak. itu kan folder yang digunakan untuk menyimpan file masih dalam web root-nya.
    kalau misalnya kita ingin menyimpannya di luar web-root bisa gak .. ??
    misal kita simpan di drive D:/data .. ??

    Kalau di luar web root nggak bisa diakses lewat web dong

  • Tina | November 6th, 2009 jam 9:31 am

    Upload File Dengan PHP dan MySQL – Bagian 3
    saya udah coba,dankeeee mister :D

  • Adji Darmawan | December 9th, 2009 jam 10:30 am

    mas artikelnya muantabs banget dah, tp pas sy coba menjalankan pada saat proses upload muncul error yang kira2 seperti ini ; Warning: move_uploaded_file(C:/xampp/htdocs/data/1.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\xampp\htdocs\latihan\upload.php on line 14

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move ‘C:\xampp\tmp\php388.tmp’ to ‘C:/xampp/htdocs/data/1.jpg’ in C:\xampp\htdocs\latihan\upload.php on line 14
    Upload gagal

    Kira-kira apanya ya mas ?? :D .
    Sekali Lagi terima kasih atas tutornya

  • Wahyu Wibowo | December 14th, 2009 jam 6:53 am

    Kayaknya itu karena direktorinya beda. Coba dicek lagi.

  • deden | December 21st, 2009 jam 7:25 pm

    mas wahyu …uploadnya gk runing…pas saya coba ada error di line 13 di bagian
    if (move_uploaded_file($tmp_file, $_SERVER['DOCUMENT_ROOT'] . $destination))

    klw bisa jelaskan
    terimakasih mas wahyu…klw bisa kirim ke email saya p4nger4n_06@yahoo.com

    Sudah diperbaiki, silakan didownload sourcenya…

  • budi | December 27th, 2009 jam 12:27 pm

    terimakasih artikelnya…mdh2an bs m’permdh sy dlm bljr php…

  • yuli | March 8th, 2010 jam 11:47 am

    mas wahyu, kalo proses ini di terapkan di joomla gimana dengan hak akses user untuk upload dan downloadnya? tks.

    **Maksudnya gimana ya?

  • jupen | March 16th, 2010 jam 10:35 pm

    Terimakasih bung,,,, sudah membantu

  • vikry | June 3rd, 2010 jam 10:04 am

    wah, artikelnya menarik, ingin tanya nih
    kalo untuk upload bebera file/image gimana mas ?

    sy ada script seperti ini, mohon bantuannya dunk :)

    gimana cara menyelesaikannya ya ?
    terimakasih, atas responya

    ***Sorry, skripnya saya potong. Silakan baca artikel Upload Multiple File Dengan PHP, barangkali bisa membantu.

  • yarin gates | January 12th, 2011 jam 10:32 pm

    matournuwon sanget mas,,,ternyata setelah dipraktekan hasilnya ok,g’ da syntax yg error.

  • yarin gates | January 12th, 2011 jam 10:38 pm

    kalo membuat aplika search angine gimana mas,agr user bsa menemukan file atau articles pd wab yg kt sediakan?

  • Wahyu Wibowo | January 17th, 2011 jam 10:28 am

    @yarin gates, pakai Google Custom Search saja mas, lebih mudah

  • rizki angurah | April 15th, 2011 jam 3:58 pm

    mas, saya sudah mengunakannya, dan berjalan . .namun yg ingin saya tanyakan, kenapa file yg telah kita upload data nya tidak muncul pada index.php(bagian 3)
    databasenya uda saya import d xamppnya mas,,kenapa ya??

  • Wahyu Wibowo | April 18th, 2011 jam 11:08 am

    @rizki, coba dicek file yang diupload masuk atau tidak lewat phpmyadmin

  • ade putra | August 24th, 2011 jam 1:06 pm

    Mas cara bikin navigasii delete nyahhh gimana yaaahh mas……..
    entar kalooo udahhh bosannn kan mau di hapus
    ooh yaahh…
    mas giman yahhh mamfaatin j-query sebagaii penampilgamabar nyahhh

  • ade putra | August 24th, 2011 jam 1:14 pm

    masalah nyahh sekarang mang ngak nampil data nyah masuk kooooo ke database cuma ngak nampil di php nyahhhh.. mohooon penceraaahannn nyahhh yaa mas

  • Agus | October 30th, 2011 jam 12:19 pm

    perasaan tutor ini masih tanggung, (apakah itu sudah online apa masih ofline? )

    terus bagaimana langkah selanjutnya,
    untuk upload file tersbut, saya mengguganakan hosting 000webhost.

Tinggalkan Pesan