1. Go to this page and download the library: Download flytachi/winter-thread 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/ */
flytachi / winter-thread example snippets
lytachi\Winter\Thread\Runnable;
use Flytachi\Winter\Thread\Thread;
// 1. Define your task by implementing Runnable.
// Logic inside run() executes in a separate process.
class VideoProcessingTask implements Runnable {
public function __construct(private string $videoFile) {}
public function run(array $args): void {
$quality = $args['quality'] ?? 'high';
// output goes to /dev/null by default — use outputTarget for logging
sleep(5); // simulate encoding
}
}
// 2. Create a Thread with optional metadata for OS process identification.
$thread = new Thread(
new VideoProcessingTask('movie.mp4'),
'Media', // namespace
'VideoProcessor', // name
'job-42' // tag
);
// 3. Start the thread.
// Default outputTarget='/dev/null' — safe for fire-and-forget.
// Pass outputTarget: '/path/to/file.log' to capture output.
// Pass outputTarget: null ONLY when actively reading via readOutput().
$pid = $thread->start(['quality' => 'hd']);
echo "Processing started (PID: $pid)\n";
// Main script continues immediately.
echo "Doing other work...\n";
// 4. Optionally wait for the task to finish.
$exitCode = $thread->join();
echo "Task finished with exit code: $exitCode\n";
use Flytachi\Winter\Thread\Launch\CliLauncher;
use Flytachi\Winter\Thread\Payload\TempFileTransport;
// Zero-config: a self-configuring AdaptiveLauncher is the default — nothing to do.
$thread = new Thread(new MyTask());
$thread->start();
// Explicit configuration when you need it:
Thread::bindLauncher(new CliLauncher(
binaryPath: '/usr/bin/php',
runnerPath: __DIR__ . '/vendor/flytachi/winter-thread/wRunner',
transport: new TempFileTransport(), // omit to auto-detect per launch
secret: 'your-signing-secret', // signs serialized closures
));
// Custom backend (Docker/SSH/…): implement Launcher and bind it directly.
Thread::bindLauncher(new MyCustomLauncher());
$thread = new Thread(new SendEmailBatch($ids));
$thread->start(detached: true); // returns at once; worker owned by init