【发布时间】:2022-01-22 07:15:11
【问题描述】:
我正在努力在 php.ini 中创建一个 csv 文件。调用将使用 ajax 发起。如果有更多行,则创建 csv 文件可能需要更多时间。同时,我尝试通过发起另一个 ajax 请求来使用取消来停止创建。我创建 csv 文件的初始代码是:
for ($i=0; $i < count($result); $i++)
{
fputcsv($file_path,$result[$i]);
}
为了通过第二个 ajax 请求停止此循环,我决定使用名为 csv_creation 的会话变量。在创建过程中,我使用 session_start() 开始会话,$_SESSION['csv'] 值将开始,单击取消后,其值将结束。通过每次在循环内检查会话变量,我将决定是继续写入还是停止写入。现在我的代码是:
for ($i=0; $i < count($result); $i++)
{
if ($_SESSION['csv'] === "end") {
return "stop_csv";
}
fputcsv($file_path,$result[$i]);
}
我的问题是单击取消时,我使用 session_start() 再次启动会话并将值分配为 $_SESSION['csv'] = "end",但是此会话直到循环完成才开始,之前在创建 .csv。所以我无法阻止循环执行。 关于如何处理这个关于停止循环的问题有什么建议吗?
【问题讨论】:
-
只是不要开始一个新的会话,也许?
-
Martin Zeitler - 主页没有任何会话。请求转到新页面,所以我每次请求都必须启动一个新会话。
-
好吧,看来您已经意识到问题所在了;无论页面如何,您都需要保持相同的会话处于活动状态;一个与另一个无关;这是跨页面传输数据的目的——因此每个页面都需要维护它。通过 XHR 触发导出槽最终可能会更优雅。