我正在尝试在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。
答案 0 :(得分:0)
从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
}
答案 1 :(得分:0)
我最终尝试了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();