우선 이글은 및에 JUN님께서 말씀하신것과는 그저 다른 방법일뿐 더 낳은 방법은 아님을 말씀드립니다.
우선 index.html페이지에서 보여질 a.jpg, b.jpg를 예로 듭니다.
서버내부경로]
/home/test/htdocs/index.html [웹상에서 http://domain.com/]등의 웹루트입니다.
/home/test/image/a.jpg [이 경로는 웹으로 접근이 불가능하겠죠?]
/home/test/image/b.jpg [마찬가지입니다]
업로드는 업로드하는 프로그램에서 /home/test/image/ 안에 이미지가 저장되게 하는방법입니다.
그리고 /home/test/htdocs/imageview.php 라는 파일을 만듭니다.
imageview.php]
$MY_URL = ''http://domain.com'';
// substr함수로 레퍼러를 strlen에서 받아온 MY_URL 길이로 자름
// 만약 길이가 짧으면 알아서 레퍼러끝까지만 나올껍니다... 아마도...
// if문에서 레퍼러에서 자른 String과 MY_URL이 동일한지 검사합니다.
if(substr($_SERVER[HTTP_REFERER], 0, strlen($MY_URL)) == $MY_URL) {
// 동일한 경우 처리 [동일하다는건 내부에서 불렀다는 의미가 되겠군요]
// 이미지에 해당하는 이미지 형식 헤더 내보내기.
Header(''Content-Type: [이미지형식]''); // jpg = image/jpg나 image/jpeg
// 실제 보여줄 이미지가 있는지 검사.
if(file_exists(''/home/test/image/''.$_GET[Image]) == true)
passthru(''/home/test/image/''.$_GET[Image]);
else
passthru(''/home/test/image/blank.jpg''); // 파일이 없음을 알리는 미리 저장한 이미지
}else {
// 이 부분에서는 파일존재유무를 검사하지 않음.
// 굳이 왜냐고 질문한다면... 레퍼러검사에서 탈락한경우라서요...
Header(''Content-Type: [이미지형식]''); // jpg = image/jpg나 image/jpeg
passthru(''/home/test/image/die.jpg''); // 불법링크 안내메세지가 있는 이미지
}
?>
----------------------------------------
여기까지입니다.
index.html 페이지에서 a.jpg를 보여줄때
이런식으로 연결하면외부에서는 도메인까지 더한 http://domain.com/imageview.php?Image=a.jpg 를 아무리 넣어봐야...
die.jpg만을 보여주겠지요...
이상입니다...
본 글은 초급자분들을 위해 주석을 많이 달았습니다.
그리고 이 방법은 이미 여러 PHP프로그래머들에게 많이 사용되고 있습니다.
출처 : http://www.phpschool.com
bibaram