PHP code example of ipl / scheduler

1. Go to this page and download the library: Download ipl/scheduler library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

ipl / scheduler example snippets


use ipl\Scheduler\Common\TaskProperties;
use ipl\Scheduler\Contract\Task;
use Ramsey\Uuid\Uuid;
use React\EventLoop\Loop;
use React\Promise\Deferred;
use React\Promise\PromiseInterface;
use Throwable;

use function React\Promise\resolve;

class SendReport implements Task
{
    use TaskProperties;

    public function __construct()
    {
        $this->setName('send-report');
        $this->setUuid(Uuid::uuid4());
    }

    public function run(): PromiseInterface
    {
        // Use resolve()/reject() only when the result is already available synchronously.
        // return resolve('Report sent.');

        // Use a Deferred when the work happens asynchronously, e.g. after a
        // subprocess call, a stream read, or a non-blocking HTTP call completes.
        $deferred = new Deferred();

        Loop::futureTick(function () use ($deferred): void {
            try {
                // Perform actual work here.
                $deferred->resolve('Report sent.');
            } catch (Throwable $e) {
                $deferred->reject($e);
            }
        });

        return $deferred->promise();
    }
}

use ipl\Scheduler\Cron;
use ipl\Scheduler\Scheduler;
use React\EventLoop\Loop;

$scheduler = new Scheduler();

// Run every day at 08:00.
$scheduler->schedule(new SendReport(), new Cron('0 8 * * *'));

Loop::run();

use ipl\Scheduler\OneOff;
use ipl\Scheduler\Scheduler;
use React\EventLoop\Loop;

$scheduler = new Scheduler();

$scheduler->schedule(new SendReport(), new OneOff(new DateTime('2026-04-01 09:00:00')));

Loop::run();

use ipl\Scheduler\RRule;
use ipl\Scheduler\Scheduler;
use React\EventLoop\Loop;

$scheduler = new Scheduler();

// Run every day at 09:00 Europe/Berlin time.
$frequency = RRule::fromFrequency(RRule::DAILY);
$frequency
    ->setTimezone('Europe/Berlin')
    ->startAt(new DateTime('2026-01-01 09:00:00'));

$scheduler->schedule(new SendReport(), $frequency);

Loop::run();

$frequency = new RRule('FREQ=WEEKLY;BYDAY=MO,WE,FR');

use ipl\Scheduler\Scheduler;
use ipl\Scheduler\Contract\Task;
use React\Promise\PromiseInterface;

$scheduler = new Scheduler();

$scheduler->on(Scheduler::ON_TASK_SCHEDULED, function (Task $task, DateTime $runAt) {
    echo sprintf('Task "%s" scheduled for %s', $task->getName(), $runAt->format('c'));
});

$scheduler->on(Scheduler::ON_TASK_RUN, function (Task $task, PromiseInterface $promise) {
    echo sprintf('Task "%s" is running', $task->getName());
});

$scheduler->on(Scheduler::ON_TASK_DONE, function (Task $task, mixed $result) {
    echo sprintf('Task "%s" completed: %s', $task->getName(), $result);
});

$scheduler->on(Scheduler::ON_TASK_FAILED, function (Task $task, Throwable $e) {
    echo sprintf('Task "%s" failed: %s', $task->getName(), $e->getMessage());
});

$scheduler->on(Scheduler::ON_TASK_EXPIRED, function (Task $task, DateTime $expiredAt) {
    echo sprintf('Task "%s" expired at %s', $task->getName(), $expiredAt->format('c'));
});

$scheduler->remove($task);

$scheduler->removeTasks();