Я борюсь с нечетной ошибкой. У меня есть простое веб-приложение, которое захватывает материал от DB, тогда производит его как загружаемый файл CSV. Это работает над Firefox и хромом, но IE не удается распознать его как файл CSV (думающий, что это - HTML fle), и когда я нажимаю, сохраняют, я получаю ошибку, "Неспособный загрузить {название файла} от {название сайта}. Неспособный открыть этот сайт...."
Код:
session_start();
//some logic goes here...
//generate csv header
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=exportevent.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "Event: " . $event_title . "\n";
//print the column names
echo "Last Name, First Name, Company \n";
while($row = mysql_fetch_assoc($result))
{
echo $row['atlname'] . ',' . $row['atfname'] . ',' . $row['atcompany'] . "\n";
}
Я играл вокруг с типом контента целый набор, но это не имело никакого эффекта.
Обновление: я попробовал text/csv, application/vnd.ms-excel (и изменения этого), текст/плоскость и некоторые другие, которых я теперь забываю без удачи.
Это - IE8 btw.
Обновление 2: соединение по SSL.
Разве мы не любим IE? :)
Попробуйте использовать эти заголовки:
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"exportevent.csv\";" );
header("Content-Transfer-Encoding: binary");
Я думаю, что тип содержимого октет-поток заставляет IE загружать файл.
Мне удалось добиться следующих результатов:
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=File.csv");
Установка типа application / vnd.ms-excel в моем случае, похоже, сработала. Все это находится в файле, который открывается путем отправки формы с помощью
target="_blank"
Попробуйте установить тип содержимого text / csv
вместо application / octet-stream
.
Поскольку application / octet-stream является общим двоичным типом MIME (и не соответствует расширению '.csv'), Internet Explorer может игнорировать его и вычислять тип MIME на основе расширения файла.
Некоторое время назад у меня возникла проблема с IE6 при открытии файлов pdf и сбой, когда AdobeReader 6.0 был установлен и пытался открыть файл в окне браузера. Затем я где-то нашел этот заголовок:
header('Content-Type: application/force-download');
И это решило проблему, каждый файл pdf был загружен и открыт в Adobe вместо IE.
Недавно мы сами столкнулись с этой проблемой. См. Эту статью MSKB
. Это те заголовки, которые нам пришлось использовать, чтобы заставить его работать через SSL.
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$file_name\";");
header("Content-length: " . strlen($csv_string));