แก้ Error Maximum Execution Time Exceeded ใน PHP

สคริปต์ทำงานนานเกินไปจนเว็บ Error ตั้งค่า Timeout ใหม่ได้ในไม่กี่นาที

แก้ Error Maximum Execution Time Exceeded ใน PHP PHP

max_execution_time คืออะไร?

max_execution_time คือค่า (parameter) ใน PHP ที่บอกว่า "สคริปต์ PHP ใช้เวลาประมวลผลได้ยาวที่สุดเท่าไหร่ (วินาที) ก่อนเกิด Timeout" เมื่อสคริปต์ใช้เวลานานกว่าค่านี้ Web Server จะยกเลิก (Kill) สคริปต์นั้นโดยอัตโนมัติ ทำให้เว็บแสดง "Error 500 - Maximum Execution Time Exceeded"

ค่าเริ่มต้นปกติคือ 30 วินาที ส่วนใหญ่เพียงพอ แต่บางสคริปต์ (เช่น การ Backup Database, Bulk Export/Import) ต้องใช้เวลานานกว่า 30 วินาที

สาเหตุที่สคริปต์ใช้เวลานาน

สาเหตุทั่วไป:

วิธีแก้ 1: เพิ่ม max_execution_time ใน cPanel

ขั้นตอน:

  1. Login เข้า cPanel https://yourdomain.com:2083
  2. หาส่วน Software > Select PHP Version หรือ MultiPHP Manager
  3. เลือก Domain ของคุณ
  4. คลิก Switch to PHP Options (เพื่อแสดงตัวเลือกการตั้งค่า)
  5. ค้นหา max_execution_time และเปลี่ยนค่า:
    • ค่าเริ่มต้น: 30 วินาที
    • สำหรับการ Backup/Large File: 300 วินาที (5 นาที)
    • สำหรับการทำงาน Background: 600 วินาที (10 นาที)
    • ห้ามตั้งเกิน 900 วินาที (15 นาที) เพราะ Web Server ตัวเอง (Apache/Nginx) อาจ Timeout ก่อนก็ได้
  6. คลิก Apply หรือ Save

วิธีแก้ 2: เพิ่ม max_execution_time ใน .htaccess

ถ้า cPanel ไม่มีตัวเลือก PHP Version Management ให้ใช้วิธีนี้:

  1. เชื่อมต่อ Hosting ผ่าน FTP หรือ File Manager ใน cPanel
  2. ไปยัง public_html (root folder ของเว็บ)
  3. หาไฟล์ .htaccess ถ้ามีอยู่ให้ Edit ถ้าไม่มีให้สร้างไฟล์ใหม่ชื่อ .htaccess
  4. เพิ่มบรรทัดต่อไปนี้:
php_value max_execution_time 300

ตัวเลือกอื่น ๆ ที่เกี่ยวข้องที่ควรเพิ่มใน .htaccess เดียวกันนี้:

php_value max_execution_time 300
php_value max_input_time 300
php_value memory_limit 256M
php_value upload_max_filesize 100M
php_value post_max_size 100M

ความหมาย:

วิธีแก้ 3: เพิ่ม max_execution_time ใน php.ini (สำหรับ VPS หรือ Dedicated)

วิธีนี้ใช้ได้สำหรับ VPS หรือ Dedicated Server เท่านั้น (Shared Hosting ปกติจะไม่มี php.ini ให้แก้)

# 1. เชื่อมต่อ SSH (VPS หรือ Dedicated เท่านั้น)
ssh user@your-server-ip

# 2. หา php.ini
locate php.ini
# หรือดู Apache Configuration
grep -r "php.ini" /etc/apache2/

# 3. Edit php.ini (ต้อง root)
sudo nano /etc/php/8.0/apache2/php.ini
# ค้นหา "max_execution_time" ตั้งค่า:
max_execution_time = 300

# 4. Save (Ctrl+O, Enter, Ctrl+X)

# 5. Restart Apache
sudo systemctl restart apache2

วิธีแก้ 4: ตั้งค่า max_execution_time ใน PHP Code (WordPress Plugin)

ในบางสถานการณ์ สามารถตั้งค่า max_execution_time โดยตรงใน PHP Code ได้:

// สำหรับ WordPress Plugin หรือ PHP Script ที่ต้องใช้เวลานาน
set_time_limit(300); // ตั้ง max_execution_time เป็น 300 วินาที

// หรือสำหรับ WordPress:
// ใส่บรรทัดนี้ใน wp-config.php ก่อน "That's all, stop editing!":
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');

ข้อควรระวัง: ไม่ใช่ทุก Hosting ที่อนุญาต set_time_limit() ใน PHP Code ด้วยเหตุผลด้านความปลอดภัย

Tip: ไม่ควรตั้ง max_execution_time มากเกินไป (เช่น 0 = ไม่มีจำกัด) เพราะจะทำให้ Slow Script ทำงานไม่สิ้นสุด และกินทรัพยากร Server ไปเปล่า ๆ ควรตั้งให้เหมาะสม เช่น 300 วินาที (5 นาที) สำหรับการ Backup

