Я видел это раньше, и у меня возникают проблемы с тем, чтобы это работало должным образом после того, как вы попробовали ряд решений. Проблема в том, что я не могу правильно экспортировать данные в формат csv. Прежде чем я добавлю свой ob_end_clean, он будет экспортироваться в csv с html, теперь он не дает мне csv, просто текст.
Вот мой код в файле, который требуется.
if (isset($_POST["hidden"])) { $list = array ( array('aaa', 'bbb', 'ccc', 'dddd'), array('123', '456', '789'), array('"aaa"', '"bbb"') ); $fp = fopen('php://output','w'); foreach ($list as $row) { ob_end_clean(); fputcsv($fp, $row); } header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=data.csv'); }
Прямо сейчас, когда я делаю свой экспорт, данные возвращаются на экран, похожий на var_dump (). Я просто хочу, чтобы это перешло в файл csv, не имея html во всем этом.
Сработало!
Я вызывал код csv раньше всего на странице. 🙂 Затем я подключился к своему столу, затем сделал свою логику для моего кода. У меня не было ob_start или ob_flush в моем основном файле, что имело большое значение. У меня был ob_clean перед циклом while, а затем я сделал exit () после объявления заголовка. Надеюсь, это объясняет это хорошо.
Вот мой код.
if (isset($_POST["hidden"])) { $sql = "SELECT * FROM `newsletter`"; $result = mysql_query($sql); ob_end_clean(); $fp = fopen('php://output','w'); while ($list = mysql_fetch_assoc($result)) { fputcsv($fp, $list); } header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=data.csv'); exit(); }
Место, ob_end_clean (); перед выводом csv.
ob_end_clean () означает: «Очистить (стереть) выходной буфер и отключить буферизацию вывода» – руководство по PHP.
Логикой для его работы является создание вашего php-скрипта, чтобы он:
echo "<html...>;"
(это уже использует выходной буфер php за кулисами) ob_end_clean()
(в зависимости от того, как было ob_clean()
это может предотвратить предыдущий экспорт) или ob_clean()
который до сих пор отправляет контент в браузер и очищает буфер, не отключая его ,