رفتن به مطلب

ایجاد تاخیر زمانی در اجرای یک حلقه


پست های پیشنهاد شده

آیا میشه یک حلقه while رو که باید n بار اجرا بشه رو کاری کرد که بعد از هر اجرا 30 ثانیه صبر کنه و بعد دوباره اجرا بشه .

لینک به ارسال

در خط ششم تابع sleep عمل تاخیر را انجام میده ، ورودی برابر با تعدا ثانیه های ایجاد تاخیر


<?php
$i=0
while($i < 10)
{
echo '$i = '.$i.'<br/>';
sleep(30);
$i++
}
?>

ویرایش شده توسط MrProgrammer
لینک به ارسال

در خط ششم تابع sleep عمل تاخیر را انجام میده ، ورودی برابر با تعدا ثانیه های ایجاد تاخیر


<?php
$i=0
while($i < 10)
{
echo '$i = '.$i.'<br/>';
sleep(30);
$i++
}
?>

تشکر . اما یک سوال ؟

هنگام لود کد مرورگر چیزی رو نشون نمیده همینطور درحال لود شدن هست و بعد ازمثلا الان 10*30=300 ثانیه کل جواب رو نشون میده !!!

1. آیا اینطوری به سرور فشاری وارد نمیشه ؟

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

درحقیقت من این حلقه رو میخوام برای ارسال ایمیل میخوام . خوب اگر مدام توی این 300 ثانیه سرور زیر بار لود باشه که خیلی بده مگر اینکه پشت پرده چیز دیگه ای باشه ؟ یعنی سرور زیر بار نباشه تا بازه ی بعدی ؟

لینک به ارسال

نه اتفاقااز تابع sleep برای جلوگیری از فشار به سرور استفاده میشه ،در اسکریپت های طولانی که ممکنه به سرور فشار بیاره از این تابع استفاده میشه و در مدت زمان تاخیر سی پی یو فعالیتی نداره و به نوعی استراحت میکنه

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


<?php
$i=0
while($i < 10)
{
echo '$i = '.$i.'<br/>';
sleep(30);
$i++;
flush();
}
?>

لینک به ارسال
  • 1 سال بعد...
در در ۱۳۹۳/۹/۶ ه‍.ش. at 08:07، حسین شفیعیان گفته است :

نه اتفاقااز تابع sleep برای جلوگیری از فشار به سرور استفاده میشه ،در اسکریپت های طولانی که ممکنه به سرور فشار بیاره از این تابع استفاده میشه و در مدت زمان تاخیر سی پی یو فعالیتی نداره و به نوعی استراحت میکنه

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

 

 

<?php
$i=0
while($i < 10)
{
echo '$i = '.$i.'<br/>';
sleep(30);
$i++;
flush();
}
?>

 

ممنون دنبال همین بودم ولی با این تفاوت که حلقه هر بار در بازه های زمانی متفاوت توقف کنه مثلا یک بار 3 ثانیه بار دیگه 5 ثانیه و یک بار هم 6 ثانیه متوقف بشه و بعد همین روال ادامه داشته باشه

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...