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 (5)
Gravatar image
Gravatar image
ヤンヤン
作者您好,請問之後會開發sftp連線上傳的功能嗎?我嘗試使用此外掛時,因為無法用sftp連線,所以被另一台主機拒絕連線了,結果無法上傳圖片。
Gravatar image
燃星
谢谢dalao
Gravatar image
燃星
找到解决方法了,去设置-媒体,把文件的完整url地址改成http://static.yourdomain.com/uploads(根据你设置的Remote base URL(远程基本URL)+FTP Remote path(FTP远程路径))
Gravatar image
远航
现在用的是1.3.0版本,配置正确,但图片上传后url显示不正确。而且无法正常上传到FTP上。求更新!
Gravatar image
燃星
用的是1.3.0,媒体库和后台编辑的图片链接位置都改变了,但是查看文章中的图片链接没有变,求更新啊,谢谢大大