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 を渡すと、ヒューリスティックを使用する必要がなく、画像がない場合に (デフォルトの画像への 302 リダイレクトの代わりに) 404 ページが表示されます。

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 に答える