วันนี้ปัญหามากหน่อย
ลองแบบนี้ดู
header("Content-Disposition: attachment; filename=" . urlencode(utf8_encode(basename(" . $file . "))));
โหลดได้แล้วครับ แต่เป็นแบบนี้ครับ
+.+ ชื่อไฟล์ +.+
ผมเลยลอง
header(“Content-Disposition: attachment; filename=” . urlencode(utf8_encode(basename(“$file”))));
ออกมาเป็น… ชื่อไฟล์
ไม่มี +.+ แล้ว
ส่วนชื่อนั้นเป็น %C3 %A2แบบนี้ แต่ตัวนี้ผมไม่ซีเรียสมากครับ เอาแค่โหลดไทยได้เป็นพอ
แต่ไฟล์ที่โหลดมานั้น ขนาดเป็น 0 ไบต์อ่ะครับ
ไฟล์ภาษาอังกฤษก็ 0 ไบต์จร้า
สำหรับชื่อไฟล์ ลองดูใหม่
header("Content-Disposition: attachment; filename=\"" . urlencode(utf8_encode(basename(" . $file . ")))\"");
ส่วน 0 ไบต์อาจจะต้องหา function อื่นแทน readfile
Warning: Unexpected character in input: '' (ASCII=92) state=1 in C:\www\index.php on line 3
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\www\index.php on line 3
บรรทัดที่ 3
header(“Content-Disposition: attachment; filename="” . urlencode(utf8_encode(basename(" . $file . “)))"”);
ถ้า $file เป็นชื่อไฟล์อยู่แล้วก็ไม่เห็นจำเป็นต้อง basename() นี่ครับแล้วก็ IE กับ FF/Safari จะไม่เหมือนกันนะครับ
if(@preg_match("#MSIE#is", $_SERVER[‘HTTP_USER_AGENT’], $matches)){
@header(‘Content-Disposition: attachment; filename="’.rawurlencode($filename).’"’);
}else{
@header(‘Content-Disposition: attachment; filename="’.$filename.’"’);
}
ถ้าให้ชัวร์ก็ต้องมี double-quote คร่อมด้วยครับ
อันนี้เซฟเป็นไฟล์ไม่มีชื่อ ขนาด 0 ไบต์อ่ะครับ
ตอนนี้ผม งง ไปหมดและครับ ว่าโค้ดไหนใส่ตรงไหนอย่างไร ตอนนี้ที่ผมใช้คือ
<?
$file = $_POST['file'];
if(@preg_match("#MSIE#is", $_SERVER['HTTP_USER_AGENT'], $matches)){
โค๊ดที่ผมให้ไปตัดมาจากที่ใช้อยู่ตัวแปรมันเป็น $filename คุณต้องเปลี่ยนเป็น $file ด้วย ส่วนที่ได้ 0 byte นั้นตรวจสอบดูว่าไฟล์ยังอยู่ใน path ที่ระบุหรือไม่ หรือ header ส่วนของ Content-length ได้ขนาดถูกต้องหรือไม่
จริงๆแล้วถ้าชื่อไฟล์ในระบบกับไฟล์ที่ต้องการส่งไปยัง browser นั้นชื่อเดียวกันอยู่แล้วก็ไม่จำเป็นต้องเขียนยาวอย่างนี้ก็ได้ เขียนเพียง
$file = “นายไก่.doc”;
header(“Content-Type: application/force-download”);
readfile(" . $file . ");
ก็ได้เหมือนกันครับ
ผมปรับเป็น $file แล้วโหลดได้ แต่ขนาดไฟล์เท่ากับ 0 อ่ะครับ
ส่วน
$file = “นายไก่.doc”;
header(“Content-Type: application/force-download”);
readfile(" . $file . ");
อันนี้ไม่ได้เลยครับ
ขออภัยเืรื่องชื่อไฟล์ นึกได้ว่าจำผิดถ้าไม่ระบุ filename ใน header จะไม่ได้ชื่อไฟล์
ส่วนเรื่องได้ 0 byte นั้น อยากให้ทดลองตัดบรรทัด Content-length ออกดูก่อนครับ หรือถ้ายังไม่ได้ให้ตัด header ทั้งหมดออกเหลือแต่ readfile ว่ายังได้ข้อมูลแสดงออกมาหรือไม่ (ส่วนตัวว่ามีปัญหาเรื่องการอ้างอิง path มากกว่า)
[quote author=InterServer.Asia-คุณภาพต้องมาก่อน link=topic=28519.msg266990#msg266990 date=1277650520]
จุดประสงค์นั้น อยากให้มันโหลดไฟล์ภาษาไทยได้ครับ
พื้นฐานสุดที่ลอง Load มันไม่โหลดแฮะ
ไฟล์มันจะมีหลายนามสกุลจะต้องเป็นคำสั่งไหนครับคุณไอซ์ พอดีจะมีเป็น .rar .pdf และอื่นๆอีกอ่ะครับ
ก็ใส่ไปให้หมดเลยครับ
AddType application/force-download .doc .rar .pdf .xxx .yyy .zzz
mod deflate ใน apache มันจะทำให้ไม่ขึ้นขนาดไฟล์นี่ครับ ต้องเพิ่มสกุลในนั้นด้วย