Skip to main content
หาคำสั่ง PHP ในการส่งไฟล์ออกมาจากเว็บ โดยไม่ให้เว็บเบราเซอร์แสดงผล โจทย์คือ ถ้าคลิกลิงก์ไฟล์ที่เป็น .doc ใน IE (Windows) มันก็จะเรียกตัวทูลของ MS Word มาแสดงผลซ้อนเข้าไปใน IE ซึ่งผมไม่ต้องการให้มันแสดงผลแบบนั้น แต่อยากให้มันส่งไฟล์ออกมาเลย โดยมีหน้าต่างขึ้นมาถามว่าจะ Open หรือ Save หลังจากที่ถามใน codenone.com และ หาเพิ่มจาก google ได้ความว่าใช้ฟังก์ชั่น header ใน php ในการส่งไฟล์ออกมาดังกล่าว สรุปได้ดังนี้... ---- $file = "yourfile.doc"; header('Content-Type: application/octet-stream'); header('Content-Length: ' . filesize($file)); header('Content-Disposition: attachment; filename=' . basename($file)); readfile($file); ---- และ sugree ได้อธิบายเพิ่มในกระทู้ว่า Content-Type _ บอกชนิดของไฟล์ browser จะได้เปิดถูก Content-Length _ บอกขนาดของไฟล์ เอาไว้แสดง progressbar ไม่ใส่ก็ได้ Content-Disposition _ เอาไว้บอกชื่อไฟล์ เวลากด save as จะได้ไม่เป็น download.php มี 2 โหมด inline กับ attachment, ถ้าเป็น inline มันอาจจะโผล่ใน browser แต่ถ้า attachment จะเปิดด้วยโปรแกรมข้างนอกหรือ save as