losthost / background-process
Lightweight and secure PHP library for running code in background processes
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/losthost/background-process
Requires (Dev)
- phpunit/phpunit: 11.5.44
This package is auto-updated.
Last update: 2025-11-20 20:27:56 UTC
README
Легкая и безопасная библиотека для запуска PHP кода в фоновых процессах.
Особенности
- 🚀 Простой API - всего 2 метода для запуска
- 🔒 Безопасность - автоматическое экранирование параметров
- 💻 Кроссплатформенность - работает на Windows и *nix
- 🧩 Гибкость - любой PHP код в фоновом процессе
- 🧪 Протестировано - полное покрытие PHPUnit
- 🔇 Тихий режим - stdout/stderr автоматически подавляются
Установка
composer require losthost/background-process
Быстрый старт
use losthost\BackgroundProcess\BackgroundProcess; // Простой пример $process = BackgroundProcess::create('<?php file_put_contents(%s, "Hello World");'); $process->run('/tmp/output.txt'); // С параметрами $process = BackgroundProcess::create('<?php file_put_contents(%s, "User: " . %s);'); $process->run('/tmp/user.txt', 'john_doe');
Использование
Базовое использование
$process = new BackgroundProcess('<?php file_put_contents("log.txt", "Task completed");'); $process->run();
С фабричным методом
$process = BackgroundProcess::create('<?php (new %s())->process(%s);'); $process->run(MyWorker::class, $data);
Сложный пример с инициализацией
$code = <<<'PHP' <?php require 'vendor/autoload.php'; require 'config.php'; // Инициализация DB::connect(%s, %s, %s, %s, %s); // Работа $result = (new %s())->heavyProcessing(%s); // Сохранение результата file_put_contents(%s, $result); PHP; $process = BackgroundProcess::create($code); $process->run( $db_host, $db_user, $db_pass, $db_name, $prefix, MyWorker::class, $large_dataset, $output_file );
Безопасность
Библиотека автоматически экранирует все параметры через var_export():
// Опасные строки становятся безопасными $process->run("hello'); system('rm -rf /'); //"); // Преобразуется в: 'hello\'); system(\'rm -rf /\'); //' // И выполняется как строка, а не код
Особенности работы
- Процессы запускаются асинхронно - родительский процесс не ждет завершения
- Stdout/stderr подавляются - весь вывод идет в /dev/null (nix) или NUL (windows)
- Для результатов используйте файлы или другие механизмы межпроцессного взаимодействия
Примеры использования
Обработка очереди сообщений
$process = BackgroundProcess::create('<?php require "vendor/autoload.php"; $worker = new MessageWorker(); $worker->processUser(%d); '); $process->run($user_id);
Генерация отчетов
$process = BackgroundProcess::create('<?php require "vendor/autoload.php"; $report = new ReportGenerator(); $pdf = $report->generate(%s, %s); file_put_contents(%s, $pdf); '); $process->run($report_type, $date_range, $output_file);
Параллельная обработка данных
foreach ($users as $user) { $process = BackgroundProcess::create('<?php require "vendor/autoload.php"; (new DataProcessor())->analyzeUser(%s); '); $process->run($user->id); }
Требования
- PHP 8.0+
- Расширение proc_open
Лицензия
MIT