PDA

View Full Version : سوال: اجرای کد با مدت زمان زیاد



deceitful
یک شنبه 14 مهر 1392, 18:37 عصر
سلام دوستان
یه کد php دارم که حدود 2 تا 3 روز طول میکشه که اجراش تکمیل بشه
اما حدودا نیم ساعت که اجرا میشه خودش stop میشه
به این مشکل که خوردم اومدم کاری کردم که هر 10 دقیقه یکبار صفحه refresh بشه (البته مشکلی پیش نمیاد توی کدم اگه refresh بشه و از ادامه ی روند کارش رو دنبال میکنه) با این کد

echo "<script>window.location = '" . $Url . "';</script>";
اما باز هم محدودیت زمانی هست و متوقف میشه

اگه راهنمایی ای یا ایده ای به ذهن کسی میرسه ممنون میشم اطلاع بده

MRmoon
یک شنبه 14 مهر 1392, 18:45 عصر
از تابع header خود php استفاده كنيد.

يا به اين صورت:


set_time_limit(0)

ديگه اسكرپيت متوقف نميشه.

trasilver
یک شنبه 14 مهر 1392, 18:47 عصر
مگه کدش چی هست که 2-3 روز طول می کشه ؟ بهتره که شما کدتون رو بهینه بکنید در مدت زمان کمتری اجرا بشه ...
البته برای افزایش تایم محدودیت هم می تونید از تابع
set_time_limit() استفاده بکنید .

deceitful
یک شنبه 14 مهر 1392, 18:50 عصر
از تابع header خود php استفاده كنيد.

يا به اين صورت:


set_time_limit(0)

ديگه اسكرپيت متوقف نميشه.

از اون هم استفاده میکنم... اون نباشه که همین نیم ساعت هم اجرا نمیشه

MRmoon
یک شنبه 14 مهر 1392, 18:51 عصر
header( "Refresh: 16000" );

اون عدد رو به عدد دلخواه عوض كنيد(ثانيه است)

deceitful
یک شنبه 14 مهر 1392, 18:52 عصر
مگه کدش چی هست که 2-3 روز طول می کشه ؟ بهتره که شما کدتون رو بهینه بکنید در مدت زمان کمتری اجرا بشه ...
البته برای افزایش تایم محدودیت هم می تونید از تابع
set_time_limit() استفاده بکنید .

استفاده کردم از این تابع، ولی انگار الکی هست!!
کد بهینه هست
تعداد عملیات خیلی بالاست، البته هر ماه 2 بار بیشتر انجام نمیشه
ولی با این وضعیتی که داره هر بار که بخوام کامل اجراش کنم باید 2 هفته کامل پشت سیستم باشم!

deceitful
یک شنبه 14 مهر 1392, 18:53 عصر
header( "Refresh: 16000" );

اون عدد رو به عدد دلخواه عوض كنيد(ثانيه است)

مشکلم اینجاست که نمیتونم از این تابع استفاده کنم... خروجی هایی دارم قبل از این

deceitful
یک شنبه 14 مهر 1392, 19:02 عصر
header( "Refresh: 16000" );

اون عدد رو به عدد دلخواه عوض كنيد(ثانيه است)

البته اگه کار کنه اون خروجی ها رو حذف میکنم، اونقدر مهم نیستن
ولی الان هم دارم refresh میکنم با جاوا اسکریپت و جواب نداده
بنظرتون این روش refresh کردن تفاوتی داره؟

deceitful
یک شنبه 14 مهر 1392, 19:12 عصر
البته به دلایلی دارم از sleep هم استفاده میکنم داخل حلقه ی برنامه، که اینقدر زمان میبره اجرای کد

trasilver
یک شنبه 14 مهر 1392, 19:18 عصر
اگه کارایی حلقتون رو می گفتید بهتر می تونستم راهنماییتون بکنم ...

deceitful
یک شنبه 14 مهر 1392, 19:29 عصر
اگه کارایی حلقتون رو می گفتید بهتر می تونستم راهنماییتون بکنم ...

ارسال ایمیل هست
برای اینکه اسپم نشه سرور، چند ثانیه تاخیر گذاشتم بین هر ارسال

trasilver
یک شنبه 14 مهر 1392, 19:36 عصر
خوب داداش اینجوری قطعا به مشکل بر می خوری ! دیتاسنتر قطعا باهاتون برخورد می کنه ! از smtp استفاده چرا نمی کنید ؟ نرم افزار BulkSender Pro Edition رو دانلود کنید و راحت و آسوده استفاده کنید .

deceitful
یک شنبه 14 مهر 1392, 19:58 عصر
محدودیتی نداریم برای ارسال
لیست ایمیل ها رو چجوری بهش بدم

