Следующий небольшой демонстрационный код успешно выполняется
<?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");
}
Может кто-нибудь, пожалуйста, помогите решить проблему.
Вы всегда получите эту ошибку «Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены», когда
Вы оставляете пустую строку перед
если вызов был вызовом ajax, и вы повторили некоторые символы перед вызовом заголовка.
Просто убедитесь, что нет персонажа раньше
Поместите функции заголовка перед любым выводом / выводом:
<?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;
Можете добавить:
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 в веб-браузеры, которые поддерживают сжатые веб-страницы.
Ты видишь:
а также