今天在研究PHP和微信后台系统调用的时候发现一个问题,在调用微信接口取得用户数据头像图片的时候,有一个url地址,于是我直接用<img> src 指向这个地址,结果万恶的腾讯设置了盗链,使真正的图片显示不出来。
后来我搜了很多关于破解盗链的,还是不行,于是我就想,那干脆将图片存在服务器上,然后IMG指向服务器目录,因为我是用的SAE来做站点,后来发现在调用 file_put_contents 时,报错。是因为我没有SAE文件夹IO权限。
于是我查了SAE的API,发现SAE提供了Storage正是做这个的。于是我调用它的方法,存入地址,取出地址,解决图片显示问题。
当然SAE默认是没有开放这个功能,需要你去开启(如图我已经开启了这个功能):
开启后,就可以用代码来实现这个功能了,如下:
/*
* 特殊处理图片:腾讯会对盗链进行屏蔽,所以这里只能先将文件存入到SAE服务器,再用链接指向服务器文件
*/
$img=file_get_contents($image);//获取远程,防盗链,返回值是二进制
$m = $openid.".jpg";//命名头像
file_put_contents ("saestor://weixinfile/".$m,$img);//存入本地,新浪必须加前缀saestor,存入Storage的Domain管理weixinfile
//初始化类
$s=new SaeStorage(); //调用SAE提供的类
$url=$s->getUrl('weixinfile',$m); //第一个参数是Domain的名称,第二个是路径名
$printstr.= "<img src='".$url."' width='100px' height='100px' />";
$userobj["headimage"] = $url;
效果如下:
特此跟大家分享。。。
本文讨论了在使用微信接口获取用户头像图片时遇到的盗链问题,并通过将图片存储在SAE服务器上解决了显示问题。包括使用file_put_contents的限制,以及如何正确配置和使用SAE Storage API。提供了从远程获取图片、命名、存储到最终显示的完整代码流程,以及实际应用效果展示。


被折叠的 条评论
为什么被折叠?



