การดาวน์โหลดไฟล์+เทคนิคการตั้งชื่อไฟล์เป็นภาษาไทย PHP Code Download File Thai

การดาวน์โหลดไฟล์+เทคนิคการตั้งชื่อไฟล์เป็นภาษาไทย PHP Code Download File Thai

PHP CODE FATHER โปรแกรมช่วยสร้างโค้ด โปรเจ็ค PHP+MySQL+Boostrap ใช้งานง่าย ๆ


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

ปัญหาแรกที่เจอก็คือ ถ้าไฟล์นามสกุล .mp3, .txt, .pdf และอื่น ๆ
เมื่อทำลิงค์ที่ไฟล์นั้นโดยตรง เว็บบราวเซอร์ดันฉลาด เปิดให้เองซะงั้น โดยไม่ขึ้นให้ดาวน์โหลด
เช่น ถ้าเป็นไฟล์เพลง ก็จะเล่นเพลง และถ้าเป็นไฟล์ pdf ก็จะเปิดให้ดูไฟล์นั้น ๆ ไปเลย ซึ่งเราไม่ต้องการแบบนี้
เราต้องการให้คลิกแล้วสามารถดาวน์โหลดได้เลย...........
คิดว่าหลาย  ๆ คนที่เคยทำระบบให้ดาวน์โหลดไฟล์ คงจะได้เจอปัญหานี้กันมาแล้ว
*** โค้ดคำสั่ง ขอเอาไว้สรุปตอนท้ายทีเดียวเลยนะครับ


ปัญหาที่สอง คือ เมื่อดาวน์โหลดไฟล์ได้ตามต้องการโดยที่เว็บบราวเซอร์ไม่เปิดอ่านไฟล์ที่จะให้ดาวน์โหลดเหมื่อนปัญหาแรกได้แล้ว
แต่ชื่อไฟล์ที่ตั้งเอาไว้เอาไว้กลับผิด เพี้ยน หรือไม่ถูกใจเอาซะเลย เช่น ตั้งชื่อไฟล์เป็นรหัสเพลง หรือ รหัสเอกสาร (00002.mp3 หรือ 00001.pdf เป็นต้น)
หรือบางคนอาจจะตั้งชื่อไฟล์เป็นภาษาไทยเก็บไว้ที่เครื่องเซอร์เวอร์เลย แต่ตอนโหลดไฟล์ ก็ยังไม่ถูกต้องตามที่เราต้องการอยู่ดี
ปัญหานี้ผมเองก็เพิ่งเจอมากับตัวเอง หมาด ๆ สด ๆ ร้อน ๆ
หาวิธีอยู่ตั้งนาน จะไปแกะโค้ดที่ไหนก็ไม่มีให้ โค้ดตัวอย่างก็ยังอธิบายได้ไม่เคลียร์
ก็เลยงมเองอยู่ตั้งนาน กว่าจะได้ กว่าจะเจอ ก็เล่นเอาเกือบถอดใจกันเลยทีเดียว

ขออธิบายระบบที่ผมเก็บข้อมูลก่อนละครับนะครับ
ผมออกแบบฐานข้อมูลให้ เก็บไฟล์เพลงไว้เป็นรหัสตามเลขไอดีของแต่ละเพลง
และมีฟิล์ดสำหรับเก็บชื่อเพลงอีกต่างหาก เช่น เพลง ใจสั่งมา ศิลปิน โลโซ และเก็บไฟล์เพลงเป็น song_file_full_00001.mp3

ตอนแรกที่ลองดาวน์โหลดดู จะได้ไฟล์เพลงชื่อ song_file_full_00001.mp3
ซึ่งคงไม่ดีต่อคนโหลดเพลง หรือ ลูกค้าอย่างแน่นอน เพราะต้องไปเปลี่ยนชื่อเพลงเองอีกใช่ไหมครับ

แต่เราต้องการดาวน์โหลดแล้วได้ชื่อเพลงเป็น "ใจสั่งมา-โลโซ.mp3" แบบนี้สิถึงจะถูกต้อง
ก็เลยเจอวิธีแก้ปัญหาทั้งหมดข้างต้นที่กล่าวมา ดังนี้ครับ

$song_path="adminweb/song_full/song_file_full_".$song_id.".MP3"; //ตรงนี้เป็นที่อยู่ของไฟล์เพลงบนเซอร์เวอร์
    $song_name=$song_name."-".$artist_name.".MP3"; //ชื่อไฟล์ที่จะให้ดาวน์โหลด สามารถเปลี่ยนได้ตามใจชอบนะครับ


    if (file_exists($song_path)) { // ตรวจสอบก่อนว่าไฟล์มีอยู่จริงหรือเปล่า
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.urldecode($song_name)); //ตรงนี้ก็ใส่ชื่อไฟล์ตามข้างบนไป
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($song_path)); // อันนี้ก็ไม่มีอะไร แจ้งให้ระบบทราบว่าไฟล์ของเราขนาดเท่าไร
        ob_clean();
        flush();
        readfile($song_path); // และสั่งให้ดาวน์โหลดไฟล์ จบข่าว
       
    }    
?>


ที่อธิบายซะยื้ดยาวก็เพราะว่าอยากจะให้เห็นภาพ เห็นปัญหาแบบรวมนะครับ
ถ้ายังไม่เข้าใจ หรือ สงสัยตรงไหนก็สอบถามเข้ามาได้ตลอดนะครับ

"เพราะความรู้ คือการแบ่งปัน"



ย้อนกลับ กลับหน้าแรก