Прогресс тяжелого PHP с использованием сессий - PullRequest
0 голосов
/ 29 ноября 2010

Я делаю тяжелые манипуляции с изображениями в php и хотел бы показать пользователю, как идут дела.Поэтому я попытался сделать что-то вроде этого:

for($i = 0; $i < $rowCount; $i++) {
     session_start();
     $_SESSION['progress'] = $i/ $rowCount;
     session_write_close();

     processLine($i);
}

И затем я использую AJAX-вызовы в другой php-файл, который в основном возвращает значение $ _SESSION ['progress'].Проблема в том, что она не установлена.Это потому, что вы не должны начинать сеанс более одного раза для каждого файла?Если я просто открою сеанс и не закрою его между каждой строкой, переменная SESSION заблокируется, и мой файл опроса не будет обработан, пока не будет выполнена вся манипуляция с изображением.

Любой способ получить этоработать с использованием сессий?Я думаю, что это может сработать, если я помещу прогресс в базу данных или файл, но это медленно, и нам придется проделать небольшую работу, чтобы идентифицировать пользователей (используя ips или идентификаторы сеансов).Использование сессий позаботится об этих вещах.

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Это потому, что php блокирует файл сессии. Первый процесс, который все еще использует тот же сеанс, блокирует файл, ajax-вызов использует тот же идентификатор сеанса, пытаясь получить доступ к тому же файлу сеанса, но не может, так как он заблокирован php до завершения первого процесса. *

Это ответ на ваш вопрос. Если вы хотите знать, как это исправить, я не уверен, я должен подумать об этом.

0 голосов
/ 29 ноября 2010

Честно говоря, у вас должна быть функция session_start(); в самом верху каждого PHP-скрипта, который использует функции, и только эта. Удалите все остальные session_start и все другие функции сеанса, которые у вас могут быть, например session_write_close();.

Не закрывайте сессии и не используйте что-либо еще, так как это не требуется. Если значение не возвращается, вы можете дважды проверить консоль JavaScript в браузере, чтобы проверить наличие ошибок PHP или файлов с именем error_log в каталоге вашего файла.

В противном случае все должно работать так, как ожидалось. Я делал подобные вещи в прошлом, и это работало просто отлично. Я надеюсь, что это поможет вам отладить ваши проблемы.

...