เกิด Fatal error: Maximum execution time ตอน upload ไฟล์ขนาดใหญ่
วันนี้พบปัญหาตอน upload file ขนาดใหญ่ (ประมาณ 6MB) แล้วเจอ error:
Fatal error: Maximum execution time of 30 seconds exceeded in c:\inetpub\wwwroot\example.com\your-file.php on line 2
ซึ่งถ้าปกติ คิดแบบหยาบๆ คิดง่ายๆ เราก็มักจะแก้ "Maximum execution time" ด้วย
<?php
set_time_limit(60 * 60);
... // code การทำงานอื่นๆ
?>
แต่โดยส่วนตัว ถ้าเกิด error นี้ผมจะกลับไปไล่ดูการทำงานดูก่อน ว่ามันควรจะทำงานนานเกิน 30 วินาทีนี่จริงๆ หรือ เช่นถ้านานเพราะการ query database ก็จะต้องหาทางปรับให้มันทำงานเร็วขึ้นให้ได้ก่อน สุดวิสัย หรือ จำเป็นจริงๆ ถึงจะแก้ปัญหาโดยการใส่ "set_time_limit()"
แต่ใน case นี้ ผมใส่เพิ่มเวลาให้แล้วก็ไม่หาย และย้อนไปไล่ดูใน source code ... อ้าวบรรทัดที่ 2 มันก็ไม่ได้มีอะไรที่จะทำงานนานนี่หว่า ลองแก้ code โดยเคาะ code ต่างๆ ให้ลงมา โดยไม่ได้อยู่บรรทัดที่ 2 แน่ๆ แต่ error ก็ยังแจ้งว่า "line 2" อยู่ดี
ก็เลยมาสังเกตุดูตอน upload file (โชคดีที่ใช้ Google Chrome) พอ upload ได้ 100% ปุ๊บ ตายปั๊บ นี่แสดงว่ามันยังไม่ได้ทำงานอื่นเลย เพียงแค่ upload ไฟล์เสร็จก็ตายเลย
ลอง google ดู และตั้งสติละลึกดูเล็กน้อยจึงถึงบางอ้อ ... script มันตายตอนรับ input เสร็จ (การ upload คือการส่ง input ให้ php นำไปประมวลผล) จากนั้นไปไล่ดู config ใน php.ini ที่น่าจะเกี่ยวข้อง ก็เห็นตัวนึง "max_input_time" ก็เลยแก้เป็น
;max_input_time = 60 ; เวลามากสุด (เป็นวินาที) สำหรับรับข้อมูลเข้า
max_input_time = 600 ; ตั้งใหม่ ให้เป็น 10 นาทีไปเลย อันนี้ต้องคำนึงถึงความเหมาะสม
; ความปลอดภัย และทรัพยากรณ์ของ server ของเราด้วยน้ะครับ
ข้อมูลเพิ่มเติม:
"max_input_time" ใน php.ini เวลาสุงสุด ในการแยกแยะ (parsing) ข้อมูลเข้า เช่นจาก POST หรือ GET ซึ่งนับจากช่วงเวลาที่รับข้อมูลเข้ามาทั้งหมด ก่อนที่จะส่งไปประมวลผล หรือคิดง่ายๆว่า คือเวลาสูงสุดในการรอรับข้อมูลเข้า ที่ต้องมีการกำนหดไว้ เพื่อความปลอดภัย เช่น กรณีที่มีคนแอบส่งข้อมูลเข้า php script เราปริมาณมากๆๆๆๆๆ ก็ต้องมีการดักกันไว้ซักหน่อย
- roteee's blog
- Log in or register to post comments
- 427 reads
Recent comments