[php] ถ้าเจอ Fatal error: Maximum execution time แล้วอยากให้มันทำต่อ ทำได้ไหม

เริ่มโดย ohmohm, 23 พฤษภาคม 2010, 17:54:34

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

ohmohm

เขียนด้วย php ถ้าเจอ Fatal error: Maximum execution time of 30 seconds exceeded in ... แล้วอยากให้มันทำคำสั่งต่อไป ทำได้ไหม โดยเฉพาะถ้ามันอยู่ใน loop แบบว่าถ้ามัน time out ก็ช่างหัวมันเลย ทำ loop ต่อไป

เท่าที่ค้นๆ หาไม่เจอที่ต้องการ  ใช้ @ มันก็แค่ไม่พ่นข้อผิดพลาด แต่คำสั่งถัดไปก็ไม่ทำ
http://www.thaiseoboard.com/index.php/topic,39617.0.html
http://www.narisa.com/forums/index.php?showtopic=26277

amaudy

ต้องเพิ่ม maximum execute time ครับ มีสามวิธีครับ เลือกเอาตามสะดวกนะครับ

- ใช้ฟังก์ชัน set_time_limit(time_in_second) ref -> http://php.net/manual/en/function.set-time-limit.php ใส่ไว้ในสคริปต์
- หรือเพิ่มใน .htaccess แบบนี้ครับ

php_value max_execution_time 60

- หรือเพิ่มใน php.ini ครับ มองหาบรรทัดที่เขียนว่า max_execution_time นะครับ เปลี่ยนเสร็จอย่าลืมรีสตาร์ท Apache นะครับ

kongpair

คืออยากจะอธิบายว่า PHP ประมวลผลแบบเป็นลำดับขั้นครับ
มันจะไม่ไปต่อจนกว่า จะเสร็จกระบวนการที่กำลังทำอยู่


ถ้าคิดว่า จะข้ามขั้นตอนที่กินเวลานานจริง ๆ ต้องเอา loop เข้าไป อยู่ใน function แล้ว สั่งให้ die หรือ break ในเวลาที่กำหนด จากนั้นมันถึงจะไปโปรเซสอื่น ๆ ได้ครับ


แต่มันก็มีวิธีให้รันครบทุกโปรเซสแม้ว่าเราจะปิด Browser ไปแล้วก็ตาม

โดยการเพิ่ม 2 ฟังชั่นนี้เข้าไปครับ

set_time_limit(0);       //ตั้งให้ไม่มี time limit รันไปจนกว่าจะจบ
ignore_user_abort(1);    //สั่งให้รันต่อแม้ว่าจะปิด Browser ไปแล้วก็ตาม



อ่านข้อมูลเพิ่มที่นี่ครับ
http://www.php.net/manual/ro/function.ignore-user-abort.php

powerbeer001

ตามข้างบนครับ แต่จะบอกว่าถ้าเป็น production แล้ว อย่าพยายาม unlimit time มันจะครับ เพราะถ้าตั้งไว้มากๆๆ มีผลทำให้ระบบช้า
:P
อ้างถึง
[direct=https://www.examvify.com] ระบบฐานข้อมูลข้อสอบและห้องสอบออนไลน์ฟรี [/direct]

อ้างถึง
[direct=https://www.posvis.com] โปรแกรมบริหารร้านค้า POS ฟรี [/direct]

quioxz

นอกจากข้างบนก้ยังมีฟังค์ชั่น register_shutdown_function
ลองหาข้อมูลวิธีใช้ดูละกันครับ
คือพอ timeout ปุ๊ป สคริปในส่วนของการชัตดาวก็จะทำงาน
ทำให้เราได้เวลาเพิ่มเป็น 2เท่า (แต่ต้องเขียนโค้ดให้มันทำงานต่อเนื่องเองนะ ^^)

akesiwaz

แนะนำนะครับ ผมเคยเจออาการแบบนี้ ลองเช็คคิวรี่ ที่ time เยอะที่สุดนะครับ แล้วหาวิธีเขียนการ query แบบใหม่ ดูนะครับ  :wanwan019:
http://www.plazacool.com/ << เปิดร้านขายของออนไลน์

supachet2526

ini_set('max_execution_time', 300);
ผมเคยเจอบ่อยต่อ php ต่อ oracle กับ mssql แต่ mysql สบายไม่มีปัญหาครับ  :P :P
[direct=https://www.webunique.in.th]รับเขียนเว็บไซต์ [/direct]
[direct=https://www.webunique.in.th]บริษัทรับออกแบบเว็บไซต์ [/direct]

[direct=https://www.baansecondhand.com]ขายบ้านมือสอง[/direct]

ถ้าคุณลงมือทำในสิ่งที่คุณสนใจอยู่เสมอ อย่างน้อยจะมีคนคนหนึ่งที่พอใจ

GillBate

 :P เจอเหมือนกันครับ จะเป็นทุกครั้งตอนใช้โค้ดอ่ะครับ ยกเว้นว่าลิมิตแล้วจะทำได้
while(mysql_fetch_array($ooo)){
...
}

สุดท้ายก็ต้องเปลี่ยนไปหา num rows แล้วมาใส่ while($i < $num){... อะไรประมาณนี้แทน
แต่ก็งงกับมันอยู่ดี เป็นบ่อยทีเดียว