загрузка файла с помощью php Curl

EC
На сайте с 18.06.2004
Offline
34
EDC
9007

Есть проблема:

Пытаюсь загрузить удаленный файл curl'ом, но в браузере не выскакивает окошко с предложением загрузить файл, а распечатывается содержимое на самой странице.

Как добиться появления окошка?

[Удален]
#1

Как я понимаю, здесь настройки. Обратите внимание на тип файла (dos - расширение).

EC
На сайте с 18.06.2004
Offline
34
EDC
#2

Что вы имеете в виду? Выводится содержимое любых файлов, а нужно, чтобы в браузере появлялось окошко с предложением сохранить файл на диск.

DyaDya
На сайте с 11.04.2007
Offline
147
#3

Нужно отправить соответствующие заголовки браузеру.

Например, так


header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename=EmplList.xls" );

print $data;
exit;

Поиграйтесь с Content-type

Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
Николай В.
На сайте с 07.09.2006
Offline
62
#4

С поддержкой докачки. $filename — путь к файлу. $name — под каким именем отдаем юзеру.

Хотя на самом деле вся ваша проблема в заголовках:

Content-type: application/octet-stream


$fsize = filesize($filename);
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
$fd = @fopen($filename, "rb");
if (!$fd){
header ("HTTP/1.0 403 Forbidden");
exit;
}

if (!empty($HTTP_SERVER_VARS["HTTP_RANGE"])) {
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {
fseek($fd, $range);
}
} else {
$range = 0;
}
$content = fread($fd, filesize($filename));
fclose($fd);
if (isset($range)) {
header("HTTP/1.1 206 Partial Content");
} else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename=" . $name);
header("Last-Modified: " . $ftime);
header("Accept-Ranges: bytes");
header("Content-Length: " . ($fsize - $range));
header("Content-Range: bytes " . $range . "-" . ($fsize - 1) . "/" . $fsize);
header("Content-type: application/octet-stream");
print $content;
exit;

Под curl переделайте только :)

[Удален]
#5
function curl_get_file_contents($URL) {
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);
if ($contents)
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename=EmplList.xls" );
return $contents;
else return FALSE;
}

типа такого чёто )))

KosoyRoman добавил 08.10.2008 в 11:58

Упс... опередили ))

EC
На сайте с 18.06.2004
Offline
34
EDC
#6

Огромное спасибо. "Content-type: application/octet-stream" решил проблему.

Заодно спрошу, есть ли какой-нибудь внятный мануал, желательно с примерами по всевозможным заголовкам?

Progr@mmer\.
На сайте с 14.10.2007
Offline
44
#7
Вашей девушке не хватает романтики? Черпните её на сайте «Я Люблю Романтику» (http://iloveromantics.ru/). Романтический форум (http://forum.iloveromantics.ru/) для отдыха от нудной работы.
EC
На сайте с 18.06.2004
Offline
34
EDC
#8

Спасибо. Вот куда нужно было сразу идти.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий