Во время загрузки CSV — Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены (вывод начался с

Следующий небольшой демонстрационный код успешно выполняется

<?php
$list = array
(
"ID,Name,Preview,Payout",
"Peter,Griffin,Oslo,Norway",
"Glenn,Quagmire,Oslo,Norway",
);
$today_doc=date("Y-m-d").".csv";
$file = fopen($today_doc,"w");

foreach ($list as $line)
{
fputcsv($file,explode(',',$line));
}
fclose($file);
// We'll be outputting a csv
header('Content-type: text/csv');
// It will be called contacts.csv
header('Content-Disposition: attachment; filename="'.$today_doc.'"');
// The PDF source is in original.csv
readfile($today_doc);?>

Я использовал приведенный выше демонстрационный код для моего сценария, тогда он не работает. Saying->
Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены (вывод начался с

    $selected_ids=$_POST['selected_id'];
$xyz="";
$list = array
("ID,Offer Name,Emp,salary");
$i=0;
foreach($selected_ids as $id)
{
$xyz.=$id.',';
}
$xyz=trim($xyz,',');
$extract=mysqli_query($con,"SELECT * FROM `emp_record` WHERE id in ($xyz)") or die(mysqli_error($con));
while($row = mysqli_fetch_array($extract))
{
$i++;
$list[$i]=$row["id"].','.$row["name"].','.$row["emp"].','.$row["salary"];
}
$today_doc=date("Y-m-d").".csv";
$today_doc="contacts.csv";
$file = fopen($today_doc,"w");
foreach ($list as $line)
{
fputcsv($file,explode(',',$line));
}
fclose($file);
//  We'll be outputting a csv
header('Content-type: text/csv');
// It will be called contacts.csv
header('Content-Disposition: attachment; filename=contacts.csv');
//The PDF source is in original.csv
readfile("contacts.csv");
}

Может кто-нибудь, пожалуйста, помогите решить проблему.

0

Решение

Вы всегда получите эту ошибку «Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены», когда

  1. Вы оставляете пустую строку перед

  2. если вызов был вызовом ajax, и вы повторили некоторые символы перед вызовом заголовка.

Просто убедитесь, что нет персонажа раньше

0

Другие решения

Поместите функции заголовка перед любым выводом / выводом:

<?php
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=contacts.csv');

Редакция:

о, это был не ваш вопрос, но если вы хотите, чтобы это так, вы должны повторить заголовок этого заголовка «(‘Content-type: text / csv’); заголовок (‘Content-Disposition: attachment; filename = contacts.csv’); » а затем загрузить CSV из файла в какой-то var, например. «$ csv», а затем просто эхо-контент, что-то вроде:

<?php
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=contacts.csv');
$csv = file_get_contents('YOUR  PATH');
echo $csv;
exit;
0

Можете добавить:

ob_start() в начале

а также

ob_flush() в конце

Пример:

<?php ob_start(); ?>
<?php
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=export.csv');
.......
ob_flush();
?>

Заметка

Если вы хотите, вы можете использовать:

ob_start("ob_gzhandler")

ob_gzhandler () предназначен для использования в качестве функции обратного вызова для ob_start (), чтобы упростить отправку данных в кодировке gz в веб-браузеры, которые поддерживают сжатые веб-страницы.

Ты видишь:

PHP net ob_start

а также

PHP net ob_gzhandler

0
По вопросам рекламы [email protected]