ссылка на скачивание скрыта - PullRequest
1 голос
/ 03 октября 2009

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

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

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

Ответы [ 5 ]

2 голосов
/ 03 октября 2009

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

$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 должны соответствовать вашему файлу.

1 голос
/ 03 октября 2009

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

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

0 голосов
/ 04 октября 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);

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

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

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

0 голосов
/ 04 октября 2009

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

0 голосов
/ 03 октября 2009

wooohoooo

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

Я вставил это выше header.php, включая ob_start ();

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

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

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