Download или скачать *.jpg
Прошу вас помочь в решении проблемы.
Допустим, на сайте есть фотография. .. К этому рисунку есть превьюшка.. Всё как положено... Хочу сделать, чтобы рисунок с именем 1.jpg можно было ИМЕННО скачать, а не загружать в браузере, а потом наводить курсор мыши, нажимать правую кнопку мыши и СОХРАНИТЬ РИСУНОК КАК..
В теле страницы пишу:
...........
<a href="/Image/1.jpg">Скачать</a>
.............
И загружается, блин, браузер и показывает мне рисунок. С неграфическими файлами (зип, ехе и проч. святотеть) проблем нет.
Я понимаю, что я дятел где-то, но скажите, где моя ошибка и можно ли добиться того результата, который мне нужен?!
Спс за помощь вам заранее!!!!
header("Content-disposition: attachment; filename=1.jpg");
readfile("1.jpg");
?>
Можно сделать по колхозному:
<a href="image.php?image=1.jpg">Картинка</a>
Но это естессно дыра, через которую ломаем сайт
Пихаешь путь к картинке в БД.
Т.е.
id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT,
path VARCHAR(36)
);
path - путь к картинке [тут у меня имя подразумевается просто, поэтому букв мало, так как у меня картинки в виде md5(имя_файла).расширение_файла ]
А потом уже тогда
<a href="image.php?id=1"><img src="xxx.jpg" /></a>
И далее как советает наш админ:
# image.php
/* коннектимся к БД и т.д. и т.п. */
header("Content-disposition: attachment; filename={$path_to_image}");
readfile($path_to_image);
?>
В теле страницы пишу:
...........
<a href="/Image/1.jpg">Скачать</a>
.............
И загружается, блин, браузер и показывает мне рисунок. С неграфическими файлами (зип, ехе и проч. святотеть) проблем нет.
Это зависит от настроек браузера, т.е. регулируется на стороне клиента.
А что бы брузер обмануть, можно заслать ему "левые" заголовки как это и предложил mike.
....
Юзать БД что бы скачать картинку? :) ИМХО лучше сделать отдельную папку на сервере типа /img/dlable и проверять в скрипте принадлежность рисунка к этой папке
<a href="image.php?image=1.jpg">Картинка</a>
Но это естессно дыра, через которую ломаем сайт
Как раз таки, я и ушел от хранения пути к файлу в БД.
ВОТ ЕСТЬ ВСТРЕЧНЫЙ ВОПРОС ПРО ДЫРУ!
Давайте, я вам проясню. У каждого юзера есть свой ID в БД.
На основании этого ID я создаю каталог с таким же номером на сервере.
В каждый каталог кладу фотографии этого юзера.
К примеру, файл 1_1_im.jpg лежит в каталоге 1, т.е. первая запись в БД и это ID юзера. Имя файла для меня гласит, что первая цифра - это ID, 2-я цифра - номер фотографии.
в каждом каталоге может быть 9 файлов, т.е. имена файлов такие:
1_1_im.jpg
1_2_im.jpg
1_3_im.jpg
.....
1_9_im.jpg
Чтобы отобразить галерею этих фотографий с Preview, я делаю РНР:
1. Получаю по методу POST значение ID юзера.
2. Проверяю на его корректность на кривые символы.
В конце имеем переменную
$var_find=$_POST['id'];
3. Осуществляю проверку наличия каталога и файлов. После того, как я определю, что есть каталог, и определяю, какие файлы есть в данном каталоге, заношу их в массив $numb[].
4. Выстраиваю фотографии по циклу:
................
for ($i=0; $i< $how; $i++ )
{
$content .= '<br>';
$content .= '<img src="pictures_make.php?nom='.$var_find.'&foto='.$numb[$i].'" alt=""><br>';
}
....................
в данном цикле рисунок выстраивается с помощью файла pictures_make.php, в котором осуществляется масштабирование рисунка и прочее, и вывод его на экран.
ВОПРОС: ДЫРА ЭТО ИЛИ НЕТ?!
Помогите мне, плз.. А то мысли о том, что сайт можно взломать, меня могут сделать параноиком :(
1. Лезть в БД, чтобы удалить ссылку на файл
2. удалить файл с сервера.
Крайне неудобно...
Я пошел другим путем... Ваши рекомендации учел и сделал. Всё работает.. Меня интересует только вопрос безопасности
З.Ы.: Спасибо вам всем за помощь и поддержку.. Вот если бы кто-нить по безопасности меня проконсультировал :)!!! Кстати, кто-нибудь может разрулить мой вышесказанный пост по безопасности.. Правильно ли я делаю?!
Тогда смысла в PHP не вижу... для такого и статических страниц за глаза + ни каких проблем с безопасностью.
2. Проверяю на его корректность на кривые символы.
Расскажи мне об этом.
А вообще если тебе только превьюшки нужны то не проще ли их при аплоаде скриптом создавать? имхо прав в этом отношении alekciy.
Я не улавливаю как безопастность, масшабирование и вышеприведенные символы связаны...