zoukankan      html  css  js  c++  java
  • FTP服务器搭建及操作(一)

    FTP服务器搭建及操作(一)

    搭建方法参照(windows):http://www.cnblogs.com/lidan/archive/2012/06/04/2535103.html

    打开浏览器,输入你的IP,ftp://xxx.xxx.xxx.xxx。自己的FTP搭建成功!

    FTP 是一种数据传输协议 (File Transfer Protocol),它的连接模式有两种: 主动模式( active )和被动模式( passive )。

    以下说明FTP的连接是怎样建立的:

    1. 在 active 模式下 (一般预设的模式):

    FTP client 开启一个随机选择的TCP port 呼叫 FTP server 的 port 21请求建立连接。当完成 Three-Way Handshake 之后,连接就成功建立,但这仅是命令通道的建立。
    当两端需要传送数据资料的时候,client 透过命令通道用一个 port command 告诉 server ,client可以用另一个TCP port 做数据通道。
    然后 server 用 port 20 和刚才client 所告知的 TCP port 建立数据连接。注意:连接方向是从server 到 client 的,TCP 分组中会有一个 SYN flag。
    然后 client 会返回一个带 ACK flag的确认分组,并完成另一次的 Three-Way Handshake 过程。这时候,数据连接才能成功建立。开始数据传送。

    2. 在 passive 模式下:

    FTP client 开启一个随机选择的TCP port 呼叫 FTP server 的 port 21请求建立连接,完成命令通道的建立。

    当两端需要传送数据的时候,client 通过命令通道发送一个 PASV command 给server,要求进入 passive 传输模式。
    然后 server 像上述的正常模式之第 2 步骤那样,挑一个TCP port ,并用命令通道告诉 client。
    然后 client 用另一个TCP port 呼叫刚才 server 告知的 TCP port 来建立数据通道。此时分组中带有 SYN flag。
    server 确认后回送一个 ACK 分组。并完成所有握手过程、成功建立数据通道。
    开始数据传送。 在实际使用中, active mode 用来登入一些架设在主机上没有安装防火墙的 FTP server,或是架设在 client side 的 FTP server! Passive mode (简称 PASV)用来登陆一些架设于防火墙保护下而又是开设于主机上的 FTP server!

    ftp_pasv — 返回当前 FTP 被动模式是否打开

    PHP操作实例
    <?php
    
    $ftp_server = "192.168.0.100";//"ftp.sun.com"
    $ftp_user_name = "Admin";
    $ftp_user_pass = "123456";
    $source_file = 'test.txt';
    //$destination_file = 'test/readme.txt' ;
    $destination_file = 'readme.txt' ;
    
    // set up basic connection
    $conn_id  =  ftp_connect ( $ftp_server,21 );
    
    // login with username and password
    $login_result  =  ftp_login ( $conn_id ,  $ftp_user_name ,  $ftp_user_pass );
    
    //被动模式打开 or 关闭
    $pasv = ftp_pasv($conn_id,true );
    print_r( "被动模式结果 ".$pasv." 
    " );
    
    //获取远端系统类型
    if ( $type  =  ftp_systype ( $conn_id )) {
        echo  " powered by  $type 
    " ;
    } else {
        echo  "Couldn't get the systype" ;
    }
    
    
    // check connection
    if ((! $conn_id ) || (! $login_result )) {
        echo  "FTP connection has failed!" ;
        echo  "Attempted to connect to  $ftp_server  for user  $ftp_user_name " ;
        exit;
    } else {
        echo  "Connected to  $ftp_server , for user  $ftp_user_name 
    " ;
    }
    
    //为要上传到 FTP 服务器的文件分配空间。
    ftp_alloc($conn_id,"160",$response);
    echo $response."
    ";
    
    //将当前目录改为目标文件
    echo "当前目录更改 ".ftp_chdir ( $conn_id ,  "test" )."
    ";
    
    //删除服务端文件
    if (ftp_size($conn_id,$destination_file)){
        echo "找到目录了
    ";
        echo "删除文件 ".ftp_delete($conn_id,$destination_file)."
    ";
    }
    
    // upload the file
    $upload  =  ftp_put ( $conn_id ,  $destination_file ,  $source_file ,  FTP_ASCII  );
    
    // check upload status
    if (! $upload ) {
        echo  "FTP upload has failed!" ;
    } else {
        echo  "Uploaded  $source_file  to  $ftp_server  as  $destination_file
     " ;
    }
    
    //返回当前目录内容
    print_r("当前目录 :");
    print_r( ftp_nlist( $conn_id,'.' ));
    
    // close the FTP stream
    ftp_close ( $conn_id );
    
    ?>
    
    

    注意事项

    • 连接地址一般为ip、解析的地址;

    • 上传文件出错请检查当前账户是否有写权限;

    FTP操作类

    PHP FTP 函数

    PHP:指示支持该函数的最早的 PHP 版本。
    函数  描述  PHP
    ftp_alloc() 为要上传到 FTP 服务器的文件分配空间。   5
    ftp_cdup()  把当前目录改变为 FTP 服务器上的父目录。  3
    ftp_chdir() 改变 FTP 服务器上的当前目录。   3
    ftp_chmod() 通过 FTP 设置文件上的权限。    5
    ftp_close() 关闭 FTP 连接。  4
    ftp_connect()   打开 FTP 连接。  3
    ftp_delete()    删除 FTP 服务器上的文件。 3
    ftp_exec()  在 FTP 上执行一个程序/命令。   4
    ftp_fget()  从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中。   3
    ftp_fput()  上传一个已打开的文件,并在 FTP 服务器上把它保存为一个文件。    3
    ftp_get_option()    返回当前 FTP 连接的各种不同的选项设置。  4
    ftp_get()   从 FTP 服务器下载文件。  3
    ftp_login() 登录 FTP 服务器。 3
    ftp_mdtm()  返回指定文件的最后修改时间。  3
    ftp_mkdir() 在 FTP 服务器创建一个新目录。   3
    ftp_nb_continue()   连续获取/发送文件 (non-blocking)。   4
    ftp_nb_fget()   从FTP服务器上下载文件并保存到本地已经打开的文件中(non-blocking)    4
    ftp_nb_fput()   上传已打开的文件,并在FTP服务器上把它保存为文件(non-blocking)。    4
    ftp_nb_get()    从 FTP 服务器下载文件 (non-blocking)。   4
    ftp_nb_put()    把文件上传到服务器 (non-blocking)。   4
    ftp_nlist() 返回指定目录的文件列表。    3
    ftp_pasv()  返回当前 FTP 被动模式是否打开。  3
    ftp_put()   把文件上传到服务器。  3
    ftp_pwd()   返回当前目录名称。   3
    ftp_quit()  ftp_close() 的别名。    3
    ftp_raw()   向 FTP 服务器发送一个 raw 命令。   5
    ftp_rawlist()   返回指定目录中文件的详细列表。 3
    ftp_rename()    重命名 FTP 服务器上的文件或目录。 3
    ftp_rmdir() 删除 FTP 服务器上的目录。 3
    ftp_set_option()    设置各种 FTP 运行时选项。 4
    ftp_site()  向服务器发送 SITE 命令。 3
    ftp_size()  返回指定文件的大小。  3
    ftp_ssl_connect()   打开一个安全的 SSL-FTP 连接。 4
    ftp_systype()   返回远程 FTP 服务器的系统类型标识符。   3
    
  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/followyou/p/6927205.html
Copyright © 2011-2022 走看看