【问题标题】:Ignore included header for PHP csv file download忽略 PHP csv 文件下载的包含标题
【发布时间】:2019-02-14 03:52:22
【问题描述】:

我正在尝试在 PHP 网页上以 .csv 格式下载查询,该网页顶部有 include_once ($_SERVER['DOCUMENT_ROOT'].'header.php');。当我使用 PHP header() 函数下载它时,.csv 文件包含来自 header.php 的 html 代码,后跟 .csv 数据。如何获取没有 html 的 .csv(仅查询数据)?

为了下载我使用:

$query_file_name = "App_data.csv";
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$query_file_name");
$query_file = fopen("php://temp", "w");

// write file
$row = $results->fetch_assoc();
fputcsv($query_file, array_keys($row));  // csv head
fputcsv($query_file, $row);  // first line
while($row = $results->fetch_assoc()) {
    fputcsv($query_file, $row);
}
fclose($query_file);

我意识到我可以修剪文件的顶部,但我不知道如何在文件下载之前捕捉到它。理想情况下,我只想完全不包含 header.php 中的 html。

【问题讨论】:

    标签: php csv mysqli export-to-csv


    【解决方案1】:

    当您从 csv 文件调用时,您需要添加一个条件以跳过 header.php 中的 Html 代码。我希望它会起作用。请参考以下代码。

    $fromCsv = true;
    require_once 'header.php';
    ob_start();
    $query_file_name = "App_data.csv";
    $query_file = fopen("php://output", "w");
    // write file
    $row = $results->fetch_assoc();
    fputcsv($query_file, array_keys($row));  // csv head
    fputcsv($query_file, $row);  // first line
    while($row = $results->fetch_assoc()) {
        fputcsv($query_file, $row, ",");
    }
    header('Content-type: application/csv');
    header('Content-Disposition: attachment;filename="' . $query_file_name . '.csv"');
    header('Cache-Control: max-age=0');
    header("Expires: 0");
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
    header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
    header('Pragma: public'); // HTTP/1.0
    fpassthru($query_file);
    fclose($query_file);
    exit;
    

    在 header.php 中,所有的 html 代码移动到 if 条件

    if (!$fromCsv)
    {
      //move all html code here
    }
    

    【讨论】:

    • 感谢您的回复。不幸的是,这不起作用,它仍在下载 HTML。还有什么想起来的吗​​?
    • 你能显示你的 header.php 代码吗?以便我可以帮助您。
    • github.com/UTA-FabLab/fabapp/blob/master/pages/header.php 我将不胜感激。只是提醒一下,我确实找到了解决方案,我在下面添加了该解决方案
    • @MPZinke,我已经更新了 header.php 文件。请通过链接 (wetransfer.com/downloads/…) 下载。请验证
    • @MPZinke,也可以下载头文件(uploadfiles.io/kh8g8)
    【解决方案2】:

    我最终尝试了question,我发现以前没有用。将ob_clean() 添加到它之后,它就可以工作了。我的代码最终是

    ob_end_clean();
    ob_clean();
    $query_file_name = "FabApp_data.csv";
    $query_file = fopen("php://output", "w");
    
    // write file
    $row = $results->fetch_assoc();
    fputcsv($query_file, array_keys($row));
    fputcsv($query_file, $row);
    while($row = $results->fetch_assoc()) {
        fputcsv($query_file, $row, ",");
    }
    
    header('Content-Type: text/csv; charset=utf-8');
    header("Content-Disposition: attachment; filename=$query_file_name");
    exit();
    

    【讨论】:

    • 您找到解决方案了吗?
    猜你喜欢
    • 2019-12-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2012-12-07
    • 2019-10-19
    • 2016-12-28
    相关资源
    最近更新 更多