เส้นผมบังภูเขา : การแก้ปัญหาการอัพเดต WordPress จากตัวระบบเองผ่าน FTP

เรื่องมันมีอยู่ว่า WordPress ซึ่งผมใช้ทำบล็อกนี้อยู่เนี่ย มันแจ้งให้ผม update หน่อย มีบั๊กให้ต้องแก้
โดยปกติแล้วเจ้า WordPress ผู้แสนน่ารักของเราจะขึ้นหน้าจอขออนุญาตใช้สิทธิ์ FTP ไปใส่ไฟล์ใหม่ๆ ให้ แบบนี้ :

หน้าจอการขอสิทธิ์ FTP หรือ SSH ในการอัพเดต

หน้าจอการขอสิทธิ์ FTP หรือ SSH ในการอัพเดต

แต่ปรากฎว่าแทนที่จะขึ้ันมาขอค่า ปรากฎว่ามันลัดหน้านั้นไป ซ้ำร้าย… มันยังขึ้นข้อความว่า
การอัปเดตไม่สามารถติดตั้งได้เพราะว่าเราไม่สามารถคัดลอกบางไฟล์ ปัญหานี่ส่วนใหญ่เกิดจากการอนุญาตไฟล์ที่ไม่สมบูรณ์ : wp-admin/includes/***.php
ซวยล่ะ! ทำไงดีล่ะ ขืนหาวิธีแก้ไม่ได้มีหวังต้องโหลดมาลงคอมผ่านเน็ต 3G ติด FUP กากๆ นี้แน่นอน
แต่ก่อนจะคิดสั้นทำวิธีถึก ก็ google ไปเจอฝรั่งโพสต์วิธีแก้ไว้ (อันที่จริงเค้าโพสต์วิธียกเลิกใช้หน้าจอขอสิทธิ์ แต่วิธีการก็คล้ายๆ กัน)
เขากล่าวว่า ให้สูเจ้าไปดูที่ไฟล์ wp-config.php ใส่ค่าคงที่ FS_METHOD เป็น direct ซะ
เมื่อลองเปิดใน Codex ก็พบว่าเจ้าค่านี่มันมีแบ่งเป็น 4 ประเภท คือ

  1. “direct” คืออ่านเขียนไฟล์ผ่าน php โต้งๆ เลย ซึ่งมักจะเจอปัญหาคนไม่มีสิทธิ์ ก็ผิดตั้งแต่วันที่เราเกิด เอ้ย! ผู้ใช้ไม่มีสิทธิ์ในการแก้ไขไฟล์ดังที่ผมเจอ
  2. “ssh2” คือใช้ส่วนเสริม SSH ในการแก้ไขถ้าเซิร์ฟเวอร์มีให้ใช้
  3. “ftpext” คือใช้ส่วนเสริม FTP ในการแก้ไขถ้าเซิร์ฟเวอร์มีให้ใช้ และ
  4. “ftpsockets” คือใช้คลาส PHP Sockets ในการใช้งาน FTP

ทั้งนี้ ผู้พัฒนาก็เตือนว่า ถ้าสูเจ้าใส่แล้วมีปัญหานัก จงแก้หรือเอาออกซะ อย่าไปดันทุรังให้เสียเวลา
และบังเอิญระบบผม (ซึ่งติดตั้งผ่านตัวช่วยของ DirectAdmin) มันตั้งให้ใช้ direct ครับท่านผู้โชม….

define('FS_METHOD','direct');
ก็ลอง comment ออกไป แล้วอัพเดต
หน้าจอขอสิทธิ์กลับมาแล้ว… แต่เซิร์ฟเราไม่ได้ใช้ port 21 นี่หว่า… ทำไงดี
ก็ google ไปอีกรอบ ก็มีคนเคยถามไว้แล้วเหมือนกัน มีคนตอบว่า สูเจ้าก็ใช้ตามปกติของสูนั่นแหละ แต่จงใส่ colon (:) ตามด้วย port ที่สูเจ้าใช้
ลองทำดู เออ มันได้จริงด้วยวุ้ย… ผ่านแล้ว! 😀


ที่จริงส่วนของการอัพเกรด นอกจาก FS_METHOD แล้ว มัยังมีค่าอื่นให้ปรับอีกนะครับ ได้แก่

  • FTP_BASE ไว้กำหนดโฟลเดอร์ที่อยู่ของ wordpress ในเซิร์ฟเวอร์
  • FTP_CONTENT_DIR ไว้กำหนดโฟลเดอร์ที่อยู่ของ wp-content ในเซิร์ฟเวอร์ (เผื่อบางคนเอาไว้สับขาหลอกนะครับ)
  • FTP_PLUGIN_DIR ไว้กำหนดโฟลเดอร์ที่อยู่ของปลั๊กอินในเซิร์ฟเวอร์ (เผื่อบางคนเอาไว้สับขาหลอกอีกเช่นเคยนะครับ)
  • FTP_PUBKEY คือที่อยู่ของไฟล์ SSH public key กรณีที่ใช้ SSH
  • FTP_PRIKEY คือที่อยู่ของไฟล์ SSH private key กรณีที่ใช้ SSH
  • FTP_USER คือ username ที่ไว้ใช้ใน FTP หรือ SSH
  • FTP_PASS คือ password ที่ไว้ใช้ใน FTP หรือ SSH
  • FTP_HOST คือที่อยู่:พอร์ต (แบบที่ฝรั่งคนก่อนหน้านี้ตอบไว้) ที่ไว้ใช้ใน FTP หรือ SSH แต่ถ้าใช้ 21 สำหรับ FTP หรือ 22 สำหรับ SSH ก็ไม่ต้องใส่ก็ได้
  • FTP_SSL กำหนดจริงไว้กรณีเชื่อต่อ FTP แบบ SSL ซึ่งเป็นคนละตัวกับ SSH SFTP (ใครที่ใช้ WinSCP คงจะเคยเห็นมาบ้างนะครับ 🙂 )

เส้นผมบังภูเขา (A leaf screening the eye.) จริงๆ นะครัช แหม่…

แอบอ้างมาจาก :

เรื่องหน้าจอขอสิทธิ์ : http://www.hongkiat.com/blog/update-wordpress-without-ftp/
การตั้งค่า wp-config : http://codex.wordpress.org/Editing_wp-config.php
การใส่ port ให้ ftp : http://wordpress.org/support/topic/if-i-using-another-port-for-ftp-how-can-i-update-via-ftp-my-plugin

  • ขอบคุณมากกกกกค่ะ เจอปัญหานี้พอดี