在CodeIgniter中执行长脚本时显示实时进度和任何错误

时间:2018-10-11 13:42:08

标签: php codeigniter progress-bar codeigniter-3

我正在开发一个可以创建QR码并将其呈现给用户的图形的应用程序。

问题: 我编写了一个脚本来导入用户以从CSV创建。我需要创建100多个用户(每个用户都包括上述过程)。现在,每个新用户大约需要1分钟才能完成处理。.然后立即吐出我所有的错误/成功消息。

我的问题: 在我的脚本处理过程中,不是浏览器缓慢加载结果视图(当前一直停留在白页上,直到完成),而是一种在某些情况下显示实时进度和错误的简便方法吗?就像在创建/失败每个用户时更新的进度条一样。我猜它需要AJAX吗?

1 个答案:

答案 0 :(得分:1)

在处理网站时,请记住黄金法则。

  

PHP必须死。

Noobs认为这是人们在破坏PHP。不是。这是HTTP请求周期。

请求输入> PHP>响应输出> PHP进程终止。

仅在处理Web服务器和浏览器而不是CLI PHP时才是这种情况。但是,要点是,如果脚本花费的时间与您说的一样长,则可能最终导致Apache超时。

一种解决方案可能是设置一个cron来检查文件,如果找到该文件,则对其进行处理,将行号转储到您的浏览器可以检查的文本文件中,这意味着您可以获取进度:

<?php

if (file_exists('/some/csv/to/process.csv')) {
   // open file
   // get row to work on
   // process row
   // update progress file with next line number
}

与此同时,您可以设置执行此操作的脚本:

<?php

$progress = file_get_contents('/path/to/progress.txt');
header('Content-Type: application/json');
echo json_encode(['progress' => $progress]);

然后在setInterval函数中使用AJAX获得进度:

$.get('/path/to/progress/json/page', function(data){
    console.log(data);
});

只是一个想法,可能适合您,但可以尝试一下!