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> </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.
Download Source Code
Aplikasi Upload File (8.4 KiB)


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