Contoh kasus:
Kita ingin menyediakan file pdf untuk di-download oleh user dan lokasi file tidak boleh diketahui oleh user. User hanya bisa men-download file dengan cara mengklik link. Bahasa yang digunakan adalah PHP.
Analisa:
Kita bisa membuat link yang ditujukan ke file yang akan di-download. Contoh kode seperti di bawah ini:
Code:
Apa yang terjadi kalau link seperti ini diklik? Hasilnya tergantung dengan browser yang bersangkutan. Bila plug-in untuk pdf reader terinstal, maka browser akan berbaik hati membuka file tersebut. Bagaimana bila tidak ada plug-in pdf reader? Maka akan muncul kotak dialog untuk men-download file tersebut.
Satu masalah selesai bila user tidak memiliki plug-in pdf reader. Tetapi bagaimana dengan user yang punya? Tentu masalahnya tidak terselesaikan. Masalah lain muncul yaitu user mengetahui lokasi file tersebut, sehingga memungkinkan user melakukan direct download (men-download file langsung, dengan mengetikkan lokasinya di browser, tanpa melalui halaman download yang kita sediakan).
Penyelesaian:
Dibutuhkan sedikit programming (PHP) untuk menyelesaikan masalah ini.
Berikut ini kode untuk mencegah direct download:
$task = $_REQUEST['task'];
switch($task) {
case ‘download’:
// lokasi file
$file_path = ‘dl/myebook.pdf’;
// fungsi untuk mengambil nama file tanpa path
$file_name = basename($file_path);
// ambil ukuran file
$fsize = filesize($file_path);
// set headers
header(“Pragma: public”);
header(“Expires: 0″);
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0″);
header(“Cache-Control: public”);
header(“Content-Description: File Transfer”);
header(“Content-Type: application/pdf”);
header(‘Content-Disposition: attachment; filename=”‘ . $file_name . ‘”‘);
header(“Content-Transfer-Encoding: binary”);
header(“Content-Length: ” . $fsize);
// mulai men-download dari sini
$file = @fopen($file_path,”rb”);
if ($file) {
while(!feof($file)) {
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}
break;
default:
break;
}
?>
Yang perlu diperhatikan disini adalah pada baris:
header(‘Content-Disposition: attachment; filename=”myebook.pdf”‘);
Baris inilah yang memerintahkan browser untuk memunculkan kotak dialog download file myebook.pdf walaupun sudah terdapat plug-in pdf reader pada browser.
Untuk mengganti jenis file (exe atau zip), kita hanya perlu mengubah Content-Type.
Berikut adalah daftarnya:
// archives
application/zip
// documents
application/pdf
application/msword
application/vnd.ms-excel
application/vnd.ms-powerpoint
// executables
application/octet-stream
// images
image/gif
image/png
image/jpeg
image/jpeg
// audio
audio/mpeg
audio/x-wav
// video
video/mpeg
video/mpeg
video/mpeg
video/quicktime
video/x-msvideo
Untuk fungsi mendownload bisa dilihat dari komentar pada kode diatas (setelah baris//mulai men-download dari sini).
Sebenarnya, apa sih tujuan mencegah direct download? Tujuannya adalah untuk mengecek berapa kali sebuah file di-download.
Bila user diperbolehkan men-download langsung, tentu akan sulit melacak berapa kali file tersebut di-download.
sumber : http://www.bletchley-park.com
0 komentar:
Posting Komentar