Создание CSV-файла с помощью PHP

#php

#php

Вопрос:

PHP — Я прочитал и использовал многие ответы, но я продолжаю получать также HTML
страницы, как мне остановить это !!, или я просто глуп, нет, не
отвечайте на это. (новая форматированная версия, извините, ребята !!!)

Вот код:

 function WriteCSVFile( $csvArr, $nLine )  
{  
    header( "Content-type: text/csv" );  
    header( "Content-Disposition: attachment; filename=file.csv" );  
    header( "Pragma: no-cache" );  
    header( "Expires: 0" );  
    header( "Cache-control: private" );  
    header( "Cache-control: must-revalidate, post-check=0, pre-check=0" );  

    for( $nLoop = 0; $nLoop <= $nLine; $nLoop   )  
        echo $csvArr[$nLoop];  
}
  

Комментарии:

1. Используйте MIME-тип text/csv для файлов CSV. Это должно заставить ваш браузер обрабатывать его как CSV.

2. Также, пожалуйста, делайте отступ в любом коде на 4 пробела. Это нечитаемо.

3. Спасибо, Амадан, я думал, что сделал, в следующий раз попробую hardeer.

4. Есть ли у вас какие-либо выходные данные перед вызовом функции ‘WriteCSVFile’?

Ответ №1:

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

 for( $nLoop = 0; $nLoop <= $nLine; $nLoop   )
    echo $csvArr[$nLoop] . "<br />";
  

Вставьте это после вашего header()

Редактировать

Поскольку я делал это «до» того, как вы его изменили, я все равно оставлю for цикл неподвижным. Одна вещь, на которую я укажу, это то, что вы вызываете function WriteCSVFile( $csvArr, $nLine )

Но вы никогда не говорите нам, как это fn() вызывается, возможно, выводится что-то ПЕРЕД этой функцией, и поэтому у вас есть html, ваши заголовки не будут иметь значения, если у вас уже есть что-то, что выводится пользователю.

Проверьте, что выводится (какой HTML ??), затем найдите именно этот html в вашем php-коде.

Комментарии:

1. Огромное спасибо за это, но если вы заметили, что я это сделал, первый цикл для меня является фиктивной отладкой, чтобы убедиться, что у меня есть правильная информация, просто чтобы убедиться, что это не повлияло на нее, я прокомментировал это следующим образом:

2. Обратите внимание, что первый цикл удален, но все еще выводит HTML

3. @Hans Engel — Спасибо, Ганс, изменено, как указано выше, но снова все еще получаю HTML, я дважды проверил код, чтобы убедиться, что массив чист.

4. Спасибо, я думаю, вы правы, страница представляет собой смесь html, js, css и php, которая считывает данные из базы данных MySQL и отображает конечному пользователю, однако конечному пользователю также необходимо загрузить результат в файл Excel. Итак, я застрял. Думаю, я мог бы создать таблицу «на лету» и попробовать экспортировать ее в CSV. Что вы думаете??

Ответ №2:

 for( $nLoop = 0; $nLoop <= $nLine; $nLoop   )
    echo $csvArr[$nLoop] . "n";
  

Если элементы $csvArr сами по себе являются массивами, вы, вероятно, захотите implode() поместить значения в одну строку

 for( $nLoop = 0; $nLoop <= $nLine; $nLoop   )
    echo implode(',', $csvArr[$nLoop]) . "n";
  

Ответ №3:

Пожалуйста, попробуйте.

 header("Content-type: application/csv");
  

Или проверьте, есть ли у вас какие-либо выходные данные перед вызовом WriteCSVFile функции. Если это так, он вернет ошибки, говорящие о том, что невозможно изменить информацию заголовка.