ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ปรับค่า PHP (memory_limit, max_execution_time) บน Plesk

ปรับค่า PHP (memory_limit, max_execution_time) บน Plesk

ค่าตั้งต้นของ PHP เช่น หน่วยความจำ 128 MB หรือเวลาทำงานสูงสุด 30 วินาที เพียงพอสำหรับเว็บทั่วไป แต่เว็บที่ใช้ Page Builder ปลั๊กอินร้านค้า การนำเข้าสินค้าจำนวนมาก หรือการอัปโหลดไฟล์ใหญ่ มักชนขีดจำกัดเหล่านี้ อาการที่พบคือ Error Allowed memory size exhausted, Maximum execution time of 30 seconds exceeded, อัปโหลดไฟล์ไม่ผ่าน หรือบันทึกหน้าเมนูแล้วรายการหาย

Plesk ให้ปรับค่าเหล่านี้แยกรายโดเมนได้จากหน้าจอ โดยไม่กระทบเว็บอื่นบนเซิร์ฟเวอร์ บทความนี้อธิบายความหมายของแต่ละค่า วิธีปรับ และวิธีตรวจว่าค่าใหม่มีผลจริง ส่วนการเปลี่ยนเวอร์ชัน PHP ดูได้ที่ การเปลี่ยนเวอร์ชั่น PHP ใน Plesk

สิ่งที่ต้องเตรียม

  • บัญชีเข้า Plesk Obsidian ของเว็บไซต์ ที่มีสิทธิ์ปรับตั้งค่า PHP (ผู้ให้บริการอาจล็อกบางค่าไว้ในแพ็กเกจ)
  • ข้อความ Error ที่พบ เพื่อรู้ว่าต้องปรับค่าใด ดูวิธีหาได้ใน ดู Log เว็บไซต์บน Plesk เพื่อหาสาเหตุ Error

ความหมายของค่าที่ปรับบ่อย

ค่าควบคุมอะไรค่าที่ใช้บ่อย
memory_limitหน่วยความจำสูงสุดที่สคริปต์หนึ่ง Request ใช้ได้256M สำหรับ WordPress ทั่วไป, 512M สำหรับร้านค้าขนาดใหญ่
max_execution_timeเวลาสูงสุด (วินาที) ที่สคริปต์ทำงานได้60-120 สำหรับงานนำเข้า/ส่งออก
max_input_timeเวลาสูงสุดที่ใช้รับข้อมูลที่ส่งเข้ามา เช่น ไฟล์อัปโหลด60-120
post_max_sizeขนาดข้อมูลรวมสูงสุดของฟอร์มหนึ่งครั้งต้องมากกว่าหรือเท่ากับ upload_max_filesize เช่น 128M
upload_max_filesizeขนาดไฟล์เดียวสูงสุดที่อัปโหลดได้64M-128M
max_input_varsจำนวนฟิลด์สูงสุดในฟอร์มหนึ่งครั้ง3000-5000 สำหรับเมนูหรือหน้าตั้งค่าขนาดใหญ่

หลักง่ายๆ คือ memory_limit ควรมากกว่า post_max_size และ post_max_size ควรมากกว่าหรือเท่ากับ upload_max_filesize อย่าตั้ง memory_limit สูงเกินจำเป็น เช่น 2G เพราะถ้ามีสคริปต์ผิดพลาดหลายตัวทำงานพร้อมกัน หน่วยความจำของทั้งเซิร์ฟเวอร์อาจหมด

ขั้นตอนที่ 1: เปิดหน้าตั้งค่า PHP

  1. ไปที่ Websites & Domains เลือกโดเมนที่ต้องการ
  2. กด PHP หรือ PHP Settings (ชื่อปุ่มต่างกันตามเวอร์ชันของ Plesk ในบางมุมมองอยู่ใต้กลุ่ม Dev Tools)
  3. ด้านบนของหน้าจะแสดงเวอร์ชัน PHP และ Handler ที่ใช้ เช่น FPM application served by nginx หรือ FPM application served by Apache

ขั้นตอนที่ 2: ปรับค่า

  1. ในส่วน Performance and security settings หา memory_limit กดลูกศรเพื่อเลือกค่าที่มีให้ หรือพิมพ์ค่าเองในช่อง เช่น 256M
  2. ปรับ max_execution_time เป็น 120 และ max_input_time เป็น 120 ถ้ามีปัญหาเรื่อง Timeout
  3. ในส่วน Common settings ปรับ post_max_size และ upload_max_filesize ถ้ามีปัญหาเรื่องอัปโหลด
  4. ค่าที่ไม่มีในรายการ เช่น max_input_vars ให้เลื่อนลงไปที่ Additional configuration directives แล้วพิมพ์ในรูปแบบของ php.ini หนึ่งค่าต่อบรรทัด
max_input_vars = 5000
  1. กด OK หรือ Apply ที่ด้านล่างของหน้า Plesk จะเขียนการตั้งค่าและโหลด PHP ของโดเมนนั้นใหม่ให้เอง ไม่ต้อง Restart เซิร์ฟเวอร์

