1. Go to this page and download the library: Download edwardstock/forker 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/ */
edwardstock / forker example snippets
$pm = new ProcessManager();
$pm->pool(2 /*pool size*/, true /*join processes*/);
for($i = 0; $i < 10; $i++) {
// when 2 jobs will added to pm queue, they will run, and cleaned after complete
// calling $pm->run() manually not needed
$pm->add($job);
}
use edwardstock\forker\handler\CallbackTask;
use edwardstock\forker\ProcessManager;
$updated = 0;
// simple background job
$bigTableUpdate = CallbackTask::create(function(CallbackTask $task) {
return DB::bigQuery('UPDATE very_big_table SET field=TRUE WHERE another=FALSE'); //it's just example
})->future(function($updatedCount, CallbackTask $task) use(&$updated) {
$updated = $updatedCount;
})->error(function(\Throwable $exception, CallbackTask $task){
// handle exception occurred while DB::bigQuery()
Logger::log($exception);
});
$processManager = new ProcessManager('/path/to/file.pid');
$processManager
->add($bigTableUpdate)
->run(true) // true - join to main process, if you don't have an expensive and complex logic in future method
->wait(); // wait while process will complete doing job
// if don't call wait() method, process will be detached from terminal or main process and continue to working in background
echo $updated; // count of updated very_big_table
use edwardstock\forker\handler\CallbackTask;
use edwardstock\forker\handler\BatchTask;
use edwardstock\forker\ProcessManager;
$toDownload = [
'https://google.com',
'https://facebook.com',
];
$results = [];
/** @var BatchTask $downloads */
$downloads = BatchTask::create($toDownload, function ($toDownloadItem, CallbackTask $task) {
return @file_get_contents($toDownloadItem);
})->future(function ($sitesContent, BatchTask $task) use (&$results) {
$results = $sitesContent;
});
$pm = new ProcessManager();
$pm->add($downloads);
$pm->run(true)->wait();
var_dump($results);
// result
// array(2) {
// 0 => string(28) 'html_content_from_google.com'
// 1 => string(30) 'html_content_from_facebook.com'
// }
// Order of results in this case is random, cause, for example,
// facebook.com can be downloaded faster than google.com
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.