Создание и загрузка CSV с PHP - PullRequest
       3

Создание и загрузка CSV с PHP

5 голосов
/ 17 сентября 2010

Я использую PHP для создания файла CSV из запроса к базе данных. Я запускаю запрос, устанавливаю заголовки и загружаю страницу в Firefox, и файл запрашивает загрузку и открывается в Excel, как и положено. Когда я пытаюсь сделать это в IE, я получаю сообщение об ошибке Internet Explorer cannot download ReportPrint.php from www.website.com.<br> Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later.
Не уверен, что можно сделать, чтобы это исправить.

header('Content-Description: File Transfer');
header("Content-Type: application/csv") ;
header("Content-Disposition: attachment; filename=Report.csv");
header("Pragma: no-cache");
header("Expires: 0");

echo "record1,record2,record3\n";

Ответы [ 4 ]

3 голосов
/ 17 сентября 2010

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

<?php

$seconds = 30;

header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$seconds) . ' GMT');
header('Cache-Control: max-age=' . $seconds . ', s-maxage=' . $seconds . ', must-revalidate, proxy-revalidate');

session_cache_limiter(FALSE); // Disable session_start() caching headers
if( session_id() ){
    // Remove Pragma: no-cache generated by session_start()
    if( function_exists('header_remove') ){
        header_remove('Pragma');
    }else{
        header('Pragma:');
    }
}

?>

Настройте $seconds по своему вкусу, но не устанавливайте его на ноль.

Также помогает использовать mod_rewrite, чтобы IE поверил, чтозагрузка представляет собой статический файл, например, http://example.com/Report.csv

Пожалуйста, сообщите и сообщите, работает ли он для вас.

1 голос
/ 17 сентября 2010

Удалить заголовок Pragma: no-cache. Этот заголовок не позволяет IE загрузить файл.

0 голосов
/ 17 сентября 2010

Изменение

header("Content-Disposition: attachment; filename=Report.csv");

до

header("Content-Disposition: attachment;filename=Report.csv");
0 голосов
/ 17 сентября 2010

Проверьте настройки безопасности IE, возможно, он настроен на загрузку не CSV-файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...