Пример асинхронного кода на php с созданием дочернего процесса
из родительского.
<?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
function async_task($data, $callback) {
$pid = pcntl_fork();
if ($pid == -1) {
die("Невозможно создать процесс");
} else if ($pid) {
// Родительский процесс, просто выходим из него
return;
} else {
// Дочерний процесс
// Выполнение асинхронной задачи
// Поспим 5 сек и например, запишем
// что-нибудь в файл
$result = function($data){
sleep(5);
$count = file_get_contents('db.txt');
file_put_contents('db.txt', ++$count);
return $count;
};
// Вызываем обратный вызов для передачи результата
call_user_func($callback, $result);
// Завершаем дочерний процесс
exit();
}
}
$data = 1;
// Пример использования
async_task($data, function($result) {
echo "Результат: " . $result;
});
echo "Здесь, делаем что-то ещё";
Функция async_task выполняется асинхронно.
Код ниже (вызова функции async_task) будет выполнен не дожидаясь пока выполнится функция async_task. Скачайте пример этого кода и запустите у себя чтобы проверить работу (скачать пример) в результате в файле db.txt после запуска этого скрипта, через 5 секунд,