<?php
set_time_limit(0);
ignore_user_abort(true);
// this file wants to simulate a real large process that have to be executed in background
require_once __DIR__.'/../../vendor/autoload.php';
use JLaso\ToolsLib\Json;
use JLaso\ToolsLib\Status;
$id = isset($_POST['id']) ? $_POST['id'] : null;
$fileName = isset($_POST['name']) ? $_POST['name'] : "";
$fileSize = isset($_POST['size']) ? $_POST['size'] : "";
if ((null === $id) || !$fileName || !$fileSize) {
Json::error("you have to send 'id','name' and 'size' to start processing");
exit();
}
// the next lines terminates the output buffer and let believe the requester that the program had finished
ob_start();
Json::ok();
header("Content-Length: ".ob_get_length());
header('Connection: close');
ob_end_flush();
flush();
session_write_close();
$status = new Status($_POST["_task"]);
$status->touchStatusFile();
// wait a little before the huge work
sleep(1);
$status->updateStatus($id, Status::PROCESSING);
process($status, $id, $fileName, $fileSize);
$status->updateStatus($id, Status::DONE);
sleep(2); // give time to frontend to recover updated status
$status->freeStatusFile();
/**
* @param Status $status
* @param int $id
* @param String $name
* @param int $size
*/
function process(Status $status, $id, $name, $size)
{
$factor = intval($size/100);
for($i=0;$i<=$size;$i+=$factor){
sleep(1); // simulate that is copying a piece of the file
$status->updateStatus($id, Status::PROCESSING.":".intval($i/$factor));
}
sleep(1);
$status->updateStatus($id, Status::DONE);
sleep(2);
}
|