การทำ Force download ด้วย PHP นั้น ไม่ไช่เรื่องใหม่อะไร มีการเขียนโค้ดด้วยลักษณะนี้อยู่บ่อยๆ แต่ผมต้องนำมาแปะเป็นทริคเล็กน้อยกันตัวเองลืมครับ ประโยชน์ของมันคือในกรณีที่เราไม่สามารถเข้าไปจัดการ Apache config ได้เราสามารถใช้วิธีนี้แทนได้
/**
* DOWNLOAD
*
* @author PHONGTHORN KUMKANKAEW
* @version 1.0.0
* @since 17/2/2015
*
*/
if(isset($_GET['file']) && !empty($_GET['file']))
{
$file_name = 'download/' . $_GET['file'];
if(is_file($file_name))
{
if(ini_get('zlib.output_compression'))
{
ini_set('zlib.output_compression', 'Off');
}
switch(strtolower(substr(strrchr($file_name, '.'), 1)))
{
case 'pdf': $mime = 'application/pdf'; break;
case 'zip': $mime = 'application/zip'; break;
case 'jpeg':
case 'jpg': $mime = 'image/jpg'; break;
default: $mime = 'application/force-download';
}
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate ('D, d M Y H:i:s', filemtime ($file_name)) . ' GMT');
header('Cache-Control: private',false);
header('Content-Type: ' . $mime);
header('Content-Disposition: attachment; filename="' . basename($file_name) . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file_name));
header('Connection: close');
readfile($file_name);
exit();
}
}
จากตัวอย่างจะสร้างไฟล์ PHP ชื่อ download.php จากนั้น get ค่าชื่อไฟล์ที่เราต้องการโหลดจากนั้น ไฟล์ download.php จะสั่งให้ browser ทำการโหลดไฟล์จาก Server ของเรา

ความคิดเห็น
แสดงความคิดเห็น