Skip to content

WordPress远程附件支持插件——Hacklog Remote Attachment 1.2.7[增加对Windows Live Writer等支持]

2011 十一月 19
screenshot-1

插件制作缘由

上次在小七的博客看到一基于SAE 的图库应用,小七说到一个问题:SAE的云豆远远不够用。于是我想,这样算来,用它的SAE,还不如自己另外加个空间,然后做个WP插件,负责把文件上传到远程服务器上面。这样,图片、附件与博客分离,还可以减轻本地服务器的压力。今天终于抽时间写下了这个插件的1.0.0版。

下一步计划:
把前台与后台分离,减少前台代码加载量。


插件简介

插件取名:Hacklog远程附件
WordPress 远程附件上传插件.Remote attachment support for WordPress.
安装完成后,到后台配置一下ftp服务器相关信息即可。
远程服务器只需要有FTP和www服务器(web服务器主要用于图片的显示)即OK.
远程的目录结构和本地的一样,支持多级目录。
上传附件(图片、音乐、其它文件),直接点击wp的上传按钮即可,过程与原来无异。
在后台可删除远程附件。
后台可统计远程附件占用的空间大小。
支持单用户博客、多用户博客。

插件目的

缓解本地服务器压力(空间容量,流量,请求)
同时,像图片等附件存储在远程服务器上面,有cookie-free domain的好处,可以加速页面显示(Yslow V2倒数第4条:Use cookie-free domains)

== Installation ==

1. Upload the whole fold `hacklog-remote-attachment` to the `/wp-content/plugins/` directory
2. Activate the plugin through the ‘Plugins’ menu in WordPress
3. Configure the plugin via `Settings` -> `Hacklog Remote Attachment` menu and it’s OK now,you can upload attachments(iamges,videos,audio,etc.) to the remote FTP server.


注意

FTP服务器上面的目录必须有写权限!
FTP服务器上要有web服务器(apache、nginx或其它),这样图片才能在博客显示,当然,这个条件一般都容易满足的。
用于存放图片的FTP服务器目录下的文件对于web服务器(apache、nginx或其它)必须要有可读权限,这样图片才能通过http协议访问。
如果你决定把所有附件都迁移到远程FTP服务器上面,那么还要做以下步骤:
1.把本地服务器(即你博客当前服务器)上的附件上传到远程服务器上面的对应目录(具体是哪个目录,要根据你在插件后台设置来)。
2.更新数据库,可以手动进入phpmyadmin更新,或者用插件的Tools.手动更新请运行以下sql语句:

1
UPDATE  `wp_posts` SET post_content=REPLACE(post_content,'到原来附件目录的绝对URL','到远程附件目录的绝对URL');

如:

1
UPDATE  `wp_posts` SET post_content=REPLACE(post_content,'ihacklog.com/wp-content/uploads/','static.ihacklog.com/wp-files/');

小技巧

对于apache服务器,为防止别人引用你的图片,可在远程服务器的附件目录下面放一.htaccess文件,内容示例如下,此文件可防止外站引用消耗流量,并且加上了文件缓存,节省流量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Options -Indexes
# BEGIN
<IfModule mod_rewrite.c>
# START Fang dao lian
#allow empty ref
RewriteCond %{HTTP_REFERER} !^$ [NC]
#if not my website
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?ihacklog\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?google\.com/reader/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?zhuaxia\.com/ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|mp3|wma|zip|rar|bz|gz|tar|doc|pdf)$ http://ihacklog.com/ihacklog.com.png [R,NC]
# END Fang dao lian
</IfModule>

<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>

# Image and Flash content Caching for One Month  
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

#ETags
FileETag MTime Size
<ifmodule mod_expires.c>
  <filesmatch "\.(jpg|gif|png|css|js)$">
       ExpiresActive on
       ExpiresDefault "access plus 1 year"
   </filesmatch>
</ifmodule>

已知BUG

如果你只是想在使用此插件之后的文件上传到远程FTP服务器上,而原来的文件在本地服务器继续保留,那么后台查看先前的附件时,其URL是不正确的。但这并不影响先前的日志中附件和图片的显示等。


