ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming[php] ถ้าเจอ Fatal error: Maximum execution time แล้วอยากให้มันทำต่อ ทำได้ไหม
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [php] ถ้าเจอ Fatal error: Maximum execution time แล้วอยากให้มันทำต่อ ทำได้ไหม  (อ่าน 4413 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« เมื่อ: 23 พฤษภาคม 2010, 17:54:34 »

เขียนด้วย 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
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 9
ออฟไลน์ ออฟไลน์

กระทู้: 1,212



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 23 พฤษภาคม 2010, 19:11:00 »

ต้องเพิ่ม 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
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 333
ออฟไลน์ ออฟไลน์

กระทู้: 2,721



ดูรายละเอียด
« ตอบ #2 เมื่อ: 23 พฤษภาคม 2010, 19:20:47 »

คืออยากจะอธิบายว่า 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
Verified Seller
สมุนแก๊งเสียว
*

พลังน้ำใจ: 28
ออฟไลน์ ออฟไลน์

กระทู้: 888



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 23 พฤษภาคม 2010, 19:22:27 »

ตามข้างบนครับ แต่จะบอกว่าถ้าเป็น production แล้ว อย่าพยายาม unlimit time มันจะครับ เพราะถ้าตั้งไว้มากๆๆ มีผลทำให้ระบบช้า
 Tongue
บันทึกการเข้า

quioxz
Newbie
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 45



ดูรายละเอียด
« ตอบ #4 เมื่อ: 23 พฤษภาคม 2010, 21:37:43 »

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

พลังน้ำใจ: 4
ออฟไลน์ ออฟไลน์

กระทู้: 106



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 24 พฤษภาคม 2010, 20:29:22 »

แนะนำนะครับ ผมเคยเจออาการแบบนี้ ลองเช็คคิวรี่ ที่ time เยอะที่สุดนะครับ แล้วหาวิธีเขียนการ query แบบใหม่ ดูนะครับ  wanwan019
บันทึกการเข้า

http://www.plazacool.com/ << เปิดร้านขายของออนไลน์
supachet2526
สมุนแก๊งเสียว
*

พลังน้ำใจ: 34
ออฟไลน์ ออฟไลน์

กระทู้: 771



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 24 พฤษภาคม 2010, 20:45:17 »

ini_set('max_execution_time', 300);
ผมเคยเจอบ่อยต่อ php ต่อ oracle กับ mssql แต่ mysql สบายไม่มีปัญหาครับ  Tongue Tongue
บันทึกการเข้า

รับเขียนเว็บไซต์
บริษัทรับออกแบบเว็บไซต์

ขายบ้านมือสอง

ถ้าคุณลงมือทำในสิ่งที่คุณสนใจอยู่เสมอ อย่างน้อยจะมีคนคนหนึ่งที่พอใจ
GillBate
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 160
ออฟไลน์ ออฟไลน์

กระทู้: 1,236



ดูรายละเอียด
« ตอบ #7 เมื่อ: 24 พฤษภาคม 2010, 21:13:37 »

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

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