У меня есть страница на моем сайте, отображающая некоторые изображения, которые создаются на моем PHP. Когда я щелкните правой кнопкой мыши по изображению и нажмите «Сохранить изображение», поскольку по умолчанию я получаю имя файла php, используемого для создания изображения.
Это, например, html для изображения:
<img src="picture_generator.php?image_id=5&extension=.png">
и я получаю следующее: picture_generator.php.png
Есть ли способ установить это имя по умолчанию?
заранее спасибо
Вы можете попытаться установить имя файла, используя заголовки HTTP, но не все браузеры уважают это.
Самый простой трюк состоит в том, чтобы расширить URL-адрес, чтобы последняя часть содержала нужное имя файла:
<img src="picture_generator.php/desiredfilename.jpg?image_id=5&extension=.png&name=desiredfilename.jpg">
Примечание. Я также добавил имя файла в конце строки запроса (это name
действительно не имеет значения), поскольку некоторые браузеры используют эту часть.
В зависимости от конфигурации вашего сервера это немедленно будет работать без какой-либо специальной конфигурации (без mod_rewrite или чего-то подобного). Вы можете проверить, работает ли он на вашем сервере, просто добавив « /foo
» к любому URL-адресу PHP на вашем сайте. Если вы видите вывод своего PHP, все хорошо. Если вы видите ошибку 404, тогда ваша конфигурация сервера не может обрабатывать такие URL-адреса.
Вы можете указать его в 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
. Это может быть выполнено с помощью некоторых модулей веб-сервера, таких как mod_rewrite от Apache.
В файле picture_generator.php вам нужно добавить заголовок с именем. такие как
header("Content-Disposition: attachment; filename=\"myfile.png\"");