【问题标题】:Download csv file from PHP server从 PHP 服务器下载 csv 文件
【发布时间】:2016-11-26 08:15:24
【问题描述】:

我正在编写代码以将我的查询输出保存在 csv 文件中。它被保存在服务器上的 csv 文件中。但是如何在按钮单击时从服务器下载该文件。我已经编写了以下代码,但它没有下载你的文件。谁能帮帮我。

代码:-

$group_result = mysql_query($selectquery, $conn);                                                   
$fp = fopen('books.csv', 'w');
header('Content-Type: application/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="books.csv"');
$filename = 'books.csv';
while ($container_id_record = mysql_fetch_assoc($group_result)) {
$i++;

echo"<tr class='gradeA odd' role='row'><td class='sorting_1'>" . $container_id_record['enquiry_date'] . "</td><td>" . $container_id_record['name'] . "</td><td>" .$container_id_record['mobile']. "</td><td>" . $container_id_record['program_name'] .  "</td><td>" . $container_id_record['schedule'] .  "</td><td>" . $container_id_record['shift'] .  "</td><td>" . $container_id_record['remark'] .  "</td>";

fputcsv($fp, $container_id_record);


}

fclose($fp);
readfile($filename);

【问题讨论】:

  • 添加html a标签,如&lt;a href="books.csv"&gt;Export Books&lt;/a&gt;

标签: php mysql csv


【解决方案1】:

在 php 中生成 csv 文件的最佳方法

<?php 
$list = array (
array('aaa', 'b,bb', 'cc\c', 'ddd/d'),
array('123', '45,6', '789'),
array('"aaa"', '"bbb"'));
$fp = fopen('file.csv', 'w+');
foreach ($list as $fields) {
    fputcsv($fp, $fields);
}
fclose($fp);
?>

<a href="file.csv">Download File</a>

【讨论】:

    【解决方案2】:

    我用一些测试数据测试了你的代码:

    <?php
    
    ini_set('html_errros', 0);
    $i = 0;
    //$group_result = mysql_query($selectquery, $conn);
    
    
    $group_result = array(
        array(
            'enquiry_date' => 1, 'name' => 1, 'mobile' => 1, 'program_name' => 1, 'schedule' => 1, 'shift' => 1, 'remark' => 1,
        ),
        array(
            'enquiry_date' => 2, 'name' => 2, 'mobile' => 2, 'program_name' => 2, 'schedule' => 2, 'shift' => 2, 'remark' => 2,
        ),
        array(
            'enquiry_date' => 3, 'name' => 3, 'mobile' => 3, 'program_name' => 3, 'schedule' => 3, 'shift' => 3, 'remark' => 3,
        ),
    );
    
    
    $fp = fopen('books.csv', 'w');
    header('Content-Type: application/csv; charset=UTF-8');
    header('Content-Disposition: attachment; filename="books.csv"');
    $filename = 'books.csv';
    //while ($container_id_record = mysql_fetch_assoc($group_result)) {
    foreach ($group_result as $container_id_record) {
        $i++;
    
        echo"<tr class='gradeA odd' role='row'><td class='sorting_1'>".$container_id_record['enquiry_date']."</td><td>".$container_id_record['name']."</td><td>".$container_id_record['mobile']."</td><td>".$container_id_record['program_name']."</td><td>".$container_id_record['schedule']."</td><td>".$container_id_record['shift']."</td><td>".$container_id_record['remark']."</td>";
    
        fputcsv($fp, $container_id_record);
    }
    
    fclose($fp);
    readfile($filename);
    

    它已经下载了一个名为 books.csv 的文件。所以,下载文件是可行的。

    内容:

    <tr class='gradeA odd' role='row'><td class='sorting_1'>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><tr class='gradeA odd' role='row'><td class='sorting_1'>2</td><td>2</td><td>2</td><td>2</td><td>2</td><td>2</td><td>2</td><tr class='gradeA odd' role='row'><td class='sorting_1'>3</td><td>3</td><td>3</td><td>3</td><td>3</td><td>3</td><td>3</td>1,1,1,1,1,1,1
    2,2,2,2,2,2,2
    3,3,3,3,3,3,3
    

    查看内容,开头有一些(不需要的)HTML。我认为这是你的问题。对吧?

    添加标题header('Content-Disposition: attachment; filename="books.csv"'); 告诉浏览器将输出处理为要下载的文件。 所有输出都添加到文件中。因此,还添加了循环内 echo 的输出。如果我是对的,您只需删除输出即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 2018-01-02
      • 1970-01-01
      • 2018-11-13
      相关资源
      最近更新 更多