เคล็ดลับการอัพไฟล์ผ่าน FTP ที่ดีและได้ไฟล์ถูกต้อง

บทความนี้จะไม่สอนถึงขั้นตอนพื้นฐานการอัพ FTP และผมไม่รับตอบคำถาม เพราะถือว่าผู้อ่านต้องเคยอัพไฟล์ FTP และมีความเข้าใจในระบบนี้มาบ้างแล้ว

เครดิตความรู้นี้ยกให้ icez นะครับ เพราะผมไปถามเขามาอีกที จริงๆ มันเป็นพื้นฐานเลยแต่ผมกลับลืมไปซะสนิท พอได้คำตอบแล้วเหมือนถูกกระตุ้นความทรงจำเลย

##############################

เกริ่นนำ

หลายคนที่เคยอัพไฟล์ PHP หรือ Script ชุดอะไรก็ตามไม่ว่าจะเป็น CMS หรืออื่นๆ อาจจะเคยเจอว่าทำไมเราอัพไฟล์ขึ้นโฮสแล้วติดตั้งไม่ได้ error เรียงรายบานเป้นทุ่งข้าวสาลี ปัญหาหลักมาจากการอัพไฟล์ที่ผิดวิธีทำให้ไฟล์ส่งไปปลายทางไม่ถูกต้อง

เข้าตรงประเด็นเลยคือ การตั้งโหมดชนิดการรับส่งผ่าน FTP นั้นในโปรแกรม FTP ทุกตัวเลยจะมีการตั้งอยู่ 3 แบบคือ
1. Ascii ใช้สำหรับส่งไฟล์ที่เป็น text based เช่น txt html php js css บลาๆ – พูดง่ายๆ คือเปิดอ่านด้วย notepad แล้วคุณอ่านออก มันคือ text based
2. Binary ใช้สำหรับส่งไฟล์แบบดิบๆ (ภาษาอังกฤษใช้คำว่า raw file) เช่น jpg png mp3 zip rar บลาๆ – พูดง่ายๆ คือเปิดอ่านด้วย notepad แล้วคุณจะงงกับมัน
3. Auto เป็นส่วนที่ให้โปรแกรมตัดสินใจเองว่าไฟล์ไหนจะให้ส่ง Ascii อันไหน Binary

แน่นอนจากที่พูดมา ตัวที่ดูเข้าท่าก็คือ Auto และ Auto จะจัดสรรให้ php ไปลงที่ Ascii ซึ่งมันก็ดูเข้าหลักเกณฑ์ปกติ

ข้อเท็จจริง

ในความเป็นจริงคือ PHP สมควรอัพด้วยโหมด Binary ถามว่าทำไม? มันจะถูกตอบด้วยเหตุผลเหล่านี้

1.  PHP เป็นโค้ดโปรแกรม หลายคนต้องการความแน่นอนว่าอัพแล้วไฟล์ไม่ผิด วิธีเช็คที่ง่ายที่สุดคือคือการตรวจขนาดไฟล์ แต่ปรากฎว่าไฟล์ PHP เมื่ออัพผ่าน Ascii มักจะผิดขนาดบ่อยครั้ง
และเฉพาะกรณีอัพจาก Windows ไปลงโฮส Linux Unix มักจะมีการลบ CR (carriage return) ถ้าพูดในภาษาคนเขียน PHP คือ มันจะเปลี่ยยน \r\n เป็น \n อย่างเดียว ทำให้การเช็คขนาดไฟล์ว่าเราอัพไปถูกไหม หรือจะเช็ค MD5 ในกรณีคนที่บ้าพาว มันไม่สามารถทำได้เลย จำเป็นต้องใช้การ compare code อย่างเดียว ซึ่งมันเว่อร์ดีแท้
ขอแถม ผมไม่เคยเห็น Web server ในไทยใช้พวก OSX แต่อยากบอกว่า OSX ดันใช้ \r อย่างเดียวล่ะ ที่เหลือไปคิดเอาเอง -*-

2. ในกรณีไฟล์ PHP ที่โดนเข้ารหัสเพื่อป้องกัน เน้นเฉพาะกับ 2 ตัวคือ Zend และ Ioncube ทั้งสองตัวนี้เมื่อคุณอัพด้วยโหมด Ascii รับรองว่าคุณจะปวดหัวแท้ เพราะการเข้ารหัสของทั้งสองตัวจะทำให้โค้ดอ่านไม่ออก และมีความเป็นไปได้ที่จะผิดพลาดได้สูงกว่าไฟล์ PHP ที่ไม่ได้เข้ารหัส (แน่นอนรวมทั้งไฟล์ PHP ที่ผ่าน eAccelerator ด้วย)

3. คำอธิบายที่แยกความแตกต่างของ Ascii และ Binary ที่ดีที่สุดคือ Ascii ถูกออกแบบให้ส่งเป็นข้อความ แต่ Binary ถูกออกแบบให้ส่งเป็นไบต์ต่อไบต์ ด้วยเหตุผลดังกล่าว ความแน่นอนจึงต่างกันอย่างชัดเจน

เคล็ดลับวิธีทำ

แล้วจะรออะไรกันล่ะ มาตั้ง Binary Mode กันดีกว่า! วิธีตั้งแสนง่ายมาก ที่จะบอกนี้เป็นวิธีนี้สำหรับ FileZilla เท่านั้น! ดังนั้นโปรแกรมอื่นก็หาทางกันเอาเองนะ

สำหรับเมนูอังกฤษ

Posted Image

สำหรับเมนูไทย

Posted Image

ที่เหลือก็อัพไฟล์ตามขั้นตอนปกติครับ จบ!  /XD

ข้อควรระวัง ภาพนี้มาจาก FilaZilla v3.5.3 ในอนาคตอาจมีการเปลี่ยนแปลงได้

ปล. ใครใช้โปรแกรม FTP โปรดระวังโดนแฮกเว็บ ผมเจอเคสพวกนี้มาเยอะ เชื่อเถอะ
ปล2. บทความนี้สงวนลิขสิทธิ์คัดลอกได้แต่ต้องทำลิงก์กลับมาต้นฉบับ และห้าม Hotlink ภาพไป ต้องใช้การอัพโหลดไปไว้ที่อื่น ถ้าทำผมก็จะทำเหมือนกรณีที่ Blognone เคยโดน Hotlink เลย …. เหอๆ