เคล็ดลับการอัพไฟล์ผ่าน 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 เลย …. เหอๆ

Laravel – PHP Framework ที่น่าสนใจอย่างมาก

ขอออกตัวก่อนครับว่าผมเป็นสาวก Codeigniter ผมขอเรียกย่อๆ ว่า CI ซึ่งผมชอบมันด้วยเหตุผลว่า ง่าย และ เบา รวมถึงการที่มันเข้ากันได้ง่ายกับ Netbeans ในเรื่องการทำ autocompletion แต่ด้วยเหตุนี้ทำให้ผมเขียน PHPDoc จนเหมือนการหายใจไปด้วย ไม่ได้พูดโม้เกินจริง แต่ถ้าไม่เขียน มันจะไม่มี hint ให้อ่านครับ ทำงานไม่ได้ และอีกสักปีถ้าผมย้อนกลับมาดู ผมต้องอุทานกับตัวเองว่า “ตอนนั้นตูเขียนเหีียอะไรลงไป”  /suck

กลับมาที่วันนี้ที่จะพูดถึงครับ หลายวันมานี้ผมได้ตามอ่าน Facebook ของ JQueryTips เจ้าของคือพี่ตี๋ ซึ่งผมก็ไม่ได้เข้าเว็บหลักพี่เขาเลย กลับกันบล็อกผมก็ไม่หวังว่าใครจะมาอ่าน และ ณ เวลาที่ผมพิมพ์อยู่นี้ ผมยังไม่่ได้แขวนลิงก์ขาเข้า Bot จาก Google จึงไม่มีทางเจอ ผมเขียนให้ใครอ่านละเนี่ย /XD

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

ส่วนนี้คือเหตุผลที่ผมนำมาพิมพ์เกริ่นๆ เพราะผมชอบ Bootstrap มาก

Make Avantfax can auto login

Today I receive request to make avantfax can auto login when user open firefox. User and pass is saved in browser itself.

I test many codes and I found simple way to do it. Start from root of localhost folder. (In my case is “/var/www/”) You must edit this file.

/avantfax/includes/templates/main_theme/templates/index.tpl

open file and find </script> and insert this code before it.

{if not $error}
    setTimeout('document.forms[0].submit()',500);
{/if}

This way you can make it auto login in first try and when user to pass isn’t correct. It won’t auto login again.

PS. I’m Thai so my english isn’t that good.  /= =a