ปัญหาการอัปโหลดไฟล์บน Server ไม่ได้ แต่บน localhost ได้
พอดีมีสมาชิกไปถามผ่านอีเมล์ ผมเลยไล่ให้มาถามบนเว็บอีกที เพราะอยากให้คำถามนี้เป็นตัวอย่างหนึ่งของปัญหา
[question]อัปโหลดบน Server ไม่ได้ แต่อัปโหลดบน localhost ได้ทั้งๆที่เป็นคำสั่งเดียวกัน
คือ copy( $file1 ,"$path/$passw$now$filenewcon");
ใช้ใน localhost ได้ทั้งหน้าเพิ่ม และแก้ไข
แต่
เวลาอัปขึ้นserver หน้าเพิ่มได้ แต่หน้าแก้ไขไม่ได้ ทั้งที่ใช้คำสั่งเดียวกัน
ฟ้องเออเรอว่า...
Warning: copy(C:\Documents and Settings\Administrator\My Documents\4142.pdf): failed to open stream: No such file or directory in c:\appserv\www\pgmpatho\edit22.php on line 66 [/question]
คำถามทำนองนี้ผมเคยตอบมาแล้วในบอร์ดครั้งหนึ่ง แต่ดูเหมือนจะไม่ได้เขียนเป็นบทความไว้ ได้โอกาสเลยมาเขียนให้ได้ศึกษากัน
จากคำถาม ผมเข้าใจได้เป็น 2 กรณี
1. ผู้ถามไม่เข้าใจวิธีการอัปโหลด ทำการอัปโหลดโดยไม่ผ่านฟอร์ม หรือไม่ก็ทำไม่ถูกวิธี
2. ผู้ถามต้องการอัปโหลดแบบ Ajax
ผมตั้งข้อสังเกตุว่า ไฟล์ที่อัปโหลดมี path เป็น C:\Documents and Settings\Administrator\My Documents\4142.pdf ซึ่งถ้าให้เดาคงอ่านมาจาก value ของ Input ชนิด file ด้วย Javascript ซี่งไม่สามารถใช้ได้กับการอัปโหลดครับ ไม่ว่ากรณีที่ 1 หรือ 2 เราไม่อาจใช้ค่า value ของ input ชนิดไฟล์ได้ เพราะ ใน Browser แต่ละยี่ห้ออ่านค่า value จาก Input ของไฟล์ได้ไม่เหมือนกัน อยากรู้ว่าอ่านได้อะไรบ้าง ไปลองทดสอบกันเอาเอง
ในกรณีที่ 1 คุณต้องทำการอัปโหลดตามวิธีของฟอร์มเท่านั้นครับ
ในกรณีที่ 2 คุณต้องอัปโหลดโดยใช้ GForm หรือ Javascript อื่นใดที่มีความสามารถในการอัปโหลด
ส่วนจากคำถามที่บอกว่า สามารถอัปโหลดบน localhost ได้ นั้นไม่แปลกครับ คำอธิบายคือ
คำสั่ง copy() จะทำงานกับไฟล์บน Server เื่ท่านั้นครับ ในตอนที่เราทดสอบบน localhost ไฟล์ที่เราเลือกและ Server อยู่ที่เดียวกันบนเครื่องเดียวกันมันจึงสามารถอัปโหลดได้ (เครื่องเราเป็น Server)
ในกรณีบน Server ไฟล์ที่อัปโหลด เราไม่ได้อัปโหลดไปยังปลายทางโดยตรง แต่มันเกิดขึ้น 2 ขั้นตอนคือ เมื่อ submit ไฟล์จะถูกส่งไปเก็บไว้บน Server ที่โฟลเดอร์ tmp/ และไม่ว่าเราจะใช้คำสั่ง copy() หรือไม่ ไฟล์ก็ถูกส่งขึ้นไปแล้วเสมอ หลังจากนั้นคำสั่ง copy() ที่เราใช้กันจะทำการ copy ไฟล์ที่อัปโหลดไปแล้วภายใน tmp/ ไปยังปลายทางที่ต้องการอีกที
[question]อัปโหลดบน Server ไม่ได้ แต่อัปโหลดบน localhost ได้ทั้งๆที่เป็นคำสั่งเดียวกัน
คือ copy( $file1 ,"$path/$passw$now$filenewcon");
ใช้ใน localhost ได้ทั้งหน้าเพิ่ม และแก้ไข
แต่
เวลาอัปขึ้นserver หน้าเพิ่มได้ แต่หน้าแก้ไขไม่ได้ ทั้งที่ใช้คำสั่งเดียวกัน
ฟ้องเออเรอว่า...
Warning: copy(C:\Documents and Settings\Administrator\My Documents\4142.pdf): failed to open stream: No such file or directory in c:\appserv\www\pgmpatho\edit22.php on line 66 [/question]
คำถามทำนองนี้ผมเคยตอบมาแล้วในบอร์ดครั้งหนึ่ง แต่ดูเหมือนจะไม่ได้เขียนเป็นบทความไว้ ได้โอกาสเลยมาเขียนให้ได้ศึกษากัน
จากคำถาม ผมเข้าใจได้เป็น 2 กรณี
1. ผู้ถามไม่เข้าใจวิธีการอัปโหลด ทำการอัปโหลดโดยไม่ผ่านฟอร์ม หรือไม่ก็ทำไม่ถูกวิธี
2. ผู้ถามต้องการอัปโหลดแบบ Ajax
ผมตั้งข้อสังเกตุว่า ไฟล์ที่อัปโหลดมี path เป็น C:\Documents and Settings\Administrator\My Documents\4142.pdf ซึ่งถ้าให้เดาคงอ่านมาจาก value ของ Input ชนิด file ด้วย Javascript ซี่งไม่สามารถใช้ได้กับการอัปโหลดครับ ไม่ว่ากรณีที่ 1 หรือ 2 เราไม่อาจใช้ค่า value ของ input ชนิดไฟล์ได้ เพราะ ใน Browser แต่ละยี่ห้ออ่านค่า value จาก Input ของไฟล์ได้ไม่เหมือนกัน อยากรู้ว่าอ่านได้อะไรบ้าง ไปลองทดสอบกันเอาเอง
ในกรณีที่ 1 คุณต้องทำการอัปโหลดตามวิธีของฟอร์มเท่านั้นครับ
ในกรณีที่ 2 คุณต้องอัปโหลดโดยใช้ GForm หรือ Javascript อื่นใดที่มีความสามารถในการอัปโหลด
ส่วนจากคำถามที่บอกว่า สามารถอัปโหลดบน localhost ได้ นั้นไม่แปลกครับ คำอธิบายคือ
คำสั่ง copy() จะทำงานกับไฟล์บน Server เื่ท่านั้นครับ ในตอนที่เราทดสอบบน localhost ไฟล์ที่เราเลือกและ Server อยู่ที่เดียวกันบนเครื่องเดียวกันมันจึงสามารถอัปโหลดได้ (เครื่องเราเป็น Server)
ในกรณีบน Server ไฟล์ที่อัปโหลด เราไม่ได้อัปโหลดไปยังปลายทางโดยตรง แต่มันเกิดขึ้น 2 ขั้นตอนคือ เมื่อ submit ไฟล์จะถูกส่งไปเก็บไว้บน Server ที่โฟลเดอร์ tmp/ และไม่ว่าเราจะใช้คำสั่ง copy() หรือไม่ ไฟล์ก็ถูกส่งขึ้นไปแล้วเสมอ หลังจากนั้นคำสั่ง copy() ที่เราใช้กันจะทำการ copy ไฟล์ที่อัปโหลดไปแล้วภายใน tmp/ ไปยังปลายทางที่ต้องการอีกที