| 
<?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);
 }
 |