PHP code example of dalehurley / process-manager

1. Go to this page and download the library: Download dalehurley/process-manager 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/ */

    

dalehurley / process-manager example snippets


$manager = new ProcessManager(executable: 'php', maxConcurrentProcesses: 5);

foreach (glob('/data/imports/*.csv') as $file) {
    $manager->addScript('import-worker.php', arguments: [$file], maxExecutionTime: 300);
}

$results = $manager->run();
echo "Imported " . count(array_filter($results, fn($r) => $r->wasSuccessful)) . " files\n";

$endpoints = ['users', 'orders', 'products', 'inventory', 'analytics'];

$manager = new ProcessManager(executable: 'php', maxConcurrentProcesses: 3);

foreach ($endpoints as $endpoint) {
    $manager->addScript('fetch-api.php', arguments: [$endpoint], maxExecutionTime: 60);
}

$results = $manager->run(); // All 5 endpoints fetched in ~2 batches instead of 5 sequential calls

$manager = new ProcessManager(executable: 'ffmpeg', maxConcurrentProcesses: 4);

foreach ($videoFiles as $video) {
    $manager->addScript("-i {$video} -vf scale=1280:720 output/{$video}", maxExecutionTime: 600);
}

$manager->run();

$manager = new ProcessManager(executable: 'php', maxConcurrentProcesses: 3);

$manager->addScripts([
    ['script' => 'migrate-users.php', 'maxExecutionTime' => 300],
    ['script' => 'migrate-orders.php', 'maxExecutionTime' => 600],
    ['script' => 'migrate-products.php', 'maxExecutionTime' => 300],
    ['script' => 'migrate-analytics.php', 'maxExecutionTime' => 900],
]);

$results = $manager->run();

$manager = new ProcessManager(executable: 'php', maxConcurrentProcesses: 4);

foreach (glob('tests/*Test.php') as $testFile) {
    $manager->addScript('vendor/bin/phpunit', arguments: [$testFile], maxExecutionTime: 120);
}

$results = $manager->run();
$failed = array_filter($results, fn($r) => !$r->wasSuccessful);

exit(count($failed) > 0 ? 1 : 0);

$servers = ['web1.example.com', 'web2.example.com', 'web3.example.com'];

$manager = new ProcessManager(executable: 'ssh', maxConcurrentProcesses: 10);

foreach ($servers as $server) {
    $manager->addScript("{$server} 'cd /app && git pull && composer install'", maxExecutionTime: 120);
}

$results = $manager->run();



use DaleHurley\ProcessManager\ProcessManager;
use DaleHurley\ProcessManager\Output\ConsoleOutputHandler;

$manager = new ProcessManager(
    executable: 'php',
    workingDirectory: '/path/to/scripts',
    maxConcurrentProcesses: 3,
    sleepInterval: 1,
    outputHandler: new ConsoleOutputHandler()
);

// Add scripts to the queue
$manager->addScript('task1.php', maxExecutionTime: 60);
$manager->addScript('task2.php', maxExecutionTime: 30);
$manager->addScript('task3.php', maxExecutionTime: 120);

// Execute and get results
$results = $manager->run();

foreach ($results as $result) {
    echo "{$result->script}: " . ($result->wasSuccessful ? 'SUCCESS' : 'FAILED') . "\n";
}

use DaleHurley\ProcessManager\ProcessManager;

// Constructor parameters
$manager = new ProcessManager(
    executable: 'php',              // Command to execute
    workingDirectory: './scripts',  // Directory containing scripts
    maxConcurrentProcesses: 5,      // Max parallel processes
    sleepInterval: 1                // Seconds between status checks
);

$manager = new ProcessManager();

$manager
    ->setExecutable('python')
    ->setWorkingDirectory('/path/to/scripts')
    ->setMaxConcurrentProcesses(10)
    ->setSleepInterval(2)
    ->setOutputHandler(new ConsoleOutputHandler());

// Add a single script with default timeout (300 seconds)
$manager->addScript('worker.php');

// Add with custom timeout
$manager->addScript('long-task.php', maxExecutionTime: 600);

// Add with arguments and environment variables
$manager->addScript(
    script: 'process-data.php',
    maxExecutionTime: 120,
    arguments: ['--batch', '100'],
    environment: ['DEBUG' => '1', 'LOG_LEVEL' => 'verbose']
);

// Add multiple scripts at once
$manager->addScripts([
    'task1.php',
    'task2.php',
    ['script' => 'task3.php', 'maxExecutionTime' => 60],
]);

use DaleHurley\ProcessManager\Output\ConsoleOutputHandler;
use DaleHurley\ProcessManager\Output\HtmlOutputHandler;
use DaleHurley\ProcessManager\Output\NullOutputHandler;

// Console output with colors (for CLI)
$manager->setOutputHandler(new ConsoleOutputHandler(useColors: true));

// HTML output (for web)
$manager->setOutputHandler(new HtmlOutputHandler(flush: true));

// No output (silent mode - default)
$manager->setOutputHandler(new NullOutputHandler());

use DaleHurley\ProcessManager\Output\OutputHandlerInterface;

class LogOutputHandler implements OutputHandlerInterface
{
    public function __construct(private Logger $logger) {}

    public function scriptAdded(string $script): void
    {
        $this->logger->info("Queued: {$script}");
    }

    public function scriptCompleted(string $script): void
    {
        $this->logger->info("Completed: {$script}");
    }

    public function scriptKilled(string $script): void
    {
        $this->logger->warning("Killed: {$script}");
    }

    public function info(string $message): void
    {
        $this->logger->info($message);
    }

    public function error(string $message): void
    {
        $this->logger->error($message);
    }
}

$results = $manager->run();

foreach ($results as $result) {
    // Access result properties
    echo "Script: {$result->script}\n";
    echo "Exit Code: {$result->exitCode}\n";
    echo "Duration: {$result->elapsedTime}s\n";
    echo "Success: " . ($result->wasSuccessful ? 'Yes' : 'No') . "\n";
    echo "Killed: " . ($result->wasKilled ? 'Yes' : 'No') . "\n";

    if ($result->output) {
        echo "Output: {$result->output}\n";
    }

    if ($result->hasErrors()) {
        echo "Errors: {$result->errorOutput}\n";
    }

    // Convert to array
    $data = $result->toArray();
}

// Analyze results
$successful = array_filter($results, fn($r) => $r->wasSuccessful);
$failed = array_filter($results, fn($r) => !$r->wasSuccessful);
$killed = array_filter($results, fn($r) => $r->wasKilled);

// Old (v1.x)
$manager = new Processmanager();
$manager->executable = "php";
$manager->root = "";
$manager->processes = 3;
$manager->show_output = true;
$manager->addScript("script.php", 300);
$manager->exec();

// New (v2.x)
use DaleHurley\ProcessManager\ProcessManager;
use DaleHurley\ProcessManager\Output\ConsoleOutputHandler;

$manager = new ProcessManager(
    executable: 'php',
    workingDirectory: '',
    maxConcurrentProcesses: 3,
    outputHandler: new ConsoleOutputHandler()
);
$manager->addScript('script.php', maxExecutionTime: 300);
$results = $manager->run();
bash
git clone https://github.com/dalehurley/PHP-Process-Manager.git
cd PHP-Process-Manager
composer install
bash
composer analyse