Как определить имя загрузки изображения, созданного на лету, с помощью переполнения стека

Мы используем PHP-скрипт (watermark.php) для изменения изображения на лету:

$image = imagecreatefromstring(file_get_contents('../'.$_GET['url']));

$w = imagesx($image);
$h = imagesy($image);

// Load the watermark
$watermark = imagecreatefrompng('../imgs/bgs/watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);

// Insert watermark to the right bottom corner
imagecopy($image, $watermark, $w-$ww-15, $h-$wh-5, 0, 0, $ww, $wh);

// Send the image
header('Content-type: image/jpeg');
imagejpeg($image,null,95);

Это помещено в тег привязки, готовый для использования fancybox:

<a class="fancybox-buttons" data-fancybox-group="gallery" href="scripts/watermark.php?url=SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg">
<img src="imgs/btns/blanco.png">
</a>

Затем Fancybox использует тег привязки, чтобы создать его для лайтбокса:

<img class="fancybox-image" src="scripts/watermark.php?url=SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg" style="display: inline;">

Если пользователь хочет сохранить изображение лайтбокса, щелкнув по нему правой кнопкой мыши, он / она получает в качестве имени файла watermark.php для сохранения.

Как получить имя файла для отображения как SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg, а не watermark.php ??

Мы попытались взломать код fancybox, чтобы вывести это:

<img class="fancybox-image" src="scripts/watermark.php?url=SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg" download="SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg" style="display: inline;">

но пока не повезло. Любые идеи, как лучше взломать код fancybox или другие предложения о том, как решить эту проблему?

Версия Fancybox версии: 3.0.0 Beta 1 (вт, 29 января 2013 г.)

Спасибо!

1

Решение

Вам необходимо включить заголовок размещения контента:

header("Content-disposition: attachment; filename='foo.jpg'");

<img> тег покажет /script.php?id=47, но когда кто-то пытается сохранить как изображение, браузер будет использовать имя файла, указанное в заголовке расположения (foo.jpg).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]