Как изменить имя файла, отображаемое в диалоговом окне «Сохранить как …» с .php на .png

Простой скрипт PHP, который я взял из stackoverflow, генерирует PNG с прозрачным фоном, записывает на него текст, а затем напрямую выводит его в клиентский браузер:

$font = 25; $string = 'My Text'; $im = @imagecreatetruecolor(300, 300); imagesavealpha($im, true); imagealphablending($im, false); $white = imagecolorallocatealpha($im, 255, 255, 255, 127); $red = imagecolorallocate($im, 255, 0, 0); imagefill($im, 0, 0, $white); $lime = imagecolorallocate($im, 204, 255, 51); imagettftext($im, $font, 0, 0, 30, $red, "fonts/tt0588m_.ttf", $string); header("Content-type: image/png"); imagepng($im); imagedestroy($im); 

Объем заключается в том, чтобы получить простую услугу, которая передает изображение на основе параметров, переданных ему через URL-адрес, таких как Google Charts (например, это изображение QR-кода ).

Пока что так хорошо, за исключением того, что если я нажму на изображение, сгенерированное с помощью кода выше и хочу его сохранить, браузер не распознает его как изображение PNG, но скрипт PHPкачестве типа селектора типа this есть этот параметр только), так как это противоречит примеру Google Charts, где ресурс четко обозначен как файл PNG.

Как достичь этой корректной идентификации ресурса браузером?

Браузер будет использовать имя файла из URL в качестве значения по умолчанию в диалоговом окне «Сохранить как …». Вы можете ввести другое имя курса или сохранить файл с использованием предлагаемого имени (text.php) и впоследствии переименовать его.

Вы можете использовать заголовок Content-disposition, чтобы «предложить» имя файла в браузере. Вот пример:

 header("Content-type: image/png"); header("Content-disposition: inline; filename=mytext.png"); 
  • inline предполагает, что браузер должен попытаться отобразить изображение. Измените его в attachment чтобы предположить, что браузер должен отображать «Сохранить как …» или аналогичный диалог.
  • filename= должен содержать имя файла по вашему выбору.

См. Эту статью, для IE8 не поддерживается (имя файла не используется)

Тестовые примеры для заголовка HTTP Content-Disposition