مهدوی
4 سال پیش توسط مهدوی مطرح شد
6 پاسخ

تایمر در php

سلام میخوام یک فانکشن به صورت منظم مثلا هر 3 ثانیه در php اجرا بشه
راه حلی هست؟


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
0

درود بر شما مستقیما با کد php نمیشه چنین کاری انجام داد.
باید از مثلا supervisor استفاده کنید و بهش بگید فلان فایلتون که کد php هست رو هر ۳ ثانیه اجرا کن


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 4 سال پیش مطرح شد
0

میتونید یه فایل php بسازید و تایم اجراشو بی نهایت بزارید. توی اون فایل مشخص کنید که فایل مورد نظر شما رو هر 3 ثانیه اجرا کنه. (دقیقا کاری که صف های لاراول انجام میدن)


mmjvox
تخصص : QML,Objective-C,Qt/C++,Webasse...
@mmdjv.kh94 4 سال پیش مطرح شد
0

میتونید از فریمورک هایی مثل simps استفاده کنید.

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

*این کار ها روی هاست اشتراکی قابل انجام نیستن


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 4 سال پیش مطرح شد
1

😁 اگر قراره اتفاقی بیوفته که بر کاربر تاثیرشو نشون میده میتونید از Js و Ajax استفاده کنید مثل سایت های صرافی 😅


احسان قربانی
تخصص : PHP ، در حال یادگیری لاراول ،...
@TimeRunner2359 4 سال پیش مطرح شد
1

@amirmahdavinejad
سلام و وقت بخیر.
یکی توی quora نوشته بود اولین سوال اینه که چرا اصلا میخواید یه چنین کاری رو انجام بدید؟ :) و درست گفته چون php اصلا برای این کار ساخته نشده و این راه حل که در ادامه میاد ، فقط برای حالت CLI باید استفاده بشه نه داخل سایت:

ignore_user_abort(true);//Run in persistent mode 
set_time_limit(0);//Run infinitely 

while (true) 
{ 
  //==do your rest of works here. 
  echo "Current timestamp is: ".time().PHP_EOL; 
  flush();//buffer output 
  sleep( 10 );//for wait 10 seconds 
} 

موفق و سلامت باشید
یا حق


فرزین
تخصص : طراح و توسعه‌دهنده‌ی وب
@farzin 4 سال پیش آپدیت شد
0

اگه تمایلی ندارید از supervisor و سرویس‌های مشابه استفاده کنید میتونید به شکل‌های مختلف از crontab خود سرور استفاده کنید(روی اوبونتو سرور به طور پیشفرش وجود داره).
حالا برای این کار باید چنتا عامل رو در نظر بگیرید. در مرحله‌ی اول لازمه ببینید روی سروری که دارید این تسک در چه زمانی انجام میشه، زمان انجام شدن این تست روی سرور بسته به سخت افزاری که در اختیارتون قرار گرفته به طور قطع با لوکال متفاوت خواهد بود و شاید حتی ببینید انجام شدن این تست خیلی بیشتر از اون چیزی که انتظار داشتید طول میکشه!
وقتی که زمان انجام شدن رو پیدا کردید، حالا باید یه حاشیه‌ی امن هم بهش اضافه کنید که اگه یه زمانی لود سرور رفت بالا و این زمان بییشتر شد ایجاد تداخل نکنه.
حالا میتونید با دو روش پیاده سازی کنید:
1- همون طوری که اقای قربانی فرمودن و با یه حلقه‌ی بی نهایت، با یه فرمان اسکریپت رو دائمی اجرا کنید. این روش مناسب بعضی کاربرداست.
2-sleep time رو توی خود crontab تعریف کنید. اینجوری سیستم درگیر یک حلقه‌ی بینهایت نمیشه و فشار کمتری روش میاد که برای بعضی کاربردای دیگه مناسبه.
یعنی به این شکل مثلا:

* * * * *  sleep 3; your command
* * * * * sleep 6; your command
و همین طور ادامه دار

همون طور که می‌بینید این روش دوم برای زمان‌های خیلی کوتاه چندان مناسب نیست چون باید تعداد زیادی کران تعریف کنید.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام