0

我正在 php 中进行一些繁重的图像处理,我想向用户展示事情的进展情况。所以我尝试做这样的事情:

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

     processLine($i);
}

然后我使用 AJAX 调用另一个 php 文件,该文件基本上返回 $_SESSION['progress'] 的值。问题是,它没有设置。这是因为您不应该在每个文件中多次启动会话吗?如果我只是打开会话而不在每一行之间关闭它,则 SESSION 变量将被锁定,并且在完成整个图像操作之前不会处理我的轮询文件。

有什么方法可以使用会话使其工作?我认为如果我将进度放入数据库或文件中可能会起作用,但这很慢,我们必须做一些工作来识别用户(使用 ips 或会话 ID)。使用会话将处理这些事情。

4

2 回答 2

1

这是因为 php 锁定了会话文件。仍然使用相同会话的第一个进程锁定文件,ajax 调用使用相同的会话 ID,因此尝试访问相同的会话文件但它不能因为它被 php 锁定,直到第一个进程完成。

这是您的问题的答案。如果您想知道如何解决它,我不确定,我必须考虑一下。

于 2010-11-29T01:15:53.550 回答
0

老实说,您应该只session_start();在每个使用函数的 PHP 脚本的最顶部放置函数,并且只有那个函数。删除所有其他 session_start 以及您可能拥有的所有其他会话功能session_write_close();

不要关闭会话或使用其他任何东西,因为它不是必需的。如果该值未返回,您可能需要仔细检查浏览器中的 JavaScript 控制台以检查返回的 PHP 错误或文件目录中名为 error_log 的文件。

否则一切都应该按预期工作。我过去做过类似的事情,而且效果很好。我希望这可以帮助您调试问题。

于 2010-11-29T01:10:31.980 回答