trasilver
یک شنبه 14 مهر 1392, 20:47 عصر
کل دیتاسنتر ها چه ایران چه در خارج برای هر ساعت یک محدودیت دارند برای ارسال ایمیل .
اگه می خواید با استفاده از سرورتون ارسال کنید من توصیم بهتون این هست از دیتابیس استفاده کنید بهتر هست .
توی دستور mysql تون یک limit میذارید مثلا 50 تا .
بعدش از for یا while یا foreach استفاده می کنید و براش تعریف می کنید بعد از ارسال هر ایمیل مثلا یک دقیقه صبر کنه .
ولی اگه از برنامه می خواید استفاده کنید ایمیل هارو توی یک فایل txt میذارید و بهش میدید و تایم میدید ارسال میکنه ...

deceitful
دوشنبه 15 مهر 1392, 13:20 عصر
سرور کامل دست خودمون هست، محدودیتی فکر نمیکنم داشته باشه
فکر میکنم سری قبل که مشکل پیش اومده بود بخاطر این بوده که چند دقیقه اینترنت قطع شده بوده
چون دیشب کدم رو تا صبح گذاشتم و اجرا شد و مشکلی پیش نیومد
یک دقیقه که خیلی زیاد هست !! روزی 3600 تا فقط میشه فرستاد فقط
الان 2 ثانیه تاخیر گذاشتم بعد از هر ارسال و 100 هزار تایی فرستادم و مشکلی پیش نیومده

plague
دوشنبه 15 مهر 1392, 19:22 عصر
شاید ارروری میده وسط کار ولی چون شما اررور ریپورت رو غیر فعال کردی نمیبینی ؟
بالای صفحه اینو بزار


error_reporting(-1);
ini_set('display_errors', 1);

حواست باشه وسطای کد جایی غیر فعالش نکرده باشه


اگرم میخای صفحه رو رفرش کنید با خوده timelimit جا وا اسکریپت میتونی کاری کنی هر 10 دقیقه رفرش بشه ( من نفهمیدم مشکل رفرش مردنت چیه ؟ شما کد رفرش رو نوشتی و تهش نوشتی "اما باز هم محدودیت" که آدم متوجه نمیشه یعنی چی )

deceitful
دوشنبه 15 مهر 1392, 23:41 عصر
شاید ارروری میده وسط کار ولی چون شما اررور ریپورت رو غیر فعال کردی نمیبینی ؟
بالای صفحه اینو بزار


مشکل من این بود که فقط سمت php داشتم یه سری عملیات انجام میدادم و حداکثر نیم ساعت کد اجرا میشد(با set_time_limit)
وقتی که با جاوا اسکریپت(با اون روشی که شما گفتید) بخوام صفحه رو رفرش کنم اولا که باید سمت php مثل همون مثال خودم یه کد جاوا اسکریپت چاپ میکردم دوما سمت php دیگه از کنترلم خارج میشد و نمیتونستم زمانیکه میخواد refresh بشه عملیات لازم رو انجام بدم ولی با اون تیکه کدی که نوشتم هر جا لازم باشه توی php چاپش میکنم و exit رو صدا میزنم
الان مشکل حل شده، نوشته بودم که با جاوا اسکریپت هم refresh میکنم باز هم محدودیت زمانی هست و همون نیم ساعت اجرا میشه، ولی مثله اینکه اینترنت قطع شده بوده، چون کد رو شب میذارم تا صبح اجرا بشه برای همین متوجه نشده بودم که دلیلش چیه، شب دوم که گذاشتم دیگه مشکلی پیش نیومد

mnvoh90
دوشنبه 15 مهر 1392, 23:50 عصر
سلام دوستان
یه کد php دارم که حدود 2 تا 3 روز طول میکشه که اجراش تکمیل بشه
اما حدودا نیم ساعت که اجرا میشه خودش stop میشه
به این مشکل که خوردم اومدم کاری کردم که هر 10 دقیقه یکبار صفحه refresh بشه (البته مشکلی پیش نمیاد توی کدم اگه refresh بشه و از ادامه ی روند کارش رو دنبال میکنه) با این کد

echo "<script>window.location = '" . $Url . "';</script>";
اما باز هم محدودیت زمانی هست و متوقف میشه

اگه راهنمایی ای یا ایده ای به ذهن کسی میرسه ممنون میشم اطلاع بده

من یه بار دقیقا همین کارو کردم. ایمیل تبلیغاتی میفرستادم ولی با فاصله که اسپم نشه. به نظر من بهترین راه استفاده از ایجکس هستش. همه ی ایمیل های گیرنده رو تو دیتابیس ذخیره می کردم و فیلد شناسه هم بهش اضافه می کردم(int). بعد تو html یه اینپوت داشتم که بهش ایندکس شروع رو می دادم بعد دونه دونه با ایجکس درخواست ارسال ایمیل رو میداد و یکی به این ایندکسه اضافه میکرد.