如何利用lftp(ftp客户端)实现linux系统间的文件同步或互拷

在windows系统中我们有很多FTP客户端可以选择,我们可以方便的进行文件管理。在linux和windows间,我们也不为难。但如果要在两个Linux服务器间通过ftp进行管理,我们就没有概念了。今天我就发现了一个Linux下的命令行客户端,很好用。这就是LFTP,这款经典FTP软件。
lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。
它的操作很像SHELL。我自己用的是REDHAT,已经默认安装了。如果你用的是DEBIAN,你可以通过APT-GET INSTALL进行安装,很方便。
我们可以运行 lftp –help查看lftp的基本信息
登录ftp的形式:lftp 用户名:密码@ftp地址:传送端口(默认21)
也可以先不带用户名登录,然后在接口界面下用login命令来用指定账号登录,密码不显示。
查看文件与改变目录跟linux很像:ls和cd 对应ftp目录
下载:get当然是可以的,还可以用mget -c *.pdf
我们还可以做镜像,下载用:mirror aaa/
将aaa目录整个的下载下来,子目录也会自动复制
使用镜像模式上传:同样的put,mput,都是对文件的操作,和下载类似。
mirror -R 本地目录名
将本地目录以迭代(包括子目录)的方式反向上传到ftp site。


如何处理debian的linux下vsftpd服务器500 OOPS: cannot change directory错误

我在debian版的linux上安装配置vsftpd时,新建用户不能通过FTP登陆
连接上时报了500 OOPS: cannot change directory错误
开始我把文件夹属主改了,执行这个命令chown popcms /var/www/popcms/,还是不行
从CMD下的报错,我怀疑是FTP的用户的默认目录不对,或没有权限
于是我想到了usermod,执行了usermod -d /var/www/popcms/ popcms
测试成功,原来是用户默认目录


一次性登陆Ftp的地址格式

ftp://username:password@10.22.0.89
这个格式里: ftp://是FTP的协议规范,是必须的
后面的username为用户名
冒号后面password为密码
紧跟着@10.22.0.89为IP地址,也可以是域名类似www.murray.cn


FTP上传、下载单个大于2G文件限制的真相

FTP传输容量没有2G限制,2G限制是FS的问题。
你一次性传10个1G文件没事,但传1个超过2G的就不行了,关键问题是FS的问题。这是windows下的FS参考资料:
文件系统 文件大小限制
FAT12 最大支持8M
FAT16 最大支持2G
FAT32 [...]


如何解决FTP数据Socket连接被拒的错误

通过FTP连接网站时出现“数据 Socket 错误: 连接被拒 列表错误”
出现这个错误是因为没有去掉被动模式。您只需要去掉被动模式和关闭防火墙就可以了。
如果是FlashFXP,去掉被动模式的方法:
选项
–参数设置
–连接
–页面中的“使用被动模式”,只要将前面的钩去掉。
如果是CuteFTP,去掉被动模式的方法:
编辑
–设置
–连接
–防火墙
–页面中的“PASV模式”,只要将前面的钩去掉。


php的FTP环境出错-undefined function ftp_connect()

