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