PHP 获取远程图片
因为大多数虚拟主机都有流量限制(特别是博客主机),因此很多人都选择把图片储存到 Flickr 和 Picasa 等免费相册里,再通过外链插入到文章里。但由于这些网站经常被 block ,因此我建议大家还是尽量把图片放到自己的服务器上。
由于我个人很懒,万一博客搬家的话,过多的文章附件将会给文件的迁移带来麻烦。因此我以 cosbeta 的 Pika 插件为蓝本写了一个远程图片代理程序,并对较多博客使用的 Picasa 、 Flickr 和 PhotoBucket 这三个图床服务进行了防止链接被重置的处理。请点这里下载脚本。
使用方法
其实这个脚本和 pika 原理一样,但由于我做了较多的修改,使用方法会有所差别。在使用之前,请确定你拥有符合要求的服务器服务器。
- 一个流量较大的国外php主机
- 服务器支持curl函数
如果能满足以上要求,那么你就可以使用这个脚本了。
首先把脚本上传到国外主机一个子域名的根目录下,并把脚本里的 $allow_referer 添加允许调用图片的域名,必须包含此脚本所在的域名和你博客所在的域名,否则图片就无法在你博客显示。
如果你要调用的图片是 Picasa 、 Flickr 和 PhotoBucket 以外的图床,则使用以下的代码(yourdomain是脚本所在的域名):
1 | <img src="http://yourdomain/index.php?img=http://image_url" /> |
如果你调用的是 Picasa 的图片,则使用以下的代码( image_url 是 “ggpht.com/” 后面的部分,lh* 是图片外链地址的第一节,也就是服务器编号):
1 | <img src="http://yourdomain/index.php?img=http://image_url&host=lh*" /> |
调用 Flickr 和 PhotoBucket 的图片也差不多,把 host 参数改为 farm* (Flickr)和 i**** (PhotoBucket)就可以。之所以把这几个图床的调用方法弄得这么麻烦,是因为这几个图床被block的风险比较大,只要调用这几个网站的图片时链接里不出现这几个网站域名,图片链接就不会被重置,从而当这几个网站被block的时候访客也能看到图片。
图片通过此脚本调用一次后会缓存到服务器里,第二次的调用则直接调用缓存。
PS
我正在把这个脚本做成一个完整的 WordPress 插件,如果你发现这个脚本有不足的地方,请告诉我。






沙发,期待你的插件。
这个挺实用,做成插件吧。
ps:文章改个标题吧
呵呵,图床~你搞定,我再尝鲜!
嘿嘿,强力支持,期待插件中 ~
真是强大
可惜呀,skydrive的不支持
我用SkyDrive,以微软比较听话的形势来看,应该比较稳定。
图片我放专门的图片服务器了,唉,麻烦啊
@evlos
做个插件比做一个外部的程序麻烦多了
@万戈
支持的,只是没有进行优化而已
@zwwooooo
有钱大叔
期待这款插件啊~
这插件太实用
传说中的反向代理~
>_< 搜索引擎找到这里的,不知道可不可以写成通用的不仅仅支持这三个图床 ^_^期待呢
@卜卜口の
这个程序基本上支持所有的图床,只是为了防止链接被重置的情况对 Picasa 等做了特殊规则
@bolo
原来如此^_^ 谢谢解答~
0 0找资源找来的。。。也同上殷切期待插件。。。
^_^我自己寫了一個差不多功能的代碼,不過整合到自己用的主題去了,沒有共享出來。
@摩凝(M.Chan)
要做成兼容性强的插件难度比较大
@bolo
是啊,会有各种各样奇怪的问题出现。
我的获取了远程图片,是存到远程自己的主机的,WP媒体库的图片也是存放到远程。