2013-03-14 2 views
2

поздравительных экспертов,PHP Отображение CSV файла в Internet Explorer

У меня есть PHP скрипт, который запрашивает нашу БД и выплевывает файл CSV в браузере. Эта работа приветствует FireFox, Safari и Chrome. Он не работает в Internet Explorer, который является браузером по умолчанию в нашем здании (вздох). Я не могу опубликовать URL-адрес, поскольку он является защищенным сайтом и не принесет вам никакой пользы.

В IE я получаю два всплывающих окна, когда я нажимаю Линк к настоящему докладу:

1) Не удается загрузить downloads.html с. Невозможно открыть этот Интернет-сайт. Сайт запроса недоступен или не найден. Повторите попытку позже.

2) загрузка% информационное окно: Получение информации о файле: downloads.html от Оценочное время осталось: Скачать на: скорости передачи : все эти пустые.

Итак, у меня есть страница, downloads.html, пытающаяся создать файл CSV. Не уверен, что бомбит здесь, насколько IE идет. Я могу попробовать разные заголовки? Я не видел в моих поисках.

Спасибо за любые советы ...

Вот моя функция, которая выводит данные:

# $data is array of data from database 
function render_excel($data) { 
    # headers for browsers 
    header("Content-type: text/csv"); 
    header("Content-Disposition: attachment; filename=file.csv"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 

    # column headers 
    $column_headers = "Filename, Link to File, Details, Unique Viewers\n"; 
    $rows = ''; 
    foreach($data as $foo => $arr){ 
    $rows .= $arr['filename'].","; 
    $rows .= $arr['resource_url'].","; 
    $rows .= $arr['detail_url'].","; 
    $rows .= $arr['distinct_views']."\n"; 
    } 
    print $column_headers; 
    print $rows; 
} 

ответ

0

Есть две проблемы, я думаю. Во-первых, вам нужны котировки вокруг имени файла, а во-вторых, вам нужно добавить заголовок Content-Length, чтобы показать время загрузки.

//1 
header("Content-Disposition: attachment; filename=\"file.csv\""); 

//2 
header("Content-Length: " . (strlen($column_headers.$rows))); 

Имейте в виду, что длина может отличаться, если на вашей странице есть другой код.

+0

Спасибо, Хьюго, но не повезло с этими изменениями. Я даже попробовал заголовок («Content-type: application/octet-stream»); без везения –

+0

Тогда я думаю, что Адриан прав, и IE просто не ожидает динамического контента с расширением «HTML». –

0

По моему опыту, чтобы работать с IE - особенно более старыми версиями IE - требуется использовать mod_rewrite для перенаправления URL с правильным расширением файла (например, download/file.csv) в файл PHP, который генерирует вывод CSV , IE по какой-то причине предпочитает расширение файла URL поверх заголовков контента и содержимого.

Смежные вопросы