رفتن به مطلب

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


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

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

لینک به ارسال

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


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

ویرایش شده توسط MrProgrammer
  • امتیاز 3
لینک به ارسال

در خط ششم تابع 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();
}
?>

  • امتیاز 3
لینک به ارسال
  • 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 ثانیه متوقف بشه و بعد همین روال ادامه داشته باشه

لینک به ارسال

لطفا برای ارسال دیدگاه وارد شوید

شما بعد از اینکه وارد حساب کاربری خود شدید می توانید دیدگاهی ارسال کنید



ورود به حساب کاربری
×
×
  • اضافه کردن...