راکت

تایمر در php

6 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

6
حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

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

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

شاید پاسخ شما همین‌جا باشد

mmjvox
mmjvox
@mmdjv.kh94

تخصص: QML,Objective-C,Qt/C++,Webassembly

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

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

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

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

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

احسان قربانی
احسان قربانی
@TimeRunner2359

تخصص: PHP ، در حال یادگیری لاراول ، MidLevel درفرانت اند

@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

تخصص: طراح و توسعه‌دهنده‌ی وب

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

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

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

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

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