【问题标题】:download reports at the background process在后台进程下载报告
【发布时间】:2014-03-24 00:53:48
【问题描述】:

实际上我有一个文件,下载发生在 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";
  }

【问题讨论】:

    标签: php mysql shell background


    【解决方案1】:

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

    【讨论】:

    • 每分钟运行一次 cron 会导致服务器负载..是否有任何替代
    • 运行一个除了检查数据库之外什么都不做的cron,如果它需要做任何事情,几乎不会产生任何负载。它产生的负载与请求您网站上的任何其他 PHP 页面一样多。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      相关资源
      最近更新 更多