1

我坚持这一点。此代码为 $source 参数提取 gravatar 图像。我正在尝试确定如何将 url 传递给 gravatar 并确定结果是图像还是 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].
    '" />';

}
4

1 回答 1

2

Gravatar 为 'd' 参数添加了一个选项,这意味着如果你传入 d=404,如果没有图片,你会得到一个 404 页面(而不是一些 302 重定向到默认图片),而不必使用启发式方法。

尽管您说您知道 d 参数,但您知道它实际上会在适用时返回重定向标头吗?因此,以下产生 302 Found 因为头像不存在:

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 结果代码。

于 2013-03-06T07:04:39.593 回答