我坚持这个。此代码为$ 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].
'" />';
}
答案 0 :(得分:2)
Gravatar为'd'参数添加了一个选项,这意味着如果您传入d = 404,如果没有图片,则会获得404页面(而不是某些302重定向到默认图片),而不是必须使用启发式。
虽然你说你知道d参数,但是你知道它在适用的时候实际上会返回一个重定向标题吗?因此,以下产生302 Found因为化身不存在:
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结果代码。