== Changelog ==

= 1.0.0 =
released the first version.

= 1.0.1 =
fixed a small bug(cron delete).

= 1.0.2 =
增加远程目录检测,若不存在则尝试自动创建。避免在某些FTP服务器上出现“在远程服务器创建目录失败”的问题。
增加自动创建index.html的文件的功能,防止目录被浏览。
= 1.1.2 =
1.1.0 增加与水印插件的兼容性,使上传到远程服务器的图片同样可以加上水印

= 1.1.3 =
修复远程路径是FTP的主(根)目录时生成的URL路径带两个/的bug
添加了FTP连接超时选项
添加了FTP连接错误信息返回
= 1.1.5 =
增加了一个选项:HTTP Remote path (HTTP远程路径)
原来的Remote path (远程路径) 更改为 FTP Remote path (FTP远程路径)
如果你原来的版本使用没有问题,那么把HTTP Remote path (HTTP远程路径) 和  FTP Remote path (FTP远程路径) 填写相同的目录名即可
= 1.1.6 =
增加:新建目录权限为0755 ,文件权限为644
修正:当日志发布日期与附件上传日期不同时,子目录不正确的bug.
= 1.2.0 =
增加重复文件检测,避免同名文件被覆盖。更新和完善了帮助信息,对WP 3.3完美兼容

= 1.2.6 =
增加对xmlrpc支持(支持通过Windows Live Writer 上传图片时自动上传到远程ftp服务器)

更新到1.1.5请注意

1.1.5 增加了一个选项:HTTP Remote path (HTTP远程路径)
原来的Remote path (远程路径) 更改为 FTP Remote path (FTP远程路径)
如果你原来的版本使用没有问题,那么把HTTP Remote path (HTTP远程路径) 和  FTP Remote path (FTP远程路径) 填写相同的目录名即可。

插件下载



FAQ

0×01

Q:如果把本地服务器上的附件文件迁移到远程FTP服务器,过一段时间后,我又想把它迁回本地服务器,这样可以吗?
A:可以。直接把相应目录的文件上传到本地服务器即可(注意目录要对应)。然后更新一下数据库(以我的博客为例,其中要替换的内容要根据你自己的博客配置来)。最后禁用本插件即可。

1
2
UPDATE  `wp_posts` SET post_content=REPLACE(post_content,'static.ihacklog.com/wp-files/','ihacklog.com/wp-content/uploads/');
UPDATE  `wp_posts` SET post_content=REPLACE(post_content,'static.ihacklog.com/wp-files/','www.ihacklog.com/wp-content/uploads/');

0×02

Q:如果我只想把安装完此插件以后的附件上传到远程服务器,这样可不可以?
A:可以。注意,在这种情况下,后台查看先前(即安装此插件之前)的附件时,其URL是不正确的。但这并不影响先前的日志中附件和图片在前台页面的显示等。

0×03

Q:可以给些具体的配置的例子吗?我对这个配置不是很明白。
A:可以。不过你最好有一些关于服务器路径和绑定方面的相关知识。
这里我用 ====> 代表“绑定到”的意思。左边为域名,右边为www或ftp服务器绑定到的物理目录.


例子1:使用某FTP根目录来放附件文件
服务器方面:
img.domain.com ====> /path-to-www-root/img
FTP账号 主目录 ====> /path-to-www-root/img
后台部分配置:
Remote base URL(远程基本URL): http://img.domain.com
FTP Remote path(FTP远程路径): .
HTTP Remote path (HTTP远程路径): .


例子2:使用某FTP根目录下面的一个子目录(如wp-files)来放附件文件(我的博客目前就是这种情况)
服务器方面:
img.domain.com ====> /path-to-www-root/img
FTP账号主目录 ====> /path-to-www-root/img
后台部分配置:
Remote base URL(远程基本URL): http://img.domain.com
FTP Remote path(FTP远程路径): wp-files
HTTP Remote path (HTTP远程路径): wp-files


