ข้ามไปที่เนื้อหาหลัก

การเขียน Force download ด้วย PHP


การทำ 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 ของเรา

โพสต์ยอดนิยมจากบล็อกนี้

มาเข้าใจ และใช้ Datatable ดึงข้อมูลแบบ Server-side ด้วย PHP, MySQL กันเถอะ

มีช่วงหนึงผมเคยนำ datatable มาพัฒนาในงานแต่เกิดปัญหาเนื่องจากมีข้อมูลขนาดใหญ่ ทำให้เกิดการโหลดในครั้งแรกที่โหลดหน้าเพจนั้นๆ เนื่องจากผมใช้ Ajax ในการโหลดข้อมูลทั้งหมดมาในครั้งเดียวด้วยจำนวนข้อมูล 1000 ขึ้น ซึ่งตอนนั้นผมคิดว่าการทำ preload น่าจะช่วยได้ แต่ว่าถ้า user เกิดเผลอไปกด refesh หรือแก้ไขข้อมูลเวลากลับมาที่หน้าข้อมูลก็ต้องโหลดใหม่อีก ทำให้ผมเลิกใช้ datatable ไปเลย เพราะคิดว่ามันคงไม่เหมาะ

แต่ในความจริงแล้ว datatable ก็ได้มีสิ่งที่มาแก้ในจุดนั้นได้ ซึ่งเรียกว่า server-side โดยการที่อนุญาตให้เรา query ข้อมูลออกมาก่อนแล้วส่งมาให้ datatable อ่านข้อมูลในจำนวนที่น้อยลง หลักการก็เหมือนๆ กับบทความการทำสร้าง XML จากข้อมูลขนาดใหญ่นั่นแหละครับ แต่มีเงื่อนไขเพียงแต่ว่า ต้อง Filter และส่งข้อมูลออกมาในรูปแบบที่ตรงตามหลักของ datatable เท่านั้น ( บางครั้งเวลาเข้าไปอ่าน Document หรือดู Example จะงงๆ ว่าอะไรเยอะแยะ ) โดยวันนี้จะมาแนะนำการใช้งานแบบง่ายๆ กันเลย :D

ปัญหาที่เกิดจากการใช้งาน Facebook PHP SDK ในการทำ Facebook Login

จากบทความก่อนๆ ที่ผมเคยแนะนำการการใช้งาน Facebook PHP SDK ในการทำ Facebook Login สำหรับการแก้ไขปัญหา Chrome ไม่รองรับ Facebook Javascript SDK ซึ่งสามารถใช้งานได้ปกติ โดยการสับขาหลอกของตัวผมเอง หลายๆ ท่านที่เข้ามาอาจจะลองก๊อปโค้ดไปแปะ แล้วปรากฎว่ามันไม่เห็นจะทำงานได้จริง

เนื่องจากปัญหาที่เกิดขึ้นจาก error นี้
"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request"


การติดตั้ง Google Analytics ด้วย Google Tag Manager

สำหรับสายงานโปรแกรมเมอร์นั้น ไม่ค่อยมีปัญหามากนักเวลาที่จะต้องแก้ไข หรือเปลี่ยน UA โค๊ดของ Analytics เพราะสามารถทำได้เอง แต่ก็นะ ถึงแม้ว่าจะง่ายแต่ในเวลาที่ไม่สะดวกจริงๆ แถมงานที่ทำส่วนใหญ่ต้องอัพผ่าน Git การจะทำอะไรแบบนั้นก็ไม่ไช่เรื่องง่ายอีกต่อไป