Игнорировать включенный заголовок для загрузки файла PHP CSV - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь загрузить запрос в формате .csv на веб-странице PHP, в верхней части которой стоит include_once ($_SERVER['DOCUMENT_ROOT'].'header.php');.Когда я использую функцию PHP header() для ее загрузки, файл .csv содержит HTML-код из header.php, за которым следуют данные .csv.Как получить .csv без HTML (только данные запроса)?

Для загрузки я использую:

$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);

Я понимаю, что могу обрезать верхнюю часть файла, но яне знаю как поймать это до загрузки файла.Оптимально, я бы только хотел, чтобы html из header.php вообще не включался.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я закончил пытаться вопрос Я обнаружил, что ранее не работал.После добавления 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();
0 голосов
/ 14 февраля 2019

Вам нужно добавить условие, чтобы пропустить HTML-код в header.php при вызове из CSV-файла.Я надеюсь, что это сработает.пожалуйста, обратитесь к приведенному ниже коду.

$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
}
...