ถามโค้ด php สำหรับดาวน์โหลดไฟล์ครับ

คือผมมีโจทย์ว่า จะนับจำนวนการดาวน์โหลดไฟล์ด้วย php
ตอนนี้ขั้นตอนการนับทำเรียบร้อยแล้ว แต่ตอนดาวน์โหลดยังไม่สำเร็จ

คือ บังคับไม่ให้แสดงผลในเบราเซอร์ แต่ให้ส่งออกไฟล์สำหรับดาวน์โหลดได้เลย
(เช่น ถ้าเปิด .doc ใน IE มันก็จะแสดงในหน้า IE เลย ผมอยากให้มันถามว่าดาวน์โหลดรึป่าว ?)

มีฟังก์ชั่นไหน แนะนำบ้างมั้ยครับ

sirn's picture

บังคับส่ง header("Content-Type: application/octet-stream") เอาได้มั๊ยครับ

search หาฟังก์ชั่นตามที่คุณ sirn บอก

ได้คำสั่งมาชุดนึง

$file = "yourfile.doc";
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename=' . basename($file));
readfile($file);

ตอนนี้มันดาวน์โหลดแล้วครับ
แต่อยากรบกวนช่วยอธิบายได้มั้ยครับว่า แต่ละบรรทัดมันใช้ทำอะไรบ้าง :)

sugree's picture

ปกติผมใส่แค่ content-type content-length และ content-disposition

  • content-type บอกชนิดของไฟล์ browser จะได้เปิดถูก
  • content-length บอกขนาดของไฟล์ เอาไว้แสดง progressbar ไม่ใส่ก็ได้
  • content-disposition เอาไว้บอกชื่อไฟล์ เวลากด save as จะได้ไม่เป็น download.php มี 2 โหมด inline กับ attachment ถ้าเป็น inline มันอาจจะโผล่ใน browser แต่ถ้า attachment จะเปิดด้วยโปรแกรมข้างนอกหรือ save as

ขอบคุณครับ :)

ผมเขียน code การ download คือต้องการ download จาก db นะครับ แต่ผมเขียน code การ download ไม่ถูกนะครับ ช่วยหน่อยนะครับ ขอบคุณล่วงหน้านะครับ

sugree's picture

ต้องมีรายละเอียดมากกว่านี้ครับ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น