Прогресс Ajax с сеансом PHP

У меня есть приложение, которое обрабатывает изображения и использует jQuery для отображения прогресса пользователю.
Я сделал это с записью в текстовый файл каждый раз, и изображение обрабатывается, а затем считывает этот статус с помощью setInterval.

Поскольку в обработке не записаны никакие изображения (я делаю это в памяти PHP), я думал, что log.txt будет решением, но я не уверен, что все fopen и fread's. Является ли это склонным к проблемам?

Я также пробовал с PHP-сессиями, но не могу заставить его работать, я не понимаю почему.

HTML:

<a class="download" href="#">request download</a> <p class="message"></p> 

JS:

 $('a.download').click(function() { var queryData = {images : ["001.jpg", "002.jpg", "003.jpg"]}; $("p.message").html("initializing..."); var progressCheck = function() { $.get("dynamic-session-progress.php", function(data) { $("p.message").html(data); } ); }; $.post('dynamic-session-process.php', queryData, function(intvalId) { return function(data) { $("p.message").html(data); clearInterval(intvalId); } } (setInterval(progressCheck, 1000)) ); return false; }); 

process.php:

 // session_start(); $arr = $_POST['images']; $arr_cnt = count($arr); $filename = "log.txt"; for ($i = 1; $i <= $arr_cnt; $i++) { $content = "processing $val ($i/$arr_cnt)"; $handle = fopen($filename, 'w'); fwrite($handle, $content); fclose($handle); // $_SESSION['counter'] = $content; sleep(3); // to mimic image processing } echo "<a href='#'>download zip</a>"; 

progress.php:

 // session_start(); $filename = "log.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle); echo $contents; // echo $_SESSION['counter']; 

Что делать, если два клиента обрабатывают изображения одновременно?

Вы можете попробовать добавить session_write_close () между установкой нового статуса в сеансе, чтобы сохранить новые данные сеанса, иначе он будет храниться только после завершения вашего скрипта.

Другим решением будет сохранение статуса в memcache или использование базы данных, возможно разделение статусов с помощью идентификатора пользователя или создание хеша md5 в данных изображения