ตรวจสอบว่า max_execution_time เปลี่ยนไปแล้ว

หลังจากเปลี่ยนค่า ให้ตรวจสอบด้วยขั้นตอนต่อไปนี้:

// 1. สร้างไฟล์ PHP ชื่อ phpinfo.php ใน public_html
// เพิ่มบรรทัด:


// 2. เข้าเว็บ https://yourdomain.com/phpinfo.php ผ่านเบราว์เซอร์
// ค้นหา "max_execution_time" บนหน้า

// 3. ตรวจสอบคอลัมน์ "Local Value" ว่าเป็นค่าใหม่หรือยัง

// 4. สำหรับ WordPress ลองใส่บรรทัดใน wp-config.php:
echo 'max_execution_time: ' . ini_get('max_execution_time') . ' seconds';
Tip: หลังตรวจสอบเสร็จแล้ว ให้ลบไฟล์ phpinfo.php ทิ้งเพื่อความปลอดภัย เพราะไฟล์นี้เผยข้อมูลเซิร์ฟเวอร์ให้กับ Hacker

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

Error: "Maximum Execution Time Exceeded" ยังเกิดขึ้นแม้เพิ่ม max_execution_time แล้ว

อาจเกิดจาก:

วิธีแก้: ตรวจสอบ Apache Configuration ว่า TimeOut เท่าไหร่ (ปกติ 300 วินาที) ถ้า max_execution_time > TimeOut ของ Apache ให้เพิ่ม TimeOut ใน Apache Config ด้วย หรือลองรัน Backup/Task นั้นโดยใช้ Background Task (Cron Job) แทนการรัน HTTP Request ตรง ๆ

Error: "ไม่สามารถ Edit .htaccess ได้"

อาจเกิดจาก:

วิธีแก้: ลองใช้ cPanel PHP Options แทน หรือติดต่อ Hosting Provider ขอให้เปิดใช้ php_value ใน .htaccess

Error: "WordPress Database Backup Plugin ยังคงหมดเวลา"

Backup Plugin ส่วนใหญ่ต้องใช้เวลานาน เพราะต้อง Dump Database ทั้งหมดแล้ว Compress

วิธีแก้: ลองใช้ Backup Plugin ที่รองรับการทำงานใน Background (เช่น BackWPup ที่ใช้ Cron Schedule) แทนการรัน Backup ผ่าน HTTP Request ตรง หรือลองเพิ่ม max_execution_time เป็น 600 วินาที (10 นาที) ลองดำเนินการ Backup ใหม่

Error: "php_value ใน .htaccess ไม่มีผล"

อาจเกิดจาก:

วิธีแก้: ตรวจสอบว่า .htaccess อยู่ไฟล์ที่ถูกต้อง (public_html) แล้ว Restart Web Server ลองใช้ cPanel PHP Options แทน หรือติดต่อ Hosting Provider

Error: "การเพิ่ม max_execution_time ทำให้เว็บ Crash"

อาจเกิดจากการตั้งค่า php_value ที่ Syntax ผิด หรือเซิร์ฟเวอร์โหลด php_value ผิดประการ

วิธีแก้: ลบบรรทัด php_value ที่เพิ่มออกจาก .htaccess ไปชั่วคราว แล้ว Restart Web Server ถ้าเว็บกลับมาใช้ได้ หมายถึง Syntax ผิด ให้ตรวจสอบการเขียน php_value ใหม่


คำถามที่พบบ่อย

Q: ตั้ง max_execution_time เป็นเท่าไร ดี?

A: ขึ้นอยู่กับชนิดของงาน ปกติ 30-60 วินาที พอ สำหรับ Backup/Export Database ให้ตั้ง 300 วินาที (5 นาที) สำหรับการประมวลผลขนาดใหญ่ ให้ตั้ง 600 วินาที (10 นาที) แต่ไม่ควรเกิน 900 วินาที (15 นาที) เพราะ Web Server จะ Timeout อยู่ดี

Q: max_execution_time และ max_input_time ต่างกันหรือ?

A: max_execution_time นับเวลาการประมวลผลสคริปต์ทั้งหมด ส่วน max_input_time นับเฉพาะเวลารอ Input Data (POST/GET) ถ้าสคริปต์ต้องรอข้อมูลนาน ต้องเพิ่มทั้งสองค่า

Q: ตั้ง max_execution_time = 0 (ไม่มีจำกัด) ได้หรือ?

A: ไม่ควร ตั้ง 0 หมายถึง PHP ไม่มีข้อจำกัดเวลา ถ้าสคริปต์ติดตัว (Infinite Loop) มันจะทำงานไม่สิ้นสุดและกินทรัพยากร Server ไปเปล่า ๆ ควรตั้งค่าที่สมเหตุสมผล เช่น 300 หรือ 600 วินาที