#php #mysql #file #http-headers
#php #mysql #файл #http-заголовки
Вопрос:
итак, попытался это:
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo $fields;
пробовал также и многие другие.
header("Content-type: text/csv");
однако происходит то, что данные MySQL просто передаются эхом в браузер.
это HTTPheaderResponse, который я получил с помощью firebug:
Date Wed, 18 May 2011 14:15:18 GMT
X-Powered-By PHP/5.1.6
Content-disposition attachment;filename=MyVerySpecial.csv
Connection close
Content-Length 992
Server Apache/2.2.3 (Red Hat)
РЕДАКТИРОВАТЬ: обратите внимание, что это возврат из jQuery .post() Я пытаюсь это сделать, если это повлияет на это.
итак, кто-нибудь знает, почему может возникнуть эта проблема? Я в растерянности.
Спасибо
Комментарии:
1. есть ли у вас какие-либо выходные данные перед заголовками? ваш код в порядке и должен работать
2. что ж, если посмотреть на мою последнюю правку, я пытаюсь сделать это как возврат jQuery .post(), если это может повлиять на это?
3. это должна быть просто ссылка. Зачем вам нужен jquery.post?
4. ну, это дополнительная функция на странице, и поэтому я запрашиваю базу данных для перехода к файлу, не обновляя страницу.
5. лол. Э-э, да, это была бы важная информация. : ) Лучше всего использовать реальную форму и сделать традиционную публикацию … что можно сделать с iFrame для поддержания поведения, подобного AJAX.
Ответ №1:
Прежде всего, обязательно установите второму параметру header()
значение true, это для принудительной установки заголовка:
header('Content-Type: text/csv');
Сообщите, что вы знаете размер загрузки, вы должны:
header('Content-Length: '.strlen($fields));
Наконец, убедитесь, что $fields
это на самом деле строка в формате CSV.
Вы не можете напечатать массив напрямую и ожидать, что браузер автоматически преобразует его в CSV.
Ответ №2:
Правильный тип MIME — это text/csv
. Попробуйте это.
Ответ №3:
Попробуйте пометить Content-type
как application/download
или application/force-download
. Это должно заставить браузер открыть диалоговое окно сохранения.