haidong 发表于 2010-2-24 13:36:24

PHP实现的WEB方式的FTP客户端程序

<br>                   此程序需要FTP函数支持。 <BR>原文件 http://inebria.com/phpftp/ftp.phps <BR>请注意为了节省篇幅,这里省略了作者的版权声明 <BR><BR>ftp.php3 <BR><BR>&lt;?php<BR><BR>function phpftp_top() { <BR>    echo"&lt;!-- function phpftp_top --&gt; "; <BR>    echo"&lt;html&gt; "; <BR>    echo"&lt;head&gt; "; <BR>    echo"&lt;title&gt;PHP FTP Client v1.4&lt;/title&gt; "; <BR>    echo"&lt;/head&gt; "; <BR>    echo"&lt;body bgcolor="#ffffff"&gt; "; <BR>    echo"&lt;font face="courier"&gt; "; <BR>} <BR><BR>function phpftp_bottom() { <BR>    echo" &lt;!-- function phpftp_bottom --&gt; "; <BR>    echo"&lt;/font&gt; "; <BR>    echo"&lt;/body&gt; "; <BR>    echo"&lt;/html&gt; "; <BR>} <BR><BR>function phpftp_login() { <BR>    phpftp_top(); <BR>    echo"&lt;!-- function phpftp_login --&gt; "; <BR>    echo"&lt;p&gt; "; <BR>    echo"&lt;form action="ftp.php3" method=post&gt; "; <BR>    echo"Login:   "; <BR>    echo"&lt;input name="phpftp_user" type="text"&gt; "; <BR>    echo"&lt;p&gt; "; <BR>    echo"Password:"; <BR>    echo"&lt;input name="phpftp_passwd" type="password"&gt; "; <BR>    echo"&lt;p&gt; "; <BR>    echo"Directory: "; <BR>    echo"&lt;input name="phpftp_dir" type="text"&gt; "; <BR>    echo"&lt;p&gt; "; <BR>    echo"&lt;input type="hidden" name="function" value="dir"&gt; "; <BR>    echo"&lt;input type="submit" value="connect"&gt; "; <BR>    echo"&lt;/form&gt; "; <BR>    echo"&lt;p&gt; "; <BR>    phpftp_bottom(); <BR>} <BR><BR>/* This function does not return TRUE/FALSE - it returns the value of <BR>   $ftp, the current FTP stream. */<BR><BR>function phpftp_connect( $phpftp_user, $phpftp_passwd ) { <BR>    $phpftp_host= "localhost"; <BR>    $ftp = ftp_connect( $phpftp_host ); <BR>    if ( $ftp ) { <BR>      if ( ftp_login( $ftp, $phpftp_user, $phpftp_passwd ) ) { <BR>            return $ftp; <BR>      } <BR>    } <BR>} <BR><BR>function phpftp_list( $phpftp_user, $phpftp_passwd, $phpftp_dir ) { <BR>    phpftp_top(); <BR>    echo"&lt;!-- function phpftp_list --&gt; "; <BR>    $ftp = @phpftp_connect( $phpftp_user, $phpftp_passwd ); <BR>    if ( ! $ftp) { <BR>      echo"&lt;strong&gt;FTP login failed!&lt;/strong&gt; "; <BR>      echo"&lt;a href="ftp.php3"&gt;Start over?&lt;/a&gt; "; <BR>      phpftp_bottom(); <BR>    } else { <BR>      if ( ! $phpftp_dir ) { <BR>            $phpftp_dir=ftp_pwd( $ftp ); <BR>      } <BR>      if ( ! @ftp_chdir( $ftp, $phpftp_dir ) ) { <BR>            echo"&lt;font color="#ff0000"&gt;&lt;strong&gt;Can't enter that directory!&lt;/strong&gt;&lt;/font&gt;&lt;p&gt;&lt;p&gt; "; <BR>            $phpftp_dir=ftp_pwd( $ftp ); <BR>      } <BR>      echo"&lt;strong&gt;Current directory:&lt;/strong&gt; " . $phpftp_dir ."&lt;br&gt; "; <BR>      if ( $phpftp_dir =="/" ) { <BR>            $phpftp_dir= ""; <BR>      } <BR>      echo"&lt;table border=0 cellspacing=20&gt; "; <BR>      if ( $contents = ftp_nlist( $ftp,"." ) ) { <BR>            $d_i=0; <BR>            $f_i=0; <BR>            sort($contents); <BR>            for ( $i=0; $i &lt; count( $contents ); $i++ ) { <BR>                $file_size = ftp_size( $ftp, $contents[$i] ); <BR>                if ( $file_size == -1 ) { <BR>                  $nlist_dirs[$d_i]=$contents[$i]; <BR>                  $d_i++; <BR>                } else { <BR>                  $nlist_files[$f_i]=$contents[$i]; <BR>                  $nlist_filesize[$f_i]=$file_size; <BR>                  $f_i++; <BR>                } <BR>            } <BR>            echo"&lt;tr&gt;&lt;td&gt; "; <BR>            echo"&lt;font face="courier"&gt;&lt;strong&gt;Directories&lt;/strong&gt;&lt;/font&gt;&lt;br&gt; "; <BR>            echo"&lt;form action="ftp.php3" method=post&gt; "; <BR>            echo"&lt;input type="hidden" name="function" value="cd"&gt; "; <BR>            echo"&lt;input type="hidden" name="phpftp_user" value="" . $phpftp_user .""&gt; "; <BR>            echo"&lt;input type="hidden" name="phpftp_passwd" value="" . $phpftp_passwd .""&gt; ";   <BR>            echo"&lt;input type="hidden" name="phpftp_dir" value="" . $phpftp_dir .""&gt; "; <BR>            echo"&lt;select name="select_directory" size="10" width="100"&gt; "; <BR>            for ( $i=0; $i &lt; count( $nlist_dirs ); $i++ ) { <BR>                echo"&lt;option value="" . $nlist_dirs[$i] .""&gt;". $nlist_dirs[$i] ."&lt;/option&gt; "; <BR>            } <BR>            echo"&lt;/select&gt;&lt;br&gt; "; <BR>            echo"&lt;input type="submit" value="Enter Directory"&gt; "; <BR>            echo"&lt;/form&gt; "; <BR>            echo"&lt;/td&gt;&lt;td&gt; "; <BR>            echo"&lt;font face="courier"&gt;&lt;strong&gt;Files&lt;/strong&gt;&lt;/font&gt;&lt;br&gt; "; <BR>            echo"&lt;form action="ftp.php3" method=post&gt; "; <BR>            echo"&lt;input type="hidden" name="function" value="get"&gt; "; <BR>            echo"&lt;input type="hidden" name="phpftp_user" value="" . $phpftp_user .""&gt; "; <BR>            echo"&lt;input type="hidden" name="phpftp_passwd" value="" . $phpftp_passwd .""&gt; "; <BR>            echo"&lt;input type="hidden" name="phpftp_dir" value="" . $phpftp_dir .""&gt; "; <BR>            echo"&lt;select name="select_file" size="10"&gt; "; <BR>            for ( $i=0; $i &lt; count( $nlist_files ); $i++ ) { <BR>                echo"&lt;option value="" . $nlist_files[$i] .""&gt;".$nlist_files[$i] . "($nlist_filesize[$i] bytes)"."&lt;/option&gt; "; <BR>            } <BR>            echo"&lt;/select&gt;&lt;br&gt; "; <BR>            echo"&lt;input type="submit" value="Download File"&gt; "; <BR>            echo"&lt;/form&gt; "; <BR>            echo"&lt;/td&gt;&lt;/tr&gt; "; <BR>      } else { <BR>            echo"&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Directory empty or not readable&lt;/strong&gt;&lt;/font&gt;&lt;p&gt; "; <BR>      } <BR>      echo"&lt;/table&gt; "; <BR>      echo"&lt;p&gt; "; <BR>      echo"&lt;form action="ftp.php3" method=post&gt; "; <BR>      $cdup=dirname( $phpftp_dir ); <BR>      if ( $cdup =="" ) { <BR>            $cdup= "/"; <BR>      } <BR>      echo"&lt;input type="hidden" name="function" value="dir"&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_user" value="" . $phpftp_user .""&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_passwd" value="" . $phpftp_passwd .""&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_dir" value="" . $cdup .""&gt; "; <BR>      echo"&lt;input type="submit" value="Go up one directory"&gt; "; <BR>      echo"&lt;/form&gt; "; <BR>      echo"&lt;p&gt; "; <BR>      echo"&lt;form enctype="multipart/form-data" action="ftp.php3" method=post&gt; "; <BR>      echo"&lt;input type="hidden" name="max_file_size" value="1000000"&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_user" value="" . $phpftp_user .""&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_passwd" value="" . $phpftp_passwd .""&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_dir" value="" . $phpftp_dir .""&gt; "; <BR>      echo"&lt;input type="hidden" name="function" value="put"&gt; "; <BR>      echo"&lt;input type="submit" value="Upload this:"&gt; "; <BR>      echo"&lt;input name="userfile" type="file"&gt; "; <BR>      echo"&lt;/form&gt; "; <BR>      echo"&lt;p&gt; "; <BR>      echo"&lt;form action="ftp.php3" method=post&gt; "; <BR>      echo"&lt;input type="hidden" name="function" value="mkdir"&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_user" value="" . $phpftp_user .""&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_passwd" value="" . $phpftp_passwd .""&gt; "; <BR>      echo"&lt;input type="hidden" name="phpftp_dir" value="" . $phpftp_dir .""&gt; ";<BR>      echo"&lt;input type="submit" value="Make subdirectory:"&gt; "; <BR>      echo"&lt;input name="new_dir" type="text"&gt; "; <BR>      ftp_quit( $ftp ); <BR>      phpftp_bottom(); <BR>    } <BR>} <BR><BR>function phpftp_cd( $phpftp_user, $phpftp_passwd, $phpftp_dir, $select_directory ) { <BR>    echo"&lt;!-- function phpftp_cd --&gt; "; <BR>    $new_directory=$phpftp_dir ."/" . $select_directory; <BR>    phpftp_list( $phpftp_user, $phpftp_passwd, $new_directory ); <BR>} <BR><BR>function phpftp_mkdir( $phpftp_user, $phpftp_passwd, $phpftp_dir, $new_dir ) { <BR>    echo"&lt;!-- function phpftp_mkdir --&gt; "; <BR>    $ftp = @phpftp_connect( $phpftp_user, $phpftp_passwd ); <BR>    if ( $phpftp_dir =="" ) { <BR>      $phpftp_dir= "/"; <BR>    } <BR>    if ( ! $ftp ) { <BR>      @ftp_quit( $ftp ); <BR>      phpftp_top(); <BR>      echo"&lt;font color="#ff0000"&gt;&lt;strong&gt;FTP login failed!&lt;/strong&gt;&lt;/font&gt;&lt;p&gt;&lt;p&gt; "; <BR>      echo"&lt;a href="ftp.php3"&gt;Start over?&lt;/a&gt; "; <BR>      phpftp_bottom(); <BR>    } else { <BR>      $dir_path = $phpftp_dir ."/" . $new_dir; <BR>      @ftp_mkdir( $ftp, $dir_path ); <BR>      @ftp_quit( $ftp ); <BR>      phpftp_list( $phpftp_user, $phpftp_passwd, $phpftp_dir ); <BR>    } <BR>}; <BR>   <BR><BR>function phpftp_get( $phpftp_user, $phpftp_passwd, $phpftp_dir, $select_file ) { <BR>    $ftp = @phpftp_connect( $phpftp_user, $phpftp_passwd ); <BR>    if ( $phpftp_dir =="" ) { <BR>      $phpftp_dir= "/"; <BR>    } <BR>    if ( ( ! $ftp ) || ( ! @ftp_chdir( $ftp, $phpftp_dir ) ) ) { <BR>      @ftp_quit( $ftp ); <BR>      phpftp_top(); <BR>      echo"&lt;font color="#ff0000"&gt;&lt;strong&gt;FTP login failed!&lt;/strong&gt;&lt;/font&gt;&lt;p&gt;&lt;p&gt; "; <BR>      echo"&lt;a href="ftp.php3"&gt;Start over?&lt;/a&gt; "; <BR>      phpftp_bottom(); <BR>    } else { <BR>      srand((double)microtime()*1000000); <BR>      $randval = rand(); <BR>      $tmpfile= "/var/tmp/xfers/" . $select_file ."." . $randval; <BR>      if ( ! ftp_get( $ftp, $tmpfile, $select_file, FTP_BINARY ) ) { <BR>            ftp_quit( $ftp ); <BR>            phpftp_top(); <BR>            echo"&lt;font color="#ff0000"&gt;&lt;strong&gt;FTP get failed!&lt;/strong&gt;&lt;/font&gt;&lt;p&gt;&lt;p&gt; &lt;a href="ftp.php3"&gt;Start over?&lt;/a&gt; "; <BR>            phpftp_bottom(); <BR>      } else { <BR>            ftp_quit( $ftp ); <BR>            header("Content-Type: application/octet-stream" ); <BR>            header("Content-Disposition: attachment; filename=" . $select_file ); <BR>            readfile( $tmpfile ); <BR>      } <BR>      @unlink( $tmpfile ); <BR>    } <BR>} <BR><BR>function phpftp_put( $phpftp_user, $phpftp_passwd, $phpftp_dir, $userfile, $userfile_name ) { <BR>    srand((double)microtime()*1000000); <BR>    $randval = rand(); <BR>    $tmpfile= "/var/tmp/xfers/" . $userfile_name ."." . $randval; <BR>    if ( ! @copy( $userfile, $tmpfile ) ) { <BR>      phpftp_top(); <BR>      echo"&lt;font color="#ff0000"&gt;&lt;strong&gt;Upload failed!Probably no space on server for temp file.&lt;/strong&gt;&lt;/font&gt;&lt;p&gt;&lt;p&gt; &lt;a href="ftp.php3"&gt;Start over?&lt;/a&gt; "; <BR>      phpftp_bottom(); <BR>    } else { <BR>      if ( ! $ftp = @phpftp_connect( $phpftp_user, $phpftp_passwd ) ) { <BR>            unlink( $tmpfile ); <BR>            phpftp_top();<BR>            echo"&lt;font color="#ff0000"&gt;&lt;strong&gt;FTP login failed!&lt;/strong&gt;&lt;/font&gt;&lt;p&gt;&lt;p&gt; &lt;a href="ftp.php3"&gt;Start over?&lt;/a&gt; "; <BR>            phpftp_bottom(); <BR>      } else { <BR>            ftp_put( $ftp, $userfile_name, $tmpfile, FTP_BINARY ); <BR>            ftp_quit( $ftp ); <BR>            unlink( $tmpfile ); <BR>            phpftp_list( $phpftp_user, $phpftp_passwd, $phpftp_dir ); <BR>      } <BR>    } <BR>} <BR><BR>switch( $function ) { <BR>    case"dir"; <BR>      phpftp_list( $phpftp_user, $phpftp_passwd, $phpftp_dir ); <BR>      break; <BR>    case"cd"; <BR>      phpftp_cd( $phpftp_user, $phpftp_passwd, $phpftp_dir, $select_directory ); <BR>      break; <BR>    case"get"; <BR>      phpftp_get( $phpftp_user, $phpftp_passwd, $phpftp_dir, $select_file ); <BR>      break; <BR>    case"put"; <BR>      phpftp_put( $phpftp_user, $phpftp_passwd, $phpftp_dir, $userfile, $userfile_name ); <BR>      break; <BR>    case"mkdir"; <BR>      phpftp_mkdir( $phpftp_user, $phpftp_passwd, $phpftp_dir, $new_dir ); <BR>      break; <BR>    case""; <BR>      phpftp_login(); <BR>      break; <BR>} <BR><BR>?&gt;                   <br><br>
页: [1]
查看完整版本: PHP实现的WEB方式的FTP客户端程序