Как принудительно указать правильное расширение файла в диалоговом окне «Сохранить как»? (.jpg вместо .php)

Чтобы защитить паролем изображения веб-сайта, я получаю к ним доступ через PHP. Вместо использования URL "meme_penguin.jpg" я использую "image.php? File = penguin". Это отлично подходит для отображения, кроме случаев, когда пользователь пытается «сохранить как».

В Chrome диалог «Сохранить как» предложит тип файла как PHP вместо JPG. В Internet Explorer он предложит BMP.

Очевидно, что пользователь может просто изменить тип файла и переименовать файл. Однако это не изящное решение и наверняка вызовет проблемы.

Как сделать так, чтобы он автоматически «сохранялся как» с соответствующим расширением, JPG? Есть ли альтернативный способ? - Большое спасибо!!


person Calvin    schedule 16.09.2013    source источник


Ответы (2)


Нашел! Мне не хватало третьей строки кода. Вы можете использовать это для отображения защищенного изображения на своей странице или загрузить его как jpg. Получены первые две строки из другого вопроса в stackoverflow.

//need this two lines to work properly on IE8
header("Pragma: "); 
header("Cache-Control: ");

//was missing this line
header('Content-Disposition: attachment; filename="renamed.jpg"');

header("Content-Type: image/jpeg");
echo file_get_contents("images/somepic.jpg");

с php.net

person Calvin    schedule 16.09.2013

Задайте правильное значение заголовка типа содержимого в ответ

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 14.17 Content-Type

header('Content-Type: image/jpeg');
person cske    schedule 16.09.2013
comment
вы пробовали этот @cske? потому что кажется, что нет. это то, что я написал для отображения изображения в первую очередь, и он по-прежнему сохраняется как PHP вместо JPG !!! - person Calvin; 16.09.2013
comment
Вам не удалось добавить код, который вы еще пробовали. Вы можете выполнить поиск этого заголовка Content-Disposition ietf.org/rfc/rfc2183.txt , или используйте правила перезаписи для обслуживания изображений с помощью php - person cske; 16.09.2013
comment
Ну @cske разобрался сам что не удалось! То, что я действительно искал, было действительно полезной помощью. Как бы то ни было, в конце концов я понял это, но не могу опубликовать ответ, потому что мне нужно ждать 5 часов .... - person Calvin; 16.09.2013