В php вместо загрузки файла csv он открывается в браузере

Я пытаюсь загрузить файл CSV через браузер. Скрипт частично рабочий, так как пока удалось вывести CSV на экран, но загрузка не начинается.

Вот что я пробовал до сих пор:

if(isset($currency)) {
    header("Content-Type: application/csv");
    header("Content-Disposition: attachment;Filename=Pricelogs.csv");
    ob_clean();
    $filename = "/tmp/".uniqid().".csv";
    exportCSVFile($filename, $currency, $country, $provider);
    readfile($filename);
    //unlink("'".$filename."'");
} else {
    echo "ERR_USERNAME_PASSWORD";
    exit();
}

Я уже прочитал все вопросы этого типа из FAQ и тоже пробовал, но он открывается только в браузере, а не скачивается.
Я также использовал заголовок с одинарными кавычками. Я также пробовал header("Content-Type: text/csv"); Также:

    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers 
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename=\"".$filename."\";" );
    header("Content-Transfer-Encoding: binary");

person sidhesh    schedule 24.04.2013    source источник


Ответы (4)


ПОСТАВЬТЕ URL-адрес вашего CSV-файла, он будет отображаться в браузере вместо принудительной загрузки браузера. Вы можете открыть его в iframe на своем сайте.

http://docs.google.com/viewer?embedded=true&url=www.yoursite.com/filename.csv

person Pankaj Dadure    schedule 24.04.2013
comment
Альтернатива Yas на данный момент хороша, так как я пробовал все остальное .. Большое спасибо за вашу помощь .. - person sidhesh; 24.04.2013
comment
@PankajDadure, похоже, сейчас это не работает. Любой другой возможный способ предварительного просмотра файлов CSV - person Subash; 06.04.2019

Я обычно просто делаю:

header('Content-type: text/csv');
header("Content-Disposition: attachment; filename=my_csv_filename.csv");

// print CSV lines here

exit();
person james_tookey    schedule 24.04.2013
comment
На самом деле, я тоже работаю таким же образом, но знаю, как я уже говорил, вместо того, чтобы запрашивать загрузку, он просто отображается в браузере. Также я попробовал это во всех браузерах mazor, думая, что проблема может быть только в определенном браузере. Также я добавил эту строку в файл .htaccess: AddType application/octet-stream csv - person sidhesh; 24.04.2013

Я могу сказать вам, что эта комбинация работает для меня:

$bom = chr(0xEF) . chr(0xBB) . chr(0xBF);
header("Content-type: application/csv; charset=UTF-8");
header("Content-Disposition: attachment; filename=$filename.csv");
header("Pragma: no-cache");
header("Expires: 0");
print $bom . $data;
exit;

Если бы я был на вашем месте, я бы сначала протестировал это прямо (вне всей вашей буферизации), сначала увидел бы, что вам удается заставить это работать, и только потом проверил бы это в вашей конкретной настройке.

person DannyB    schedule 24.04.2013
comment
: Спасибо за ваше предложение, DannyB, но я уже работал над этим, разделив его на отдельные модули, то есть просто, но все содержимое просто отображается только в браузере. - person sidhesh; 24.04.2013

Вы можете попробовать это.

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=\"$filename.csv\";" );

print $content;
person Crucq    schedule 24.04.2013