在后台进程下载报告

时间:2014-02-22 09:47:39

标签: php mysql shell background

实际上我有一个文件,其中下载发生在xl ..但该表包含巨大的记录,它将需要超过2分钟..所以我想要的是在后台运行此文件,当下载完成后,他会弹出在前面下载完成...所以他可以去检查下载文件夹..所以他可以继续做其他任务,而下载发生在后面..没有让他等待..我搜索了几个网站,但无法提出输出.. 我的下载代码是

$fileName = 'Enquires.xls' ;
header("Content-type: application/vnd.ms-excel"); 
header("Content-Disposition: attachment; filename=$fileName");
$flag = false;
$query="";
$query  = "Select ackNo as AckNo, serialNo as SerialNo ,DATE(time) as EnquiryTime, product as Product , customerName as CustomerName , phone as Phone ,query as CustomerQuery,tech as CSO ,raf as RAF_Status,eng_comments as EngineerComments from customerEnquiry where ackNo like '".$locationprefix."%' and DATE(time) between '".$from."' and '".$to."'";

$result = mysql_query($query) or die('Error, query failed');

 while($row =mysql_fetch_assoc($result)) {
    if(!$flag) {
      // display field/column names as first row
      echo implode("\t", array_keys($row)) ."\r\n";
      $flag = true;
    }
      echo implode("\t", array_values($row)) . "\r\n";
  }

2 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法可能是在用户按下按钮时不生成文件。当他们按下该按钮时,在数据库中添加一条记录以生成该文件,并使用每分钟运行一次的cron来准备它。在您的前端,有一小部分javascript每隔30秒或每分钟轮询一次服务器,看看是否有新的下载可用。如果是,请显示弹出窗口。

答案 1 :(得分:0)

你可以在后台完成这样的任务。你可以看看工作队列。其中一些是Redis工作者,Gearman或者您甚至可以使用消息队列来执行此操作。在后台处理作业后,必须通知您的用户。您可以轮询服务器有关状态或从服务器推送到客户端。