最近要开发一个在线推送系统,要用到FTP,从网上找了几个FTP的管理类都不管用,加了些调试代码后发现报以下这个错
undefined function ftp_connect()
才知道使自己的PHP环境没有支持FTP,于是重新编译了PHP,加了–enable-ftp,FTP调试成功了
网上查了资料发现Windows 中 PHP4 默认是支持 FTP 函数的,不需要加载 php_ftp.dll;
Linux 中,PHP4 如果要使用 FTP 函数,编译的时候 –enable-ftp 激活 FTP 函数
顺便也把自己找到的FTP类也贴上来,还算好用
class class_ftp
{
public $off;
public $conn_id;
function __construct($FTP_HOST,$FTP_PORT,$FTP_USER,$FTP_PASS){
ftp_connect($FTP_HOST,$FTP_PORT);
$this->conn_id = @ftp_connect($FTP_HOST,$FTP_PORT) or die(”FTP服务器连接失败”);
@ftp_login($this->conn_id,$FTP_USER,$FTP_PASS) or die(”FTP服务器登陆失败”);
@ftp_pasv($this->conn_id,1); }
function up_file($path,$newpath,$type=true){
if($type) $this->dir_mkdirs($newpath);
$this->off = @ftp_put($this->conn_id,$newpath,$path,FTP_BINARY);
if(!$this->off) echo “文件上传失败,请检查权限及路径是否正确!”;}
function move_file($path,$newpath,$type=true){
if($type) $this->dir_mkdirs($newpath);
$this->off = @ftp_rename($this->conn_id,$path,$newpath);
if(!$this->off) echo “文件移动失败,请检查权限及原路径是否正确!”;}
function copy_file($path,$newpath,$type=true){
$downpath = “c:/tmp.dat”;
$this->off = @ftp_get($this->conn_id,$downpath,$path,FTP_BINARY);
if(!$this->off) echo “文件复制失败,请检查权限及原路径是否正确!”;
$this->up_file($downpath,$newpath,$type);}
function del_file($path){
$this->off = @ftp_delete($this->conn_id,$path);
if(!$this->off) echo “文件删除失败,请检查权限及路径是否正确!”;}
function dir_mkdirs($path){
$path_arr = explode(’/’,$path);
$file_name [...]


使用PHP操作FTP-用法

建立一个PHP的FTP联接必须遵守以下基本步骤:打开一个联接 - 发出认证信息 - 使用PHP函数操纵目录和传输文件。
以下具体实现:
<?
// 联接FTP服务器
$conn = ftp_connect(ftp.server.com);
// 使用username和password登录
ftp_login($conn, “john”, “doe”);
// 获取远端系统类型
ftp_systype($conn);
// 列示文件
$filelist = ftp_nlist($conn, “.”);
// 下载文件
ftp_get($conn, “data.zip”, “data.zip”, FTP_BINARY);
// 关闭联接
ftp_quit($conn);
//初结化一个FTP联接,PHP提供了ftp_connect()这个函数,它使用主机名称和端口作为参数。在上面的例子里,主机名字为“ftp.server.com”;如果端口没指定,PHP将会使用“21”作为缺省端口来建立联接。
//联接成功后ftp_connect()传回一个handle句柄;这个handle将被以后使用的FTP函数使用。
$conn = ftp_connect(ftp.server.com);
//一旦建立联接,使用ftp_login()发送一个用户名称和用户密码。你可以看到,这个函数ftp_login()使用了ftp_connect()函数传来的handle,以确定用户名和密码能被提交到正确的服务器。
ftp_login($conn, “john”, “doe”);
// close connection
ftp_quit($conn);
//登录了FTP服务器,PHP提供了一些函数,它们能获取一些关于系统和文件以及目录的信息。
ftp_pwd()
//获取当前所在的目录
$here = ftp_pwd($conn);
//获取服务器端系统信息ftp_systype()
$server_os = ftp_systype($conn);
//被动模式(PASV)的开关,打开或关闭PASV(1表示开)
ftp_pasv($conn, 1);
//进入目录中用ftp_chdir()函数,它接受一个目录名作为参数。
ftp_chdir($conn, “public_html”);
//回到所在的目录父目录用ftp_cdup()实现
ftp_cdup($conn);
//建立或移动一个目录,这要使用ftp_mkdir()和ftp_rmdir()函数;注意:ftp_mkdir()建立成功的话,就会返回新建立的目录名。
ftp_mkdir($conn, “test”);
ftp_rmdir($conn, “test”);
//上传文件,ftp_put()函数能很好的胜任,它需要你指定一个本地文件名,上传后的文件名以及传输的类型。比方说:如果你想上传“abc.txt”这个文件,上传后命名为“xyz.txt”,命令应该是这样:
ftp_put($conn, “xyz.txt”, “abc.txt”, FTP_ASCII);
//下载文件:PHP所提供的函数是ftp_get(),它也需要一个服务器上文件名,下载后的文件名,以及传输类型作为参数,例如:服务器端文件为his.zip,你想下载至本地机,并命名为hers.zip,命令如下:
ftp_get($conn, “hers.zip”, “his.zip”, FTP_BINARY);
//PHP提供两种方法:一种是简单列示文件名和目录,另一种就是详细的列示文件的大小,权限,创立时间等信息。
//第一种使用ftp_nlist()函数,第二种用ftp_rawlist().两种函数都需要一个目录名做为参数,都返回目录列做为一个数组,数组的每一个元素相当于列表的一行。
$filelist = ftp_nlist($conn, “.”);
//函数ftp_size(),它返回你所指定的文件的大小,使用BITES作为单位。要指出的是,如果它返回的是 “-1”的话,意味着这是一个目录
$filelist = ftp_size($conn, “data.zip”);
?>


用php进行FTP操作-分析

PHP是通过HTTP和FTP联接来传输文件的。通过HTTP上传文件早在PHP3中就已经出现,现在检测你的PHP环境是否支持FTP
<?
phpinfo();
?>
检查输出结果,有一“Additional Modules”区,这里列示了你的PHP支持的模块;如果你没发现FTP模块,你最好重新安装PHP,并添加FTP支持!
一个典型的FTP任务
——————————————————————————–
$ ftp ftp.server.com
Connected to ftp.server.com
220 server.com FTP server ready.
Name (server:john): john
331 Password required for john.
Password:
230 User john logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
drwxr-xr-x 5 john users 3072 Nov 2 11:03 .
drwxr-xr-x 88 root root 2048 Nov 1 23:26 [...]