例子3:使用某FTP根目录下面的一个子目录(如wp-files)来放附件文件,并且FTP绑定与域名绑定不相同。
服务器方面:
static.domain.com ====> /path-to-www-root/wp-files
FTP账号主目录 ====> /path-to-www-root/
后台部分配置:
Remote base URL(远程基本URL): http://static.domain.com
FTP Remote path(FTP远程路径): wp-files
HTTP Remote path (HTTP远程路径): .


0×04.无法连接远程服务器

如果插件提示这个错误,那么,请你确定你的服务器能正常连接远程FTP服务器之后,你再来这里提问。
怎么确定?如果是vps等可以远程登录后服务器上进行管理的,你可以ping 一下远程FTP服务器,看能否ping通。如不能ping通,说明你的WP服务器到远程FTP服务器无法正常连接。在确定能正常ping通的情况下,再telnet 连接远程FTP服务器的21和20端口,看能否正常连接。若不能,说明你的WP服务器到远程FTP服务器是不能正常通信的,这个问题与本插件无关,请自行联系你的服务器提供商解决。

如果是虚拟主机等,请下载此脚本上传到你的WP所在服务器然后测试ftp连接是否正常。(不会以上两条命令的亦可下载此工具测试)

喜欢这篇文章吗?

请订阅本站 RSS feed填写您的邮件地址,订阅我们的精彩内容:,欢迎点击这里捐赠以支持荒野无灯转播到腾讯微博 转播到腾讯微博

作者:荒野无灯
出处:Hacklog【Hacklog】

声明: 本站遵循 署名-非商业性使用-相同方式共享 2.5 共享协议. 转载请注明转自Hacklog【荒野无灯weblog】

本文链接: http://ihacklog.com/?p=5001

相关日志

