ссылка для скачивания скрыта

Я работаю над системой магазина, и у меня есть следующая ссылка http://cmstutorials.org/shop/downloads/2793156879 (исходная ссылка cmstutorials. org / shop / downloads.php? download = 2793156879)

что я пытаюсь сделать, так это позволить пользователю загрузить элемент, соответствующий идентификатору 2793156879, без отображения фактической ссылки на файл. Как они есть на themeforest.net

как бы я это сделал?


person Christophe    schedule 03.10.2009    source источник


Ответы (5)


Этот пример должен помочь вам:

$len = filesize($filename);
header("Content-type: image/jpeg");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=\"$new_filename\"");
readfile($filename);

или другой, мне кажется проще:

<?php
header('Content-type: image/jpeg');
$f = file_get_contents('path/to/image.jpg');
print $f;
?>

PS конечно, вы content-type должны подходить к вашему файлу.

person IProblemFactory    schedule 03.10.2009
comment
Первый пример должен работать и необходим, чтобы браузер понимал, как назвать файл. - person Jesse Weigert; 04.10.2009

header () должен вызываться перед отправкой любого фактического вывода (echo), иначе будет выдана эта ошибка.

См. «Пример 2»: http://www.w3schools.com/php/func_http_header.asp < / а>

person Tarnay Kálmán    schedule 03.10.2009

wooohoooo

спасибо большое, ребята, правила этого сайта я всегда получаю правильный ответ: D

Я вставил это выше header.php include ob_start ();

и непосредственно перед заголовком функции ob_ get_clean ();

может быть полезным для людей (примечание: для второй функции я добавил пробел перед получением, чтобы он отображался правильно, не забудьте удалить его, когда вы его используете)

person Christophe    schedule 03.10.2009

Если вы когда-нибудь собираетесь попробовать масштабировать эту услугу, я предлагаю взглянуть на perlbal. Одна из хитрых уловок, которую он выполняет, заключается в том, что ваше приложение может отправлять специальный заголовок, который сообщает perlbal о необходимости обслуживания статического файла на другом сервере. Таким образом, вам не нужно связывать поток PHP с передачей битов клиенту.

person Jesse Weigert    schedule 03.10.2009

Размещение содержимого в порядке, но другое решение будет использовать PATH_INFO и получить файл следующим образом:

http://example.com/download.php/2793156879.zip

Ваш download.php будет похож на

// handle path_info
$filename=$_SERVER['PATH_INFO']; // gets "/2793156879.zip" as $filename

// do smtg w/ $filename...
// ...

// download 
$len = filesize($filename);
header("Content-type: application/force-download");
header("Content-Length: $len");
readfile($filename);

Примечание: application / force-download не существует, он нужен только для принудительной загрузки в каждом браузере. (у некоторых MSIE, похоже, были проблемы с application / octet-stream)

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

У него есть небольшой недостаток: вы должны самостоятельно использовать substr () код продукта из строки PATH_INFO.

person ZJR    schedule 04.10.2009