Home > Develop > PHP 获取远程图片
2010March . 24th

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 插件,如果你发现这个脚本有不足的地方,请告诉我。

推荐到豆瓣
  1. 2010March . 24th - 5:05 PM

    沙发,期待你的插件。

  2. 2010March . 24th - 6:01 PM

    这个挺实用,做成插件吧。
    ps:文章改个标题吧

  3. 2010March . 24th - 8:50 PM

    呵呵,图床~你搞定,我再尝鲜!

  4. 2010March . 25th - 7:18 AM

    嘿嘿,强力支持,期待插件中 ~

  5. 2010March . 25th - 10:50 AM

    真是强大

  6. 2010March . 25th - 12:14 PM

    可惜呀,skydrive的不支持

  7. 2010March . 25th - 6:04 PM

    我用SkyDrive,以微软比较听话的形势来看,应该比较稳定。

  8. 2010March . 25th - 8:52 PM

    图片我放专门的图片服务器了,唉,麻烦啊

  9. 2010March . 25th - 10:29 PM

    @evlos
    做个插件比做一个外部的程序麻烦多了
    @万戈
    支持的,只是没有进行优化而已
    @zwwooooo
    有钱大叔

  10. 2010March . 26th - 1:20 PM

    期待这款插件啊~

  11. 2010March . 27th - 2:35 AM

    这插件太实用

  12. 2010March . 28th - 4:50 PM

    传说中的反向代理~

  13. 2010April . 28th - 8:46 PM

    >_< 搜索引擎找到这里的,不知道可不可以写成通用的不仅仅支持这三个图床 ^_^期待呢

  14. 2010April . 28th - 10:06 PM

    @卜卜口の
    这个程序基本上支持所有的图床,只是为了防止链接被重置的情况对 Picasa 等做了特殊规则

  15. 2010April . 28th - 10:08 PM

    @bolo
    原来如此^_^ 谢谢解答~

  16. 2010April . 29th - 11:43 PM

    0 0找资源找来的。。。也同上殷切期待插件。。。

  17. 2010August . 8th - 11:02 AM

    ^_^我自己寫了一個差不多功能的代碼,不過整合到自己用的主題去了,沒有共享出來。

  18. 2010August . 8th - 12:43 PM

    @摩凝(M.Chan)
    要做成兼容性强的插件难度比较大

  19. 2010August . 8th - 3:10 PM

    @bolo
    是啊,会有各种各样奇怪的问题出现。
    我的获取了远程图片,是存到远程自己的主机的,WP媒体库的图片也是存放到远程。

Subscriber selector

Close