ขีดจำกัดการอัปโหลดรูป WordPress และวิธีแก้
คำแนะนำส่วนใหญ่บอกให้คุณแก้ไข php.ini แต่บนโฮสติ้งแบบแชร์ มักทำไม่ได้ การบีบอัดรูปภาพก่อนใช้งานได้ผลเสมอในทุกกรณี
บีบอัดรูปภาพให้มีขนาดต่ำกว่าขีดจำกัดแทนที่จะเพิ่มขีดจำกัดของเซิร์ฟเวอร์ เพราะไฟล์ที่เล็กกว่าจะช่วยแก้ปัญหาข้อผิดพลาดในการอัปโหลดและปัญหาความเร็วของหน้าเว็บได้ในขั้นตอนเดียว WordPress รับค่าขีดจำกัดมาจาก PHP ซึ่งโดยปกติคือ 2 MB หรือ 8 MB ขึ้นอยู่กับผู้ให้บริการโฮสติ้ง และบนโฮสติ้งแบบจัดการหรือแบบแชร์ คุณมักจะไม่สามารถเปลี่ยนแปลงค่าเหล่านี้ได้
เกือบทุกบทความในหัวข้อนี้มักจะบอกให้คุณแก้ไขไฟล์ php.ini, .htaccess หรือ wp-config.php คำแนะนำเหล่านั้นอิงจากการเข้าถึงเซิร์ฟเวอร์ที่เจ้าของเว็บไซต์ส่วนใหญ่ไม่มี และต่อให้เข้าถึงได้ ก็ควรค่าแก่การตั้งคำถามว่าการเพิ่มขีดจำกัดนั้นเป็นทางเลือกที่ถูกต้องหรือไม่
ที่มาของขีดจำกัด
ขีดจำกัดถูกกำหนดโดยค่า PHP 3 ค่า และค่าที่น้อยที่สุดใน 3 ค่านี้คือค่าที่จะถูกนำมาใช้ WordPress จะแสดงตัวเลขผลลัพธ์นี้ไว้ใต้กล่องอัปโหลด ซึ่งเป็นสาเหตุว่าทำไมตัวเลขจึงมักจะแตกต่างจากที่ผู้ให้บริการโฮสติ้งโฆษณาไว้
- upload_max_filesize ควบคุมขนาดไฟล์เดี่ยวที่ใหญ่ที่สุดที่ PHP จะยอมรับ
- post_max_size ควบคุมขนาดรวมทั้งหมดของการส่งข้อมูล ดังนั้นค่านี้จึงต้องมีค่ามากกว่าขนาดไฟล์
- memory_limit ควบคุมปริมาณหน่วยความจำที่กระบวนการย่อขนาดสามารถใช้ได้ในขณะสร้างภาพย่อ (thumbnail)
- max_execution_time อาจทำให้เกิดความผิดพลาดได้เช่นกัน เนื่องจากรูปภาพขนาดใหญ่อาจใช้เวลาประมวลผลนานเกินกำหนดก่อนที่จะเสร็จสิ้น
ค่าที่สามมักทำให้เกิดข้อผิดพลาดที่สร้างความสับสนมากที่สุด ไฟล์ที่อัปโหลดสำเร็จแล้วยังคงสามารถล้มเหลวได้ในขณะที่ WordPress กำลังสร้างขนาดภาพย่อ ส่งผลให้เกิดรูปภาพที่เสียหายในคลังสื่อ (media library) แทนที่จะเป็นข้อผิดพลาดในการอัปโหลด
ทำไมการบีบอัดจึงดีกว่าการเพิ่มขีดจำกัด
ภาพถ่ายขนาด 6 MB บนหน้าเว็บคือปัญหา ไม่ว่าเซิร์ฟเวอร์จะยอมรับมันหรือไม่ก็ตาม การเพิ่มขีดจำกัดจะช่วยลบข้อความแสดงข้อผิดพลาดออกไป แต่ยังคงทิ้งน้ำหนักของไฟล์ที่แท้จริงเอาไว้เช่นเดิม
WordPress จะสร้างภาพย่อหลายขนาดจากทุกไฟล์ที่อัปโหลด ดังนั้นไฟล์ต้นฉบับที่มีขนาดใหญ่จะถูกคูณเพิ่มเป็นไฟล์ย่อยขนาดใหญ่หลายไฟล์ และสิ้นเปลืองพื้นที่จัดเก็บทั่วทั้งคลังสื่อ การบีบอัดให้เหลือเพียงไม่กี่ร้อยกิโลไบต์ก่อนอัปโหลดจะช่วยแก้ปัญหาข้อผิดพลาด ลดขนาดไฟล์ที่ถูกสร้างขึ้น ลดเวลาในการสำรองข้อมูล และไม่ต้องเข้าถึงเซิร์ฟเวอร์เลยแม้แต่น้อย
วิธีหลีกเลี่ยงข้อจำกัดเรื่องขนาด
หากต้องการอัปโหลดให้สำเร็จโดยไม่ต้องแตะต้องตั้งค่าเซิร์ฟเวอร์ ให้ทำตาม 5 ขั้นตอนเหล่านี้
- อ่านขีดจำกัดที่แสดงอยู่ใต้กล่องอัปโหลดของ WordPress ซึ่งเป็นตัวเลขจริงสำหรับโฮสติ้งของคุณ
- ปรับขนาดรูปภาพให้เท่ากับความกว้างในการแสดงผล โดยคูณสองสำหรับหน้าจอความหนาแน่นสูง เนื่องจากภาพถ่าย 4000 พิกเซลในคอลัมน์ 800 พิกเซลเป็นการสิ้นเปลืองข้อมูลส่วนใหญ่โดยเปล่าประโยชน์
- แปลงเป็นรูปแบบ WebP สำหรับภาพถ่ายและกราฟิกที่จะปรากฏบนเว็บไซต์เท่านั้น
- บีบอัดให้มีเป้าหมายอยู่ที่ 200 KB ถึง 400 KB ซึ่งเหมาะสมกับรูปภาพเกือบทุกรูปในบทความ
- อัปโหลด จากนั้นตรวจสอบว่ารูปภาพแสดงผลได้อย่างถูกต้องเต็มความกว้างทั้งบนเดสก์ท็อปและมือถือ
การทำตามลำดับนี้มักจะทำให้ได้ไฟล์ที่มีขนาดเล็กกว่าต้นฉบับจากกล้องถึง 90 เปอร์เซ็นต์ โดยไม่มีการเปลี่ยนแปลงที่มองเห็นได้บนหน้าจอ ข้อผิดพลาดในการอัปโหลดจะหายไปเองโดยปริยายแทนที่จะเป็นเป้าหมายหลัก
ขนาดที่แนะนำสำหรับเนื้อหาใน WordPress
ปรับความกว้างของรูปภาพให้ตรงกับพื้นที่ที่กว้างที่สุดที่จะปรากฏในธีมของคุณ จากนั้นคูณสองสำหรับหน้าจอความหนาแน่นสูง พื้นที่เนื้อหาส่วนใหญ่แคบกว่าที่เจ้าของเว็บไซต์คาดคิดไว้มาก
| การใช้งานรูปภาพ | ความกว้างในการแสดงผล | ความกว้างในการอัปโหลด | ขนาดเป้าหมาย |
|---|---|---|---|
| รูปภาพในบทความ | 700 px | 1400 px | 150 KB ถึง 250 KB |
| ภาพเด่นเต็มความกว้าง | 1200 px | 2400 px | 300 KB ถึง 500 KB |
| แบนเนอร์ส่วนหัวหรือฮีโร่ | 1920 px | 1920 px | 300 KB ถึง 400 KB |
| ภาพย่อหรือการ์ด | 400 px | 800 px | 50 KB ถึง 100 KB |
| รูปโปรไฟล์หรือผู้เขียน | 150 px | 300 px | ต่ำกว่า 30 KB |
เมื่อใดที่การเพิ่มขีดจำกัดคือคำตอบที่ถูกต้อง
เพิ่มขีดจำกัดเมื่อคุณอัปโหลดไฟล์ขนาดใหญ่จริงๆ ที่จำเป็นต้องคงขนาดใหญ่ไว้ เช่น ภาพถ่ายความละเอียดสูงสำหรับงานพิมพ์ วิดีโอ หรือแพ็กเกจธีม เคสเหล่านี้มีอยู่จริงแต่มันไม่ใช่เคสปกติทั่วไป
ช่างภาพที่ส่งมอบแกลเลอรีความละเอียดสูง ร้านค้าที่นำเข้าปลั๊กอินขนาดใหญ่ หรือเว็บไซต์ที่โฮสต์เอกสาร PDF ที่ดาวน์โหลดได้ ล้วนต้องการพื้นที่ว่างรองรับทั้งสิ้น แต่บล็อกเกอร์ที่ภาพถ่ายวันหยุดจะแสดงผลกว้างเพียง 700 พิกเซลนั้นไม่จำเป็นต้องทำเช่นนั้น ให้ถามตัวเองก่อนว่าไฟล์นี้มีไว้เพื่ออะไรก่อนที่จะเปลี่ยนการตั้งค่าเซิร์ฟเวอร์ เพราะคำตอบมักจะชี้กลับไปที่การบีบอัดเสมอ
วิธีเพิ่มขีดจำกัดหากจำเป็นต้องทำ
สอบถามผู้ให้บริการโฮสติ้งก่อน เนื่องจากผู้ให้บริการแบบจัดการส่วนใหญ่สามารถเปลี่ยนค่านี้ให้ได้ตามคำขอภายในไม่กี่นาที การส่งตั๋วสนับสนุน (support ticket) จะช่วยแก้ปัญหานี้ได้เร็วกว่าการแก้ไขไฟล์กำหนดค่าบนแผนโฮสติ้งใดๆ ที่จำกัดการเข้าถึงไฟล์
- โฮสติ้ง WordPress แบบจัดการ มักจะมีให้ตั้งค่าในแผงควบคุมหรือปรับเปลี่ยนได้เมื่อมีคำขอ
- โฮสติ้ง cPanel มักจะมีตัวแก้ไข MultiPHP INI Editor ซึ่งสามารถตั้งค่าค่าทั้ง 3 นี้ได้โดยตรง
- เซิร์ฟเวอร์เสมือนส่วนตัว (VPS) อนุญาตให้แก้ไขไฟล์ php.ini ได้ ซึ่งหลังจากนั้นจะต้องรีสตาร์ทบริการ PHP
- การแก้ไขไฟล์ .htaccess สามารถใช้ได้กับเซิร์ฟเวอร์ Apache บางประเภท แต่จะทำให้เกิดข้อผิดพลาดบนเซิร์ฟเวอร์อื่น ดังนั้นควรสำรองข้อมูลไว้เสมอก่อนทำ
- ปลั๊กอินที่อ้างว่าสามารถเพิ่มขีดจำกัดได้ ไม่สามารถเกินกว่าสิ่งที่เซิร์ฟเวอร์อนุญาตได้ ไม่ว่าคำอธิบายจะว่าไว้อย่างไรก็ตาม
ข้อผิดพลาด HTTP ที่ไม่ใช่เรื่องของขนาดไฟล์
ข้อผิดพลาด HTTP ทั่วไปในระหว่างการอัปโหลดมักหมายถึงหน่วยความจำหรือเวลาในการประมวลผลหมดลงในขณะที่ WordPress กำลังสร้างภาพย่อ ไม่ใช่เพราะไฟล์ถูกปฏิเสธเนื่องจากขนาดใหญ่เกินไป ความแตกต่างนี้มีความสำคัญเพราะการบีบอัดรูปภาพสามารถแก้ปัญหาได้ทั้งสองสาเหตุ
ขนาดมิติของภาพ (dimensions) ที่ใหญ่โตไม่ใช่ขนาดไฟล์ เป็นตัวการที่ผลักดันการใช้หน่วยความจำ เนื่องจากเซิร์ฟเวอร์ต้องเก็บทุกพิกเซลไว้ในหน่วยความจำในขณะที่กำลังย่อขนาด รูปภาพขนาด 6000 คูณ 4000 พิกเซลต้องการหน่วยความจำมากกว่าที่ขนาดไฟล์บ่งบอกมาก การลดขนาดมิติภาพก่อนอัปโหลดจะช่วยขจัดความผิดพลาดนี้ได้ แม้ว่าตัวไฟล์จะมีขนาดต่ำกว่าขีดจำกัดอยู่แล้วก็ตาม
ขนาดภาพย่อที่ WordPress สร้างขึ้น
WordPress จะสร้างสำเนาเพิ่มเติมอย่างน้อย 4 ชุดสำหรับทุกๆ ไฟล์ที่อัปโหลด และธีมกับปลั๊กอินมักจะเพิ่มเข้ามาอีกหลายชุด ภาพถ่ายเพียงรูปเดียวสามารถกลายเป็นไฟล์ 8 หรือ 10 ไฟล์บนดิสก์โดยที่เจ้าของเว็บไซต์ไม่เคยเห็นเลยด้วยซ้ำ
ค่าเริ่มต้นคือภาพย่อ (thumbnail) ขนาด 150x150 พิกเซล, ขนาดกลาง (medium) 300 พิกเซล, ขนาดกลางค่อนข้างใหญ่ (medium large) 768 พิกเซล และขนาดใหญ่ (large) 1024 พิกเซล ควบคู่ไปกับเวอร์ชันปรับขนาดที่ WordPress สร้างขึ้นสำหรับการอัปโหลดขนาดใหญ่มากๆ ตัวสร้างหน้าเว็บและปลั๊กอินแกลเลอรีต่างก็ลงทะเบียนขนาดของตัวเองเพิ่มเข้าไปอีก การอัปโหลดไฟล์ต้นฉบับที่มีขนาดเล็กกว่าย่อมหมายความว่าไฟล์ที่ได้จากการแปลงทั้งหมดจะมีขนาดเล็กตามไปด้วย ซึ่งเป็นเหตุผลว่าทำไมการบีบอัดก่อนอัปโหลดจึงส่งผลดีทวีคูณทั่วทั้งคลังสื่อ
การรองรับ WebP ใน WordPress
WordPress รองรับการอัปโหลดไฟล์ WebP ตั้งแต่เวอร์ชัน 5.8 เป็นต้นมา และเบราว์เซอร์ปัจจุบันทั้งหมดก็รองรับการแสดงผลรูปแบบนี้ การอัปโหลดไฟล์ WebP โดยตรงจะช่วยหลีกเลี่ยงการใช้ปลั๊กอินแปลงไฟล์ที่เว็บไซต์จำนวนมากติดตั้งไว้เพื่อจุดประสงค์เดียวกัน
มีข้อควรระวังสองประการคือ ธีมรุ่นเก่าและตัวสร้างหน้า็เว็บจำนวนมากยังคงสันนิษฐานว่าเป็น JPG หรือ PNG และอาจสร้างภาพย่อ WebP ได้ไม่ถูกต้อง ดังนั้นควรตรวจสอบการอัปโหลดทดสอบก่อนที่จะแปลงคลังสื่อทั้งหมด รูปภาพที่มีไว้สำหรับให้ผู้เยี่ยมชมดาวน์โหลด เช่น ชุดข้อมูลข่าวสารหรือคู่มือที่พิมพ์ได้ ควรเป็นไฟล์ JPG ต่อไป เนื่องจาก WebP ยังคงใช้งานได้ไม่สะดวกนักนอกเหนือจากในเบราว์เซอร์
การตรวจสอบน้ำหนักของรูปภาพบนหน้าเว็บจริง
เปิดเครื่องมือสำหรับนักพัฒนาด้วยปุ่ม F12 สลับไปที่แท็บ Network กรองเฉพาะรูปภาพ (Images) แล้วรีโหลดหน้าเว็บ แผงควบคุมจะแสดงรายการรูปภาพทั้งหมดพร้อมขนาดการถ่ายโอนจริง โดยเรียงจากขนาดใหญ่ที่สุดก่อน
มุมมองนั้นจะตอบคำถามได้โดยตรงแทนที่จะเป็นการคาดเดา ให้มองหารูปภาพเดี่ยวที่มีขนาดเกิน 500 KB และหน้าเว็บใดก็ตามที่รูปภาพรวมกันมีขนาดมากกว่า 2 MB ไฟล์ที่ใหญ่ที่สุดมักจะเป็นไฟล์ที่คุ้มค่าแก่การแก้ไขก่อนเสมอ และโดยปกติแล้วมักจะเป็นภาพส่วนหัว (header image) หรือภาพถ่ายแรกในโพสต์ การแก้ไขรูปภาพ 2 หรือ 3 รูปมักจะช่วยลดน้ำหนักส่วนเกินส่วนใหญ่บนหน้าเว็บลงได้
การแก้ไขคลังสื่อที่มีขนาดใหญ่เกินไปอยู่แล้ว
บีบอัดคลังสื่อที่มีอยู่แทนที่จะทำเฉพาะกับการอัปโหลดใหม่ๆ เท่านั้น เพราะโพสต์เก่าๆ คือตัวแบกน้ำหนักส่วนใหญ่บนเว็บไซต์ที่มีมานาน บล็อกที่เปิดมาเป็นเวลา 5 ปีอาจมีรูปภาพที่ยังไม่บีบอัดนับพันรูป
ดาวน์โหลดโฟลเดอร์ uploads ประมวลผลแบบแบตช์เดียว และแทนที่ไฟล์โดยใช้ชื่อเดิมเพื่อให้โพสต์ที่มีอยู่ยังคงทำงานได้ต่อไป การสร้างภาพย่อใหม่ (regenerate thumbnails) หลังจากนั้นจะช่วยสร้างขนาดภาพย่อขึ้นมาใหม่จากต้นฉบับที่เล็กกว่า ให้ทำการสำรองข้อมูลก่อนที่จะแทนที่สิ่งใดๆ เนื่องจากนี่เป็นหนึ่งในงานเกี่ยวกับรูปภาพเพียงไม่กี่งานที่ทำการเขียนทับไฟล์เดิมทันที
การประมวลผลโฟลเดอร์ uploads ทั้งหมด
วางโฟลเดอร์ลงไปในรูปแบบไฟล์ ZIP และรูปภาพที่รองรับทั้งหมดข้างในจะถูกแตกไฟล์ ปรับขนาด และบีบอัดได้ภายในรอบเดียว สามารถประมวลผลไฟล์ได้สูงสุด 500 ไฟล์ต่อชุด ซึ่งครอบคลุมเว็บไซต์ขนาดเล็กและขนาดกลางส่วนใหญ่ได้ในเวลาไม่กี่รอบ
ทุกอย่างเกิดขึ้นภายในเบราว์เซอร์ของคุณบนหน่วยประมวลผลของคุณเอง ดังนั้นเว็บไซต์ของลูกค้า ฉบับร่างที่ยังไม่ได้เผยแพร่ และแกลเลอรีส่วนตัวจึงไม่มีทางถูกส่งไปยังเซิร์ฟเวอร์ภายนอก เรื่องนี้มีความสำคัญสำหรับเอเจนซี่ที่ทำงานภายใต้สัญญา ซึ่งการอัปโหลดคลังสื่อของลูกค้าไปยังบริการบีบอัดที่ไม่รู้จักอาจถือเป็นการละเมิดข้อตกลง แม้ว่าจะไม่มีอะไรผิดพลาดเกิดขึ้นก็ตาม