PHP, download file

Zadov

Новичок
Добрый день.

<a data-post="/ajax/scripts/emails">скачать</a>

При нажатии на ссылку "скачать" обработчиком формируется файл, а затем его нужно скачать на комп.
Раньше я прямо в тэге <a> указывал <a href="..." download>, но тут мне надо чтобы он этот файл сначала сформировался. Файл с расширением .csvv создается, но скачать его никак не получается.

$res['eval'] = 'window.location.href = "...";'; позволяет открывать его в новом окне браузера, но мне нужно именно чтобы скачивался.
 

Zadov

Новичок
Readfile не работает вообще. При этом в логах ошибок нет
 

Zadov

Новичок
если ты не заметил там ссылка на header, а не на readfile.

нужно заголовок передать
Вот так у меня:

$now = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");

header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");

header("Content-Disposition: attachment;filename=test.csvv");
header("Content-Transfer-Encoding: binary");

readfile('/var/www/html/uploads/test.csvv');
 

Zadov

Новичок
Так у меня было изначально:
header("Content-Type: text/csv");

А это посоветовали на другом форуме для csv.

Один хрен - не работает.
да и тестировал с gif-файлом и Content-Type: image/gif - не работает. Проблема не в заголовках, а в readfile...
 

fixxxer

К.О.
Партнер клуба
Раньше я прямо в тэге <a> указывал <a href="..." download>, но тут мне надо чтобы он этот файл сначала сформировался.
Ставь в a href ссылку, по которой вызовется php-код, там формируй свой файл и отдавай, как объяснил WMix, с Content-Type: application/octet-stream. Ajax там не нужен совершенно.
 

Zadov

Новичок
Ставь в a href ссылку, по которой вызовется php-код, там формируй свой файл и отдавай, как объяснил WMix, с Content-Type: application/octet-stream. Ajax там не нужен совершенно.
так у меня и так php-код.

<?php
switch ( $subaction ) {
case 'emails':
.........

exec("echo '$str' >> /var/www/html/uploads/test.csvv");
}

$res['answer'] = 'ok';

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment;filename=test.csvv");
header("Content-Transfer-Encoding: binary");

// $res['eval'] = 'window.location.href = "/uploads/test.csvv";';
readfile('/var/www/html/uploads/test.csvv');
}

break;
default: die( 'error' );

}
$content = json_encode($res);
###################################################################
header( "Content-type: application/json; charset=" . $config['charset'] ); echo $content;
?>
 

WMix

герр M:)ller
Партнер клуба
Да ему вобще там echo $str; без всяких exec, промежуточными документами и тд.
 

fixxxer

К.О.
Партнер клуба
PHP:
<?php
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"test.csv\"");
echo "Name,Age\n";
echo "Vasya,30\n";
echo "Masha,25\n";
 

Zadov

Новичок
PHP:
<?php
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"test.csv\"");
echo "Name,Age\n";
echo "Vasya,30\n";
echo "Masha,25\n";
Еееее бой!!! Это бадибэк!!!!!!! Работает! Респектухи! Странно, почему через обработчик этот же код не работает.
 

WMix

герр M:)ller
Партнер клуба
вообщето header("Content-Type: text/csv"); где вы там application/octet-stream нашли?
 
Сверху