WordPress远程附件支持插件——Hacklog Remote Attachment 1.2.8[增加对Windows Live Writer等支持] » 荒野无灯weblog

Keep It Simple, Stupid.

荒野无灯weblog

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

插件制作缘由

上次在小七的博客看到一基于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语句:

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

如:

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

小技巧

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

Options -Indexes
# BEGIN 

# 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



deny from all


# Image and Flash content Caching for One Month  

Header set Cache-Control "max-age=2592000"


#ETags
FileETag MTime Size

  
       ExpiresActive on
       ExpiresDefault "access plus 1 year"
   

已知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.2.8 =
修正 Call-time pass-by-reference has been removed in xxx 错误

更新到1.1.5请注意

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

插件下载


hacklog-remote-attachment.1.2.8.zip (80.9 KB)


FAQ

0×01

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

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连接是否正常。(不会以上两条命令的亦可下载此工具测试)

ftp_test.zip (1.5 KB)

Tagged in : 插件,Remote Attachment,Remote,Attachment,远程附件

All Comments (14)
Gravatar image
Gravatar image
amin
this plugin need update for wp5, please update it
Gravatar image
Zh
可以更新这个插件吗大大!!
Gravatar image
navid
pleas update this plugin for wp 5
Gravatar image
老高
能否上传到远程的同时本地留一份?一旦图床服务器出了问题 至少还有本地可以挽回。毕竟本地服务器会更加稳定一点。
Gravatar image
Lim
好像这种我试过几个,比如在一个月的目录下面,上传同名称的图片,之后上传的会失效,还是原来那个图片,比如01.jpg,你再上一传一个01.jpg,还是会显示第一次上传的那个,不知道能不能解决这个