Мой экспорт csv, отображающий html, как избавиться?

Я видел это раньше, и у меня возникают проблемы с тем, чтобы это работало должным образом после того, как вы попробовали ряд решений. Проблема в том, что я не могу правильно экспортировать данные в формат 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-скрипта, чтобы он:

  1. сначала перекликается со всем содержимым html / javascript …, предназначенным для страницы браузера, например, echo "<html...>;" (это уже использует выходной буфер php за кулисами)
  2. после этого очищает выходной буфер php до сих пор, с ob_end_clean() (в зависимости от того, как было ob_clean() это может предотвратить предыдущий экспорт) или ob_clean() который до сих пор отправляет контент в браузер и очищает буфер, не отключая его ,
  3. последний раз использует этот чистый буфер вывода, чтобы экспортировать любой дополнительный контент (как загружаемый csv в нашем случае) в браузер, как показано выше wowzuzz. Поэтому, если какой-либо html будет повторен сценарием после этого, он также будет включен в csv.