Как установить имя по умолчанию «сохранить изображение как» для изображения, созданного в PHP? - PullRequest
8 голосов
/ 28 июня 2011

У меня есть страница на моем сайте, отображающая некоторые изображения, которые производятся моим PHP. Когда я щелкаю правой кнопкой мыши на изображении и нажимаю «Сохранить изображение как», я получаю в качестве имени по умолчанию имя php-файла, используемого для создания изображения.

Это, например, HTML для изображения:

 <img src="picture_generator.php?image_id=5&extension=.png">

и имя, которое я получаю: picture_generator.php.png

Есть ли способ установить это имя по умолчанию?

Заранее спасибо

Ответы [ 3 ]

10 голосов
/ 28 июня 2011

Вы можете указать его в HTTP-заголовке Content-Disposition:

header('Content-Type: image/png');
header('Content-Disposition: inline; filename="' . $filename . '"');

Однако некоторые браузеры (а именно Internet Explorer) могут игнорировать этот заголовок.Наиболее пуленепробиваемое решение - подделать URL и заставить браузер полагать, что он загружает статический файл, такой как /images/5/foo.png, в то время как фактический путь за кулисами - /picture_generator.php?image_id=5&extension=.png.Это может быть достигнуто некоторыми модулями веб-сервера, такими как Apache mod_rewrite .

4 голосов
/ 28 июня 2011

Вы можете попытаться установить имя файла, используя заголовки HTTP, но не все браузеры это учитывают.

Самый простой трюк - расширить URL, чтобы последняя часть содержала желаемое имя файла:

<img src="picture_generator.php/desiredfilename.jpg?image_id=5&extension=.png&name=desiredfilename.jpg">

Примечание. Я также добавил имя файла в конце строки запроса (значение name не имеет значения), поскольку некоторые браузеры используют эту часть.

В зависимости от конфигурации вашего сервера это сразу же будет работать без какой-либо специальной настройки (без mod_rewrite или чего-либо подобного). Вы можете проверить, работает ли он на вашем сервере, просто добавив «/foo» к любому PHP-URL на вашем сайте. Если вы видите вывод вашего PHP, все хорошо. Если вы видите ошибку 404, значит, ваша конфигурация сервера не может справиться с такими URL.

1 голос
/ 28 июня 2011

В вашем файле picture_generator.php вам нужно добавить заголовок с именем.такие как

header("Content-Disposition: attachment; filename=\"myfile.png\""); 
...