[WordPress] วิธีแก้ปัญหา Unable to create directory. Is its parent directory writable by the server?

ล่าสุดเพิ่งเจอปัญหามาครับ เวลาอัพโหลดรูปใน Media Library หรือ Featured Image ของ WordPress จะเจอ Error แบบนี้

Unable to create directory wp-content/uploads/2015/02. Is its parent directory writable by the server?

เลยไปหาวิธีแก้ในอินเตอร์เน็ตมา หานานมากกว่าจะเจอ เลยเอามาแชร์กันครับ

1. CHMOD โฟลเดอร์ wp-content กับ /wp-content/uploads เป็น 755

วิธีแก้ปัญหาขั้นต้นครับ เพราะโฟลเดอร์เราอาจจะเป็น Permission ที่ไม่สามารถอัพโหลดรูปได้อยู่ (เช่น 644) ให้ใช้โปรแกรม FTP เข้าไป CHMOD เป็น 755 ครับ

หรือถ้าเซิร์ฟเวอร์ใครใช้ SSH ก็รันคำสั่งนี้ครับ:

sudo chmod 755 wp-content

หรือรันคำสั่งนี้เพื่อให้แก้ทุกไฟล์ และทุกโฟลเดอร์ข้างใน wp-content เป็น 755 ทั้งหมด (รันแบบ Recursive)

sudo chmod -R 755 wp-content

ป.ล. บางที่แนะนำให้เปลี่ยนเป็น 777 เลย ผมไม่แนะนำให้รัน 777 ทั้งหมดในโฮสต์จริงครับ เพราะจะกลายเป็นช่องโหว่โดนแฮคได้ง่าย ๆ แต่ถ้าเป็น localhost (ทำเว็บในเครื่องตัวเอง) ทำได้ไม่มีปัญหาครับ

2. เช็ค URL โฟลเดอร์ Media ใน Setting > Media

อันนี้เพิ่งเจอมาสด ๆ ร้อน ๆ เลยครับ

เนื่องจากผมเพิ่งย้ายจาก MAMP มาใช้ MAMP PRO และเพิ่งเอาเว็บ WordPress มาเล่นใน MAMP PRO ครั้งแรก แล้วเว็บดันมาเจอปัญหานี้ เลยนึกว่า MAMP PRO ต้องเซ็ต Permission อะไรหรือเปล่า เลยทำให้ Media Upload พัง

แต่จริง ๆ เพราะผมไปติดตั้ง WordPress ในโฮสต์ก่อนด้วย DirectAdmin ซึ่งที่โฮสต์มี Installatron ให้ (สคริปต์สำหรับติดตั้ง CMS ดัง ๆ อย่างรวดเร็ว พร้อมเซ็ต DB ให้เราด้วย สะดวกมาก ๆ)

ทีนี้ Installatron ดันไปตั้งโฟลเดอร์อัพโหลดใน Setting > Media เป็น Relative Path บนเซิร์ฟเวอร์ แบบยาว ๆ พอย้ายมาลง localhost ค่านี้ก็ติดมาด้วย เลยอัพโหลดรูปไม่ได้เลย

วิธีแก้คือแก้ค่าในช่อง Store uploads in this folder เป็น wp-content/uploads เท่านั้นเองครับ

3. เปลี่ยน Owner ของโฟลเดอร์ wp-content

ถ้า 2 วิธีข้างบนไม่ช่วย อาจจะลองดูวิธีนี้ ซึ่งเกิดจาก Owner ของโฟลเดอร์ WordPress ที่เราติดตั้งไว้ไม่มีสิทธิ์ในการอัพโหลดรูปครับ

แก้ไขได้โดยการ reset owner ของโฟลเดอร์ ถ้าใช้ Direct Admin ล็อกอินเข้าไปแล้วกด Files ที่เมนูบนสุด (ไอคอนรูปโฟลเดอร์) จากนั้นเลือกโฟลเดอร์ที่ต้องการ แล้วกดปุ่ม Reset Owner ด้านล่างครับ

ส่วนถ้าเป็น SSH ลองเช็ค Permission ของ /wp-content/uploads ดูครับ ถ้าเป็น root:root อยู่ ลองเปลี่ยนเป็น www-data:www-data ซึ่งผมรันโค้ดนี้ใน DigitalOcean

sudo chown -R www-data:www-data /var/www/html

ก็สามารถอัพโหลดรูปผ่านทันทีฮะ

ประมาณนี้ครับ โดยปกติจะเป็นปัญหาที่แก้ได้จากข้อ 1 แล้วครับผม ถ้าท่านใดเจอเคสแปลก ๆ เอามาแชร์กันได้ครับ 🙂


Also published on Medium.

Leave a Reply

Your email address will not be published. Required fields are marked *