#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
функции. Если это так, он вернет ошибки, говорящие о том, что невозможно изменить информацию заголовка.