PDA

View Full Version : سوال: رفع ریشه ایی این خطا : Fatal error: Maximum execution time of 30 seconds exceeded



Variable
سه شنبه 11 تیر 1392, 23:02 عصر
سلام
این خطا
Fatal error: Maximum execution time of 30 seconds exceeded

یک اسکریپتی نوشتم که عملیاتش خیلی طولانیه . مثلاتمام صفخات و محتوای یک سایت رو میخام واکشی کنم
منتها این عمل امکان پذیر نیست . ایا راه خلی میدونید که مشکل رو به صورت حرفه ایی حل کنه
ایا روش مولتی تردینگ تو پی اچ پی امکان داره ؟ مثلا چی کار کنم که حلقه while من که توش بدنه اصلی برنامم هست.
به صورت ناهمگام عمل کنه . و کله اسکریپت متوقف نشه تا اینکه اون حلقه تموم بشه
لطفا راهنمایی کنید که موقع لود فایل یکدفعه متوقف نشم و یه جوری در بکگراند عملیات رو انجام بده
متشکرم

Yuness Mehdian
سه شنبه 11 تیر 1392, 23:33 عصر
من مولتی تردینگ کار نکردم ولی یک راه حل خیلی ساده به نظرم اومد . میتونید یک کپی از اسکریپت با یک اسم دیگه کنارش ذخیره کنید یعنی دقیقا خودش باشه و همون کار رو انجام بده . ابتدا فایل اول اجرا میشه و اگه قبل از 30 ثانیه کار تموم نشد نتیجه ی کار ذخیره بشه و اسکریپت دوم رو ران کنه و خودش بسته بشه . اسکریپت دوم هم چک میکنه نتیجه کار رو ادامه میده تا کار تموم بشه یا 30 ثانیه تموم بشه و دوباره اسکریپت اول رو ران میکنه و این حلقه ادامه پیدا میکنه تا کار تموم بشه .

dousti_design
چهارشنبه 12 تیر 1392, 00:00 صبح
با اجازه دوست عزیز Yuness Mehdian
توی کدتون این دستور رو قرار بدید:


set_time_limit(0);

یا توی فایل php.ini اینو:


max_execution_time = 0

راجع به Multi Threading هم چند وقت پیش یکی از دوستان یک لایبرری گذاشته بود یه سرچ کنید مطلب زیاده

Variable
چهارشنبه 12 تیر 1392, 07:47 صبح
ممنونم . عالیه .
منتها من به یه چیز کوچیک دیگه نیاز دارم .
اونم اینه که . میخام کاری کنم . که اطلاعات هر چقدر اومد. بتونم بهشون دسترسی داشته باشم .
نمیخام طوری باشه . که منتظر باشم یک دفعه کل اطلاعات لود بشه و بعد بتونم بهشون دسترسی داشته باشم .

MMSHFE
چهارشنبه 12 تیر 1392, 08:06 صبح
باید از AJAX استفاده کنید.

Variable
چهارشنبه 19 تیر 1392, 23:26 عصر
ببینید.
در زبان پی اچ پی اگه یه همچین کدی داشته باشیم.



for($i=0;$i<10;%i++)
{
echo 'hello';
/*
other instruction
*/
}


زبان پی اچ پی . ابتدا همه حلقه رو اجرامیکنه .همه دستورات خروجی کش میشه و بعد به صورت یکجا اونهارو به سمت کلاینت میفرسته
حالا من حالتی رو مد نظرم هست که هر بار دستور echo اجرا شد. نتیجه بلافاصله به کلاینت فرستاده بشه
توابعی مثله ob_start()
, ob_flush()...
میگن این کارو میکنه .
میخاستم بدونم اینکار چیجوری امکان پذیر هست. چون نتونستم نتیجه دلخواه رو از این توابع بگیرم یا اینکه من اشتباه استفاده کردم
ممنون میشم راهنماییم کنید . با تشکر