2013-03-06 33 views
0

我被困在此。此代码为$ source参数提取一张gravatar图片。我试图确定如何将URL传递给gravatar,并确定结果是否是图像或404。如果它是一个404,我不想将default.png复制到新图像中,我只是想使用为Default.png如何确定gravatar.com请求是否返回404

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”参数,这意味着如果你在d = 404通过,你会得到一个404页(而不是一些302重定向到一个默认图片)如果没有图片,而不必使用启发式。

虽然你说你知道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 2013-03-06 07:10:48

+0

检查这个 https://bugs.php.net/bug.php?id=52555 – 2013-03-06 07:53:46