2013-12-18 2 views
0

안녕하세요. 이미지가 hotlinked 보호되어 있는지 확인하고 싶습니다. 몇 가지 사이트를 검색하고 http 헤더를 확인하기위한 최상의 솔루션으로 발견했지만 내가 구현할 때 잘못된 결과를 제공한다는 것을 알게되었습니다. 예를 들어 HTTP 헤더 응답핫 링크 보호 검사 헤더 200이오고 있지만 페이지가 보호되어 있습니다.

Array ([0] => HTTP/1.1 200 OK [1] 

오고있다하지만 난 PHP를 직접 iframe에 연결하거나 할 때의 던지는 error.access 이미지가 보호 hotlinked되고 부인했다. 나는이 이미지 링크

<?php 
    $url = 'http://s.wallpaperhere.com/thumbnails/preview/20130702/51d3b5478d616.jpg'; 
    print_r(get_headers($url)); 
    print_r(get_headers($url, 1)); 
    ?> 

위해 노력했다 뺨이에 대한 최선의 방법이 있고

을 보호되지 않는 데이터베이스에서 올바른 이미지를 저장

답변

0

"핫 링크"탐지는 일반적으로 참조 표제에서 수행됩니다. 당신의 예제는 리퍼러를 보내지 않으므로 원격 측에서 직접 요청이라고 가정하고 있습니다.

stream_context_set_default()를 사용하여 get_headers() 호출에 리퍼러 헤더를 추가 할 수 있습니다. 아래 예. 내가 제공 한 헤더 값을 변경해야 할 필요조차 없다 ... 나는 그것이 무엇이든 될 수 있다고 생각한다.

<?php 
$default_opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Referer: http://www.fakesite.com/hotlink-check/", 
) 
); 

stream_context_set_default($default_opts); 

$url = 'http://s.wallpaperhere.com/thumbnails/preview/20130702/51d3b5478d616.jpg'; 
print_r($headers = get_headers($url, 1)); 

if (preg_match('/200 OK$/', $headers[0])) { 
     echo 'OK'; 
} 
else { 
     echo 'Not OK'; 
} 

예제 URL을 사용하여 테스트 해본 결과 예상대로 작동합니다. 아래 출력 :

Array 
(
    [0] => HTTP/1.1 403 Forbidden 
    [Server] => cloudflare-nginx 
    [Date] => Wed, 18 Dec 2013 16:57:54 GMT 
    [Content-Type] => text/html; charset=UTF-8 
    [Connection] => close 
    [Set-Cookie] => __cfduid=de5cd2750b3e7c528e277df1e584c3a6c1387385874336; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.wallpaperhere.com; HttpOnly 
    [Cache-Control] => max-age=10 
    [Expires] => Wed, 18 Dec 2013 16:58:04 GMT 
    [CF-RAY] => ded65129fde0610 
) 
Not OK 
+0

u는 u는 나를 위해 라이브 URL 링크를 제공하시기 바랍니다 수 있습니다 테스트 한 그것은 내가 더 상세하게 내 위의 게시물을 편집 한 200 만 – Priya

+0

오고있다하지만 난 당신이 제공하는 URL을 사용하고 있습니다 . –

+0

당신을 위해 작동하지 않는 경우 ... 어떤 버전의 PHP를 사용하고 있습니까? –

관련 문제