หมายเหตุ: ถ้าช่องใดปรับไม่ได้หรือเป็นสีเทา แปลว่าผู้ให้บริการล็อกค่านั้นไว้ในแพ็กเกจ ต้องติดต่อผู้ให้บริการ การใส่ค่าเดียวกันใน Additional configuration directives เพื่อเลี่ยงการล็อกอาจไม่มีผล หรือถูกเขียนทับเมื่อมีการซิงก์แพ็กเกจ

ขั้นตอนที่ 3: เรื่องที่ต้องรู้เกี่ยวกับ PHP-FPM

บน Plesk สำหรับ Linux ส่วนใหญ่ PHP ทำงานแบบ FPM ซึ่งมีผลกับวิธีตั้งค่า

  • ห้ามใส่ php_value หรือ php_flag ในไฟล์ .htaccess เมื่อใช้ FPM คำสั่งเหล่านี้ใช้ได้เฉพาะโหมด Apache Module เมื่อใช้กับ FPM มักทำให้เว็บขึ้น 500 Internal Server Error ทันที ให้ตั้งผ่านหน้า PHP Settings แทน
  • max_execution_time ที่เพิ่มขึ้นอาจยังชนเวลารอของ nginx หรือ Apache ที่อยู่ด้านหน้า ถ้าสคริปต์ทำงานเกินราว 60 วินาทีแล้วขึ้น 504 Gateway Time-out ทั้งที่ตั้ง PHP ไว้สูงแล้ว ให้ติดต่อผู้ดูแลเซิร์ฟเวอร์ งานที่ใช้เวลานานมากควรย้ายไปทำด้วย Cron หรือ Command Line แทนการรอผ่านหน้าเว็บ
  • ค่าของ PHP ที่ใช้ผ่าน Command Line (SSH, Cron) แยกจากค่าของเว็บ ถ้ารัน php -i บน SSH ค่าที่เห็นอาจไม่ตรงกับหน้าเว็บ

ตรวจสอบผลลัพธ์

วิธีที่แม่นที่สุดคือดูจาก PHP ที่เว็บใช้จริง สร้างไฟล์ชื่อสุ่มยากๆ เช่น info-8f3k2.php ในโฟลเดอร์ httpdocs ผ่าน File Manager ใส่เนื้อหา

<?php phpinfo();

เปิด https://example.com/info-8f3k2.php แล้วกด Ctrl + F ค้นคำว่า memory_limit คอลัมน์ Local Value ต้องเป็นค่าที่ตั้งใหม่ จากนั้นลบไฟล์นี้ทันที เพราะหน้า phpinfo เปิดเผยข้อมูลเซิร์ฟเวอร์ที่ผู้ไม่หวังดีนำไปใช้ได้

ถ้ามี SSH และต้องการตรวจค่าของ PHP เวอร์ชันเดียวกับเว็บผ่าน Command Line ให้เรียก PHP ของ Plesk ตามเวอร์ชัน (ตัวอย่างนี้คือ 8.3 เปลี่ยนตามเวอร์ชันที่ใช้) แต่ค่าที่ได้เป็นของ CLI ไม่ใช่ค่าของโดเมน

/opt/plesk/php/8.3/bin/php -i | grep -E "memory_limit|max_execution_time"

สำหรับ WordPress ให้ดูที่ Tools > Site Health > Info > Server ด้วย ซึ่งแสดง PHP memory limit และ Max input variables ที่เว็บเห็นจริง

ปัญหาที่พบบ่อย

ปรับ memory_limit แล้ว WordPress ยังแจ้งหน่วยความจำไม่พอ

WordPress มีค่าจำกัดของตัวเองแยกจาก PHP คือ WP_MEMORY_LIMIT ใน wp-config.php ดูวิธีปรับใน เพิ่ม Memory Limit ใน WordPress ถ้าเป็นเรื่องอัปโหลดไฟล์ ดู เพิ่มขนาดไฟล์อัปโหลดสูงสุดใน WordPress

เว็บขึ้น 500 ทันทีหลังแก้ .htaccess

มีคำสั่ง php_value ใน .htaccess ตามที่อธิบายในขั้นตอนที่ 3 เปิดไฟล์ด้วย File Manager ลบบรรทัดเหล่านั้นออก (หรือใส่ # นำหน้า) แล้วตั้งค่าผ่านหน้า PHP Settings แทน

อัปโหลดไฟล์ใหญ่แล้วขึ้น 413 Request Entity Too Large

Error นี้มาจาก nginx ไม่ใช่ PHP แปลว่าขนาดไฟล์เกินค่าที่ nginx ยอมรับ ซึ่งตั้งในส่วนการตั้งค่า Apache & nginx ของโดเมน (ต้องมีสิทธิ์ผู้ดูแล) ให้ติดต่อผู้ให้บริการพร้อมบอกขนาดไฟล์ที่ต้องการ

ค่าที่ตั้งกลับเป็นค่าเดิมเอง

ถ้าโดเมนผูกกับ Service Plan และผู้ดูแลซิงก์แพ็กเกจ ค่าที่ตั้งรายโดเมนอาจถูกเขียนทับด้วยค่าของแพ็กเกจ แจ้งผู้ให้บริการให้ปรับที่ระดับแพ็กเกจ

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อโดเมน ขั้นตอนที่ทำไปแล้ว และข้อความ Error ที่พบ เพื่อให้ทีมงานตรวจสอบได้เร็วขึ้น

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security