Ссылка на скачивание скрыта
Я работаю над системой магазина, и у меня есть следующая ссылка http://cmstutorials.org/shop/downloads/2793156879 (оригинальная ссылка - cmstutorials. Org/shop/downloads.php? Download=2793156879)
я пытаюсь позволить пользователю загрузить элемент, который совпадает с идентификатором 2793156879 без указания реальной ссылки на файл. Как у них на theme forest.net
как бы я это сделал?
5 ответов
wooohoooo
спасибо большое ребята, на этом сайте правила я всегда получаю правильный ответ:D
Я вставил это выше в header.php include ob_start ();
и непосредственно перед функциями заголовка ob_ get_clean();
может быть полезным для людей (примечание: для второй функции я добавил пробел перед get, чтобы он отображался правильно, не забудьте удалить его при использовании)
Этот пример должен помочь вам:
$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
должен соответствовать вашему файлу.
header() должна быть вызвана перед отправкой любого фактического вывода (echo), иначе она выдаст эту ошибку.
См. "Пример 2": http://www.w3schools.com/php/func_http_header.asp
Если вы когда-нибудь попробуете масштабировать этот сервис, я предлагаю взглянуть на Perlbal. Одна из хитрых уловок, которую он делает, заключается в том, что ваше приложение может отправлять специальный заголовок, который сообщает Perlbal об обработке статического файла на другом сервере. Таким образом, вам не нужно связывать поток PHP с передачей битов клиенту.
Расположение содержимого в порядке, но другое решение будет использовать 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.