windows下ftp自动更新

服务器(windows 2008 RC2)迁移到阿里云后, 原来的ftp自动更新脚本(php脚本,使用了ftp模块的函数)出现问题了,连接到海外的FTP服务器(澳大利亚的主机)后,列目录会出错,具体就是ftp_nlist函数执行超时,无法下载文件,具体原因未知。

当前服务器已开通FTP服务,测试用FTP脚本连接本地FTP没有问题的,于是现在解决方案为:
在本地新建一个帐户,想办法用其他方法将海外FTP的文件同步到本地FTP,将FTP脚本的配置修改为本地连接的帐户,使用同步后的文件更新,这样自动更新脚本的逻辑无需更改。

使用windows自带的ftp命令

先写一个批处理 auto.ftp

1
2
3
4
5
6
open aaa.com.au 
user 用户名
密码
dir 
get XXX.zip
bye

然后在命令行下执行:

1
ftp -n -s:auto.ftp

在本地执行可成功列目录和下载文件,但是放到服务器执行,到列目录时半天没响应,尝试以失败告终。

使用 wget

这是个在linux下很流行的一个工具,在windows下也有相应的版本,它不但支持http协议,也支持FTP下载,下载后直接扔%path%目录里去就行了,完成写个批处理,内容如下:

1
2
3
4
5
6
rem 使用wget获取到本地ftp。
cd /d F:\myftp
md logs
del *.zip*
wget ftp://aaa.com.au/file_%date:~0,4%%date:~5,2%.zip --ftp-user=用户名 --ftp-password=密码 
wget -q http://myhost/ftp-import.php --output-document=logs\%date:~0,4%%date:~5,2%%date:~8,2%.update.log

执行后文件将被下载到f:\myftp目录下。值得注意的是批处理的日期表示法。