Pada artikel sebelumnya dengan judul yang hampir sama, saya telah membahas bagaimana cara membuat script upload dan download file yang dibatasi hak aksesnya hanya pada user tertentu. File tersebut tidak diupload dalam folder, melainkan ke dalam database.
Sedangkan pada artikel kali ini, saya akan mencoba memaparkan secara
keseluruhan bagaimana ide membuat script PHP untuk upload file ke dalam
folder, disertai dengan script untuk downloadnya.
Untuk keperluan pembuatan script ini, kita butuh sebuah database untuk menyimpan properti dari file yang diupload.
1.
CREATE
TABLE
upload (
2.
id
int
(11) auto_increment,
3.
name
varchar
(30),
4.
type
varchar
(30),
5.
size
int
(11),
6.
PRIMARY
KEY
(id)
7.
)
Langkah pertama dalam pembuatannya adalah, kita siapkan terlebih dahulu form untuk upload filenya.
form.html
1.
<
form
enctype
=
"multipart/form-data"
action
=
"upload.php"
method
=
"POST"
>
2.
<
input
type
=
"hidden"
name
=
"MAX_FILE_SIZE"
value
=
"3000000"
/>
3.
Pilih File: <
input
name
=
"userfile"
type
=
"file"
/>
4.
<
input
type
=
"submit"
value
=
"Upload"
/>
5.
form
>
Form di atas, misalkan kita batasi size maksimum file yang diupload adalah 3MB.
Hasil dari form di atas adalah seperti pada gambar di bawah ini
Selanjutnya, kita buat script upload.php nya. Sebelumnya, misalkan
kita asumsikan file yang diupload nantinya kita taruh ke dalam folder
yang namanya ‘data’.
upload.php
01.
02.
03.
// setting nama folder tempat upload
04.
$uploaddir
=
'data/'
;
05.
06.
// membaca nama file yang diupload
07.
$fileName
=
$_FILES
[
'userfile'
][
'name'
];
08.
09.
// nama file temporary yang akan disimpan di server
10.
$tmpName
=
$_FILES
[
'userfile'
][
'tmp_name'
];
11.
12.
// membaca ukuran file yang diupload
13.
$fileSize
=
$_FILES
[
'userfile'
][
'size'
];
14.
15.
// membaca jenis file yang diupload
16.
$fileType
=
$_FILES
[
'userfile'
][
'type'
];
17.
18.
// koneksi ke mysql
19.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
20.
mysql_select_db(
'dbname'
);
21.
22.
// menyimpan properti atau informasi file ke tabel upload dalam db
23.
// dengan terlebih dahulu mengecek ada tidaknya nama file dalam tabel
24.
25.
$query
=
"SELECT count(*) as jum FROM upload WHERE name = '$fileName'"
;
26.
$hasil
= mysql_query(
$query
);
27.
$data
= mysql_fetch_array(
$hasil
);
28.
29.
if
(
$data
[
'jum'
] > 0)
30.
{
31.
$query
=
"UPDATE upload SET size = '$fileSize' WHERE name = '$fileName'"
;
32.
}
33.
else
$query
=
"INSERT INTO upload (name, size, type) VALUES ('$fileName', '$fileSize', '$fileType')"
;
34.
35.
mysql_query(
$query
);
36.
37.
// menggabungkan nama folder dan nama file
38.
$uploadfile
=
$uploaddir
.
$fileName
;
39.
40.
// proses upload file ke folder 'data'
41.
if
(move_uploaded_file(
$_FILES
[
'userfile'
][
'tmp_name'
],
$uploadfile
)) {
42.
echo
"File telah diupload"
;
43.
}
else
{
44.
echo
"File gagal diupload"
;
45.
}
46.
47.
?>
Perhatikan script di atas. Dalam script di atas terdapat antisipasi
seandainya file yang diupload memiliki nama yang sama. Proses uploadnya
sendiri tidak ada masalah, karena begitu nama file yang diupload sudah
ada, maka secara otomatis akan mereplace file yang lama.
Namun, hal ini akan menjadi kendala di database. Bila tidak
diantisipasi, maka bisa jadi terdapat dua atau lebih data nama file yang
sama. Oleh karena itu sebelum entri informasi file yang diupload ke
database perlu ada pengecekan terlebih dahulu, ada tidaknya nama file
tersebut dalam database. Jika sudah ada, maka yang terjadi adalah proses
update informasi saja, khususnya size dari file tersebut.
Setelah informasi file yang akan diupload disimpan dalam database,
barulah file tersebut diupload ke folder ‘data’ menggunakan perintah move_uploaded_file();
Oya, jangan lupa sebelum Anda mengupload file, folder ‘data’ harus
telah dibuat. Folder ini letaknya selevel dengan script uploadnya.
Selanjutnya kita buat script untuk menampilkan daftar file yang telah
berhasil diupload. Konsepnya hanyalah membaca informasi file yang ada
dalam database.
list.php
01.
02.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
03.
mysql_select_db(
'dbname'
);
04.
05.
$query
=
"SELECT * FROM upload"
;
06.
$hasil
= mysql_query(
$query
);
07.
08.
while
(
$data
= mysql_fetch_array(
$hasil
))
09.
{
10.
echo
"']."'
>".
$data
[
'name'
].
"
("
.
$data
[
'size'
].
" bytes) [ ']."'
>
Delete
]
";
11.
}
12.
13.
?>
Dalam list file di atas, informasi yang ditampilkan adalah nama file
dan sizenya. Selain itu pada nama file tersedia link untuk download dan
tersedia juga link untuk menghapus filenya. Untuk proses download dan
hapus ini menggunakan nomor id dari file sebagai acuannya.
Berikut ini tampilan hasil dari script list.php dengan 3 buah file yang telah berhasil diupload
Trus… bagaimana membuat script untuk downloadnya? OK.. ini dia scriptnya
download.php
01.
02.
03.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
04.
mysql_select_db(
'dbname'
);
05.
06.
// membaca id file dari link
07.
$id
=
$_GET
[
'id'
];
08.
09.
// membaca informasi file dari tabel berdasarkan id nya
10.
$query
=
"SELECT * FROM upload WHERE id = '$id'"
;
11.
$hasil
= mysql_query(
$query
);
12.
$data
= mysql_fetch_array(
$hasil
);
13.
14.
// header yang menunjukkan nama file yang akan didownload
15.
header(
"Content-Disposition: attachment; filename="
.
$data
[
'name'
]);
16.
17.
// header yang menunjukkan ukuran file yang akan didownload
18.
header(
"Content-length: "
.
$data
[
'size'
]);
19.
20.
// header yang menunjukkan jenis file yang akan didownload
21.
header(
"Content-type: "
.
$data
[
'type'
]);
22.
23.
// proses membaca isi file yang akan didownload dari folder 'data'
24.
$fp
=
fopen
(
"data/"
.
$data
[
'name'
],
'r'
);
25.
$content
=
fread
(
$fp
,
filesize
(
'data/'
.
$data
[
'name'
]));
26.
fclose(
$fp
);
27.
28.
// menampilkan isi file yang akan didownload
29.
echo
$content
;
30.
31.
exit
;
32.
?>
Supaya memberikan proses download begitu file diklik pada list.php,
maka perlu dibuat header file sebagaimana script di atas. Bila tidak
diberikan header berisi informasi file seperti di atas, maka isi file
akan tampil di halaman web.
Berikut ini tampilan yang muncul setelah salah satu file diklik untuk didownload
Terakhir, bagaimana dengan script untuk menghapus file? Konsepnya
adalah terjadi 2 proses penghapusan, yaitu menghapus informasi file yang
ada pada tabel database, dan menghapus file dalam folder ‘data’. Untuk
menghapus file yang telah diupload ke folder, digunakan perintah unlink();
hapus.php
01.
02.
03.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
04.
mysql_select_db(
'dbname'
);
05.
06.
// membaca id file yang akan dihapus
07.
$id
=
$_GET
[
'id'
];
08.
09.
// membaca nama file yang akan dihapus berdasarkan id
10.
$query
=
"SELECT * FROM upload WHERE id = '$id'"
;
11.
$hasil
= mysql_query(
$query
);
12.
$data
= mysql_fetch_array(
$hasil
);
13.
$namaFile
=
$data
[
'name'
];
14.
15.
// query untuk menghapus informasi file berdasarkan id
16.
$query
=
"DELETE FROM upload WHERE id = $id"
;
17.
mysql_query(
$query
);
18.
19.
// menghapus file dalam folder sesuai namanya
20.
unlink(
"data/"
.
$namaFile
);
21.
echo
"File telah dihapus"
;
22.
23.
?>
Perhatikan script hapus.php di atas! Dalam script tersebut terdapat
proses membaca nama file yang akan dihapus berdasarkan id nya. Nama file
ini nantinya akan dijadikan acuan dalam proses menghapus file dalam
folder menggunakan unlink()
.
Nah.. gampang bukan membuatnya? Mudah-mudahan artikel ini berguna buat pengunjung setia blog ini.
Download Script
EmoticonEmoticon