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();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.