79 Responses Post a comment
  1. 二月 23, 2012

    你好。再次打扰,用你发布的FTP测试,域名链接提示Error no: 0
    Error message: php_network_getaddresses: getaddrinfo failed: 不知道这样的主机。 直接用用ip链接提示我Error no: 10060
    Error message: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 在IE上或者dos下不管是直接访问域名还是IP 都能正常的连接。
    我百度谷歌提示这问题是DNS问题,我添加了几行DNS还是无法解决此问题,服务器是我以前公司的,我托管。win2003系统、求解。。

  2. 二月 20, 2012

    安装插件后,填写FTP全部填写正确,点击保存的时候提示 无法链接远程服务器,我不知道怎么回事。求解。。。

  3. 熊猫 permalink
    二月 19, 2012

    你好,我的用的是vps,在llsmp环境下假设的wordpress,用了webluker的cdn,请问为何在设置FTP信息的时候,就算设置对了还提示“无法连接远程服务器!”?是我vps的设置问题,还是CDN捣的乱?

    • 二月 19, 2012

      @熊猫
      这个连接ftp与平台无关,与cdn无关。
      你只要保证:一,用户名和密码正确。二,你的WP所在的服务器允许php外连

      • 熊猫 permalink
        二月 19, 2012

        @荒野无灯
        PHP外链?wp可以自动更新,这个说明可以外链么?

        • 二月 19, 2012

          是外连。。。。。
          这个你要自己确认。自动更新用的是http协议,我这个是ftp.

          • 熊猫 permalink
            二月 19, 2012

            @荒野无灯
            嗯 我查到了,是我的VPS的php没加ftp扩展……这个可麻烦了……

    • 二月 19, 2012

      @熊猫
      事实上插件会自动检测的。插件可以通过ftpext(PHP ftp扩展)和ftpsockets两种方式连接FTP,一般很少有服务器两种都不能用的。如果你的是因为这个原因无法连接上,那真的要检查一下你的php编译和安装配置了……

      • 熊猫 permalink
        二月 19, 2012

        @荒野无灯
        查过了,就是编译的时候没编译ftp进去……我加了个ftp.so就可以用了~谢谢~ :twisted:

  4. 二月 13, 2012

    这个插件很强大,强烈支持

  5. cpanle permalink
    二月 10, 2012

    我在后台填写了相关的信息,但上传图片是显示“上传文件到远程服务器失败”,到底是什么问题?

  6. 二月 9, 2012

    这个插件很强大,但是我想的是将远程服务器仅作为备份和流量不够时的应急之用,所以请教
    1.插件不删除本地图片
    2.图片插入到文章时 还是本地的图片地址
    怎样修改?

    • 二月 9, 2012

      @ezencart
      hacklog-remote-attachment-backup.zip 上传到这里了,我还没有测试,你测试一下看正常不

      • 二月 9, 2012

        @荒野无灯
        :?: ,博客还是WordPress 3.0.5,模板不支持高版本的,模板里我自己又做了很多的改动,换起来很麻烦

        • 二月 9, 2012

          @ezencart
          2.x的模板在wp3.3下面跑基本上是没问题的吧。
          此插件目前是用的最新3.3的代码。你如果要在低版本下运行,可简单的把

          1
          add_action('load-' . $option_page, array(__CLASS__, 'add_my_contextual_help'));

          这一行注释掉(在前面加两个英文半角的//)

          • 二月 9, 2012

            @荒野无灯
            小bug,删除操作时,远程的图片删掉了,本地的还保留着。
            在请教,用tools将本地图片路径改为远程时,我这边提示 “您没有足够的权限访问这个页面。”,是我在空间中的权限不够,还是哪个页面文件要改为777权限?

            在建议下,可以本地图片不删除,和用本地图片路径集成上,可能也有人
            有这样的需求呢 :-|

        • 二月 9, 2012

          @ezencart
          嗯,感谢测试,新版本已经上传:hacklog-remote-attachment-backup-v1.2.4.zip
          您没有足够的权限访问这个页面。这个bug已经解决。另外,删除远程文件的同时会删除本地文件。基本上做到了同步上传和同步删除。

  7. 二月 8, 2012

    您好,菜鸟来麻烦了。
    我将后台的设置弄好,提示:“测试连接成功。”
    然后,就写文章上传,提示:Hacklog Remote Attachment:在远程服务器创建目录失败!请检查FTP用户权限。联系空间商,他说已经给权限了。

    我看了一下,您的说明,好像要对服务器进行设置:
    (服务器方面:
    img.domain.com ====> /path-to-www-root/img
    FTP账号 主目录 ====> /path-to-www-root/img)

    不知道这个要怎么弄?虚拟主机有这个操作吗?谢谢

  8. 二月 6, 2012

    这个插件太牛了

  9. 一月 3, 2012

    之前一直都没有问题, 这个月第一次上传文件发现的, 上传文件时候提示无法建立目录(Unable to create directory /home/wwwroot/jaskni.com/blog/wp-content/uploads/2012/01. Is its parent directory writable by the server?) 我觉得奇怪的不是为什么无法建立目录, 而是为什么这个插件无效了.. 上传的目录果断不应该是这里啊.. :arrow:

    • 一月 3, 2012

      @JASKNi
      是不是换服务器了或者你改变了/home/wwwroot/jaskni.com/blog/wp-content/uploads目录的权限?这个目录要有写权限的。

    • 一月 3, 2012

      @JASKNi
      呃.. 经过这次问题, 我大概明白这个插件的机制了.. 是先上传到默认目录再移动到FTP的么? 还是直接欺骗WP, 让它以为是传到了默认目录, 其实是FTP? 哈.. 具体不清楚了.. 不过问题已经解决了.. 又一个案例来着..

      • 一月 3, 2012

        @JASKNi
        是先到wp服务器再到ftp.因为,如果不这样做的话,像水印插件什么的、还有wp的缩略图生成都会无法工作的。

  10. 十二月 28, 2011

    我是在 WP 官方站看到您开发的插件,然后专程到您这里膜拜大神的。哈哈~

  11. 十二月 18, 2011

    这插件太好了,但发现个问题,我在本地测试可以连上并能正常使用了,在服务器安装使用提示“无法连接远程服务器!”同样的FTP,同样的配置!这插件对服务器有什么要求吗?

    • 十二月 18, 2011

      @邮莓
      没有什么要求,只要是标准的FTP服务器均可以。无法连接的原因,可能是你的wordpress服务器无法连接上你的远程FTP服务器。

      • 十二月 18, 2011

        @荒野无灯
        是因为wordpress服务器做了限制吗》?

        • 十二月 18, 2011

          @邮莓
          这个不是限制不限制的问题,服务器要连接另一服务器,就像你要进某网站一样,你进不了某个网站,可能是某网站的ip在你那里无法解析,或者是网络运营商作了限制等。你可以直接填写IP试一下。总之,原因各种各样。

          • 十二月 18, 2011

            @荒野无灯
            我用wordpress 服务器自家提供的FTP账号也是无法连接,看来只能使用WLW了!顺便问一下,这个插件正常使用的话,使用wordpress手机客户端上传的图片也是在远程FTP服务器吗?

        • 十二月 18, 2011

          @邮莓
          我估计你用的是国内服务器,连国外的空间。。。天朝的空间是杯具的。

          • 十二月 18, 2011

            @荒野无灯
            死心了,空间商回话了:服务器禁止了远程ftp。从服务器端是不能远程到别处的ftp的。可以web访问。

  12. 侃侃 permalink
    十二月 18, 2011

    还有个问题,我使用Hacklog Remote Attachment 1.2.1上传到远程主机wp-files文件夹的特色图片无法显示,wp-files的属性是755,域名attachment.mydomain.com是绑定在一个独立IP的空间上的。复制特色图片链接在浏览器中查看时,提示:file not found attachment./wp-files/2011/11/1.jpg。
    我的图片链接为这种形式:http://www.mydomain.com/wp-content/themes/wordpress/timthumb.php?src=http://attachment.mydomain.com/wp-files/2011/11/1.jpg&h=200&w=200&zc=1
    请问是我哪里设置错了吗?谢谢!

    • 十二月 18, 2011

      @侃侃
      直接访问也访问不了,说明你配置错误。请仔细看本文FAQ,如果你不了解域名绑定和FTP相关知识,请先Google一下~~

      • 侃侃 permalink
        十二月 18, 2011

        @荒野无灯
        我用的是例2的方式,域名attachment.mydomain.com和FTP账号主目录都绑定在了同一空间上,也就是attachment.mydomain.com这一网站的物理目录。
        后台部分配置:
        Remote base URL(远程基本URL): http://ihacklog.com/external_link_redirect/aHR0cDovL2F0dGFjaG1lbnQubXlkb21haW4uY29t
        FTP Remote path(FTP远程路径): wp-files
        HTTP Remote path (HTTP远程路径): wp-files
        不知道是我在插件设置时的错误?谢谢!

        • 十二月 18, 2011

          @侃侃
          你可以这样,上传完东西后,登录ftp看下对应的文件是否上传上去了。如果在ftp里,肯定是位置不对,配置有误。你可以提供一下你的url不?我好看下。

          • 侃侃 permalink
            十二月 18, 2011

            @荒野无灯
            试了下,应该是现在用的主题的问题,现用主题用了缩略图timthumb.php文件,当我换用wp默认主题时,图片就可以打开,所以插件的设置应该是对的,问题出在主题上。 :)

  13. 侃侃 permalink
    十二月 18, 2011

    请问这个插件可以和Hacklog DownloadManager 2.2.1同时使用吗?
    比如我同时启用了这两个插件,那我用Hacklog DownloadManager上传的附件也会上传到远程主机吗?还是只有wp自带的上传才会把附件上传到远程主机,而Hacklog DownloadManager上传的则会保留在本地?谢谢!

    • 十二月 18, 2011

      @侃侃
      可以同时使用。二者不会有影响的。远程附件支持插件是hook wp原有的上传,下载插件用的是自己的上传和下载处理。

  14. 十二月 17, 2011

    我在进行配置时 点击“WordPress 远程附件”出现以下错误

    Fatal error: Call to undefined method stdClass::add_help_tab() in /home/uuhangco/domains/uuhang.com/public_html/wp-content/plugins/hacklog-remote-attachment/includes/hacklogra.class.php on line 664

  15. 十二月 16, 2011

    发现一个bug,启用了这个插件后,再通过在线上传的方式添加插件,就会出现这样的错误: /home/ftp/1520/***/***/wp-content/uploads/2011/12/*****.zip 下载安装包…
    下载失败。 URL 无效。
    已经在两个站点上测试,均出现这样的错误。

  16. 睡醒的猪 permalink
    十二月 16, 2011

    LZ 附件的地址是修复了增量可是上传后在数据库的附件名字没有增加数字 还是同名的 你看看

    • 十二月 16, 2011

      @睡醒的猪
      关于这个问题,首先,WordPress本身也是这样处理的。不信你把插件禁用,再上传同名文件看。其次,在上传处理中,文件名是直接从你上传的文件名字获取的,插件不可Hook. @see media_handle_upload() call wp_handle_upload() ,文件名称(name,title)是直接从$_FILES全局变量取的。
      所以,这个不是BUG.今后也没有打算要修改。
      还有,为什么你喜欢上传同名的文件呢?

  17. 十二月 15, 2011

    正想搞转移 从漠北那过来的
    又转战小七
    然后再次过来
    给力

  18. 十二月 14, 2011

    今天是12月14,我上传远程附件,文件在2011/11的目录里面。

  19. 睡醒得住 permalink
    十二月 12, 2011

    上传两个同名的文件的时候,同名会覆盖而不是增量的方式如:上传2个21.rar 最终结果为21.rar 211.rar WP是这样默认的楼主你这个插件还需要修复啊

  20. 十二月 7, 2011

    吓死我了,我还以为和我刚完成了插件撞车了呢…
    遇见php高手了,以后有php的问题直接来麻烦您啦 :mrgreen:
    献上鄙人的拙作~http://huiyi.in/title/RPU.html
    恳请指点一二。

  21. 十二月 1, 2011

    正想来看看防盗链的设置呢,发现已经有了,哈哈

  22. 十二月 1, 2011

    :twisted: 我也有个这样的需求,本来打算自己动手呢,没想到你做啦。

  23. 十一月 30, 2011

    问题解决了… 非常感谢你的这个插件, 如此方便快捷并高清无码地帮我解决了 Cookie-Free Domain 问题, 顺便可以做一个图床给朋友们用了, 哈哈. :lol:

    • 十一月 30, 2011

      @JASKNi
      是目录权限问题,要从http访问到的话,只到http服务器要有读的权限的。也就是文件权限至少要0744 什么的。

      • 十一月 30, 2011

        @荒野无灯
        刚刚说明了问题以后就没有关这个页面, 然后解决问题了就直接编辑了…
        搞得别人估计都看不懂了, 我看看那篇去.

    • 十一月 30, 2011

      @JASKNi
      如果只是要 Cookie-Free Domain 的话,不用插件的。见《wordpress附件与博客主站域名分离》一文。

  24. 十一月 29, 2011

    你更新的还真快啊,最近在找流量大点的主机准备搬迁我的图片呢,还在筛选主机商

  25. 十一月 29, 2011

    问个小问题,插件如果直接放到主题中,应该怎么改就可以直接用。

  26. 十一月 29, 2011

    话说做插件真是一件很有趣的事情~

  27. 十一月 27, 2011

    nice, 今晚我就试试, 而且我感觉可以很容易地顺便就把免费饼干域名的问题给解决了.
    决定用下去就写文章推荐. 哈哈.

  28. 十一月 20, 2011

    哪天在公司没事时可以测试一下看看。

    希望好用!

    能按年/月份自动分开存放到不同文件夹吗

  29. 十一月 19, 2011

    这个不错,可以收藏,买VPS了 到时候 试试看。

  30. 十一月 19, 2011

    沙发沙发~ 撒花撒花~

Trackbacks & Pingbacks

  1. WordPress远程附件插件 – Hacklog Remote Attachment | 马文建的博客
  2. WordPress远程附件支持插件——Hacklog Remote Attachment | 逍遥阁
  3. WordPress 远程图床插件:Hacklog Remote Attachment[远程附件支持] | 小七
  4. 恍惚之中 » Blog Archive » 初体验:又拍云存储

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS