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
    
  • 相关阅读:
    Qt 模态对话框不模态的问题
    Qt layout更新控件的问题
    javamail中使用一些问题的解决方案
    mysql too many connection解决方法
    hibernate的三种状态
    hibernate的几种主键
    hibernate的crud操作
    ajax简单校验用户名是否存在
    json的简单使用
    ajax读取服务器文本
  • 原文地址:https://www.cnblogs.com/followyou/p/6927205.html
Copyright © 2011-2022 走看看