2013-03-06 2 views
0

나는 이것에 붙어있어. 이 코드는 $ source 인수에 대한 gravatar 이미지를 가져옵니다. 나는 gravatar에 URL을 전달하고 그 결과가 이미지인지 404인지를 결정하려고 노력 중입니다.gravatar.com 요청이 404를 반환하는지 확인하는 방법

404가 default.png를 새로운 이미지로 복사하고 싶지 않으면 단지 default.png

function cb_gravatar($source) { 

    $time = 1209600; //The time of cache(seconds) 
    preg_match('/avatar\/([a-z0-9]+)\?s=(\d+)/', $source, $tmp); 
    $abs = TEMPLATEPATH. 
    '/gravatar-cache/'.$tmp[1]. 
    '.jpg'; 
    $url = get_bloginfo('template_directory'). 
    '/gravatar-cache/'.$tmp[1]. 
    '.jpg'; 
    $default = get_bloginfo('template_directory'). 
    '/gravatar-cache/'. 
    'default.png'; 

    if (!is_file($abs) || (time() - filemtime($abs)) > $time) { 
     //copy('http://www.gravatar.com/avatar/'.$tmp[1].'?s=64&d='.$default.'&r=G',$abs); 
     //IF REQUEST RETURNS A 404 USE THE LOCAL DEFAULT.PNG 
     copy('http://www.gravatar.com/avatar/'.$tmp[1]. 
     '?s=32&d=404&r=G', $abs); 

    } 

    if (filesize($abs) < 500) { 
     copy($default, $abs); 
    } 

    return '<img alt="" src="'.$url. 
    '" class="avatar avatar-'.$tmp[2]. 
    '" width="'.$tmp[2]. 
    '" height="'.$tmp[2]. 
    '" />'; 

} 
를 사용하려면

답변

1

Gravatar에 당신이 D = (404)에 전달하면, 일부 (302)가 리디렉션 대신 (404 페이지를 얻을 수 있음을 의미하는 'D'매개 변수에 옵션을 추가 한 기본 그림)을 사용하여 사진이 없으면 휴리스틱을 사용하지 않아도됩니다.

d 매개 변수에 대해 알고 있다고했지만 실제로 적용 가능한 경우 리디렉션 헤더를 반환한다는 사실을 알고 있습니까? 그래서, 아바타가 존재하지 않기 때문에 다음과 같은 수율 (302)는 찾았

http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?d=http%3A%2F%2Fwww.google.com%2Fimages%2Flogo.gif

HTTP/1.1 302 Found 
... 
Last-Modified: Wed, 11 Jan 1984 08:00:00 GMT 
Location: http://www.google.com/images/logo.gif 
Content-Length: 0 
... 
Expires: Sun, 26 Jul 2009 23:18:33 GMT 
Cache-Control: max-age=300 

당신이 할 필요가 d 매개 변수를 추가 한 다음 HTTP 결과 코드를 확인할 것을 나에게 보인다.

+0

오른쪽. 내 질문에 직접적으로 물어볼 수도 있다고 생각하지만 위의 지점에서 http 결과 코드를 확인하는 방법은 무엇입니까? – RegEdit

+0

이것을 확인하십시오 https://bugs.php.net/bug.php?id=52555 –

관련 문제