如何进行文件下载而不是保存在服务器上?

时间:2018-05-02 05:36:19

标签: php

  $filename = "PM.xls";
  $exists = file_exists('PM.xls');
  if($exists)
  {
           unlink($filename);
  }
           $filename = "PM.xls";
           $fp = fopen($filename, "wb");
           $sql = "SELECT DATE_FORMAT(jobcard.Open_date_time,' %d-%b-%y') AS datee,vehicles_data.Frame_no, jobcard.Jobc_id,jobcard.serv_nature,jobcard.Customer_name,jobc_invoice.Lnet, jobc_invoice.Pnet, jobc_invoice.Snet, jobcard.Mileage,customer_data.cust_type,vehicles_data.model_year,jobcard.Veh_reg_no,jobcard.comp_appointed, customer_data.mobile,IF(variant_codes.Make IS NULL,'Others',variant_codes.Make) as make FROM `jobcard` LEFT OUTER JOIN jobc_invoice ON jobcard.Jobc_id=jobc_invoice.Jobc_id LEFT OUTER JOIN vehicles_data ON jobcard.Vehicle_id=vehicles_data.Vehicle_id LEFT OUTER JOIN variant_codes ON vehicles_data.Model=variant_codes.Model LEFT OUTER JOIN customer_data ON jobcard.Customer_id=customer_data.Customer_id ORDER BY `make` ASC";

           $result=mysqli_query($conn,$sql) or die(mysqli_error($sql));
           $schema_insert = "";
           $schema_insert_rows = "";

           while($row = mysqli_fetch_row($result))
           {
            $insert = $row[0]. "\t" .$row[1]. "\t".$row[2]. "\t".$row[3]. "\t".$row[4]. "\t".$row[5]. "\t".$row[6]. "\t".$row[7]. "\t".$row[8]. "\t".$row[9]. "\t".$row[10]. "\t".$row[11]. "\t".$row[12]. "\t".$row[13]. "\t".$row[14]. "\t".$row[15];
           $insert .= "\n";               //       serialize($assoc)
           fwrite($fp, $insert);
           }

上面的代码在服务器上成功创建了文件,但无法替换它,而不是在服务器上创建文件,我希望它在用户端下载文件。我是否应该使用任何excel库,因为我必须为excel表命名。

1 个答案:

答案 0 :(得分:0)

首先,您创建具有XLS扩展名的TSV文件。如果您需要创建XLS文档,则应使用PHPExcel左右。

如果CSV足够您,则自5.1以来可以使用fputcsv,您可以直接将文件数据流式传输到用户代理。

$filename = "PM.csv";

header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="'.addcslashes($filename, '\\"').'"');
$fp = fopen('php://output', 'wb');

// ...

while($row = mysqli_fetch_row($result))
{
    fputcsv($fp, $row, ',', '"');
}
fclose($fp);