web2011. 12. 8. 00:16
php5에서 imagepng 또는 imagejpeg을 이용하여 이미지를 출력할 경우, 웹 브라우저에서는 정상적으로 보이지만, "save as" 기능을 사용하여 이미지를 저장하는 것은 불가능한 경우가 있다.
정확히는 웹브라우저에 따라 저장이 되기도 하고 안 되기도 하는데, ie8에서는 저장이 되고, 크롬 15 또는 파이어폭스 8에서는 저장이 되지 않는다. (크롬에서 저장하려고 시도하면 aaa.php를 저장하려고 시도한다.)
<?php
header("Content-Type: image/png");
imagepng($pic);
imagedestroy($pic);
?>
이 경우 파일을 임시로 저장하여 출력하는 방법을 쓰면 저장하는 것이 가능해진다. 그러나 이 방법을 쓰면 주기적으로 임시 파일을 지워줘야 하는 것이 귀찮은데, 다음과 같은 방법을 써도 된다.
<?php
header("Content-Type: image/png");
header("Content-Disposition: attachment; filename=\"image.png\"");
imagepng($pic);
imagedestroy($pic);
?>
물론, 이렇게 하면 웹브라우저에서 보는 것은 안 되고, 다운로드만 가능하다. 여기서, "Content-Disposition: inline"을 쓰면 크롬에서 저장할 때 정상적으로 png 파일임을 인식하고, 파일 이름도 인식한다. 그러나 저장되는 내용은 제대로된 이미지가 아니다. 파이어폭스 8도 크롬과 상황이 비슷하다.
추가: GET 방식을 쓰는 경우에는 크롬에서도 저장이 된다.
Posted by asdfzxcv