چگونه یک اسکریپت را به مدت طولانی درحال اجرا نگه داریم

سلام
من اسکریپتی نوشته ام که نیاز است به مدت حدود 20 الی 30 دقیقه در حال اجرا باقی بماند. ولی هنگامی که این اسکریپت را با مرورگر فعال می کنم، تا زمانی درحال اجرا باقی می ماند که مرورگر همچنان درحال لود باشد، درحالی که می دانیم مرورگر تا زمان معین کوتاهی به لودینگ ادامه می دهد و بعد از آن خطای تایم اوت داده می شود.
من حتی از دستورات ignore_user_abort(true);، یا set_excute_time در php استقاده کردم ولی همچنان مشکل مرورگر وجود داشت. آیا شما راه حلی دارید؟

سلام از کرون جاب استفاده کن

1 پسندیده

شما باید یک thread ایجاد کنید
برای این کار باید اکستنشن pthreads روی سرور شما نصب باشه:

یا بیلد و نصب از روی سورس که قبلش باید php رو از روی سورس با فعال کردن zts بیلد کنید:


یا نصب از pecl که باز هم باید ورژنی از php رو نصب کنید که zts اون فعال شده باشه :
https://pecl.php.net/package/pthreads

بعد میتونید این کد نمومه رو اجرا کنید:

<?php

class LongTimeWorker extends Thread
{

  function __construct()
  {

  }

  function run()
  {
            $sleep = 60*30;
            printf(' -start ' . date("g:i:sa"));
            sleep($sleep);
            printf(' -finish' .  date("g:i:sa"));
  }
}


$runningObject = new LongTimeWorker;

$runningObject->run();

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

1 پسندیده