Как установить имя по умолчанию "сохранить изображение как" для изображения, созданного в PHP?

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

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

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

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

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

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

3 ответа

Решение

Вы можете попытаться установить имя файла, используя заголовки 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-адресами.

Вы можете предоставить это в Content-Disposition HTTP заголовок:

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.

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

header("Content-Disposition: attachment; filename=\"myfile.png\""); 
Другие вопросы по тегам