⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpclient.php

📁 PHP4_0入门与提高源程序代码
💻 PHP
字号:
<?php
/*****************************************
function:	输出html头,它被函数phpftp_login()调用
*****************************************/
function phpftp_top() {
?>
<!-- function phpftp_top -->
<html>
<head>
<title>PHP FTP Client</title>
</head>
<body bgcolor="#ffffff">
<font face="courier">
<?
}

/********************************************
function:	结束html文件,它被函数phpftp_login()调用
********************************************/
function phpftp_bottom() {
?>
<!-- function phpftp_bottom -->
</font>
</body>
</html>
<?
}

/*************************************************************************
function:	让用户输入用户名和密码的表单,第一次请求这个页面时出现*************************************************************************/
function phpftp_login() {
    phpftp_top();
?>
<!-- function phpftp_login -->
<p>
<form action="ftpclient.php" method=post>
Host:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="phpftp_host" type="text" >
<p>
Login:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="phpftp_user" type="text" >
<p>
Password:&nbsp;&nbsp;
<input name="phpftp_passwd" type="password">
<p>
Directory:&nbsp;
<input name="phpftp_dir" type="text">
<p>
<input type="hidden" name="function" value="dir">
<input type="submit" value="connect">
</form>
<p>
<?
    phpftp_bottom();
}

/**********************************************************
$param:	$phpftp_host		要连接的ftp服务器名称
$param:	$phpftp_user		连接服务器所用的用户名
$param:	$phpftp_passwd		用户名所对应密码
function:	这个函数建立与服务器的连接,它并不返回TRUE/FALSE。
它返回ftp连接标志。它被phpftp_list()调用。
**********************************************************/
function phpftp_connect($phpftp_host, $phpftp_user, $phpftp_passwd ) {
	global $phpftp_host;
    $ftp = ftp_connect($phpftp_host);	//建立与ftp服务器的连接
    if ( $ftp ) {
        if ( ftp_login( $ftp, $phpftp_user, urldecode( $phpftp_passwd ) ) ) {
            return $ftp;	//以用户名登录
        }
    }
}

/**********************************************************
$param:	$phpftp_host		要连接的接点名
$param:	$phpftp_user		连接服务器所用的用户名
$param:	$phpftp_passwd		用户名所对应密码
$param:	$phpftp_dir			建立连接后所在的目录名
function:	这个函数在建立与服务器的连接后,列出目录$phpftp_dir
下的文件和目录(以.开头的文件不列出)
**********************************************************/

function phpftp_list( $phpftp_host,$phpftp_user, $phpftp_passwd, $phpftp_dir ) {
    phpftp_top();
?>
<!-- function phpftp_list -->
<?	
    $ftp = @phpftp_connect($phpftp_host, $phpftp_user, $phpftp_passwd );
    if ( ! $ftp  ) {
?>
<strong>FTP login failed!</strong>
<a href="ftpclient.php">Start over?</a>
<?
        phpftp_bottom();
    } else {
        if ( ! $phpftp_dir ) {
			//默认为登录用户的用户目录
            $phpftp_dir=ftp_pwd( $ftp );
        }
        if ( ! @ftp_chdir( $ftp, $phpftp_dir ) ) {
?>
<font color="#ff0000"><strong>Can't enter that directory!</strong></font><p><p>
<?
            $phpftp_dir=ftp_pwd( $ftp );
        }
        echo "<strong>Current directory:</strong> " . $phpftp_dir . "<br>\n";
        if ( $phpftp_dir == "/" ) {
            $phpftp_dir="";
        }
?>
<table border=0 cellspacing=20>
<?
        if ( $contents = ftp_nlist( $ftp, "." ) ) {
            $d_i=0;		//记录目录的个数
            $f_i=0;		//记录文件的个数
            sort($contents);
            for ( $i=0; $i < count( $contents ); $i++ ) {
                $file_size = ftp_size( $ftp, $contents[$i] );
                if ( $file_size == -1 ) {
					//-1表示为目录
                    $nlist_dirs[$d_i]=$contents[$i];	//包含该目录下所有子目录的数组
                    $d_i++;		//目录个数加1
                } else {
                    $nlist_files[$f_i]=$contents[$i];	//包含该目录下所有文件的数组
                    $nlist_filesize[$f_i]=$file_size;	//记录文件大小的数组
                    $f_i++;		//文件个数加1
                }
            }
?>
<tr><td>
<font face="courier"><strong>Directories</strong></font><br>
<form action="ftpclient.php" method=post>
<input type="hidden" name="function" value="cd">
<input type="hidden" name="phpftp_host" value="<? echo $phpftp_host; ?>">
<input type="hidden" name="phpftp_user" value="<? echo $phpftp_user; ?>">
<input type="hidden" name="phpftp_passwd" value="<? echo $phpftp_passwd; ?>">
<input type="hidden" name="phpftp_dir" value="<? echo $phpftp_dir; ?>">
<select name="select_directory" size="10" width="100">
<!--列出所有的目录-->
<?
            for ( $i=0; $i < count( $nlist_dirs ); $i++ ) {
                echo "<option value=\"" . $nlist_dirs[$i] . "\">"  . $nlist_dirs[$i] . "</option>\n";
            }
?>
</select><br>
<input type="submit" value="Enter Directory">
</form>
</td><td>
<font face="courier"><strong>Files</strong></font><br>
<form action="ftpclient.php" method=post>
<input type="hidden" name="function" value="get">
<input type="hidden" name="phpftp_host" value="<? echo $phpftp_host; ?>">
<input type="hidden" name="phpftp_user" value="<? echo $phpftp_user; ?>">
<input type="hidden" name="phpftp_passwd" value="<? echo $phpftp_passwd; ?>">
<input type="hidden" name="phpftp_dir" value="<? echo $phpftp_dir; ?>">
<!--列出所有的文件-->
<select name="select_file" size="10">
<?
            for ( $i=0; $i < count( $nlist_files ); $i++ ) {
                echo "<option value=\"" . $nlist_files[$i] . "\">"  .  $nlist_files[$i] ."  ($nlist_filesize[$i] bytes)". "</option>\n";
            }
?>
</select><br>
<input type="submit" value="Download File">
</form>
</td></tr>
<?
        } else {
?>
<p><font color="#ff0000"><strong>Directory empty or not readable</strong></font><p>
<?
        }
?>
</table>
<!--转向上一层目录-->
<p>
<form action="ftpclient.php" method=post>
<?
        $cdup=dirname( $phpftp_dir );
        if ( $cdup == "" ) {
            $cdup="/";
        }
?>
<input type="hidden" name="function" value="dir">
<input type="hidden" name="phpftp_host" value="<? echo $phpftp_host; ?>">
<input type="hidden" name="phpftp_user" value="<? echo $phpftp_user; ?>">
<input type="hidden" name="phpftp_passwd" value="<? echo $phpftp_passwd; ?>">
<input type="hidden" name="phpftp_dir" value="<? echo $cdup; ?>">
<input type="submit" value="Go up one directory">
</form>
<!--上载文件-->
<p>
<form enctype="multipart/form-data" action="ftpclient.php" method=post>
<input type="hidden" name="max_file_size" value="1000000">
<input type="hidden" name="phpftp_host" value="<? echo $phpftp_host; ?>">
<input type="hidden" name="phpftp_user" value="<? echo $phpftp_user; ?>">
<input type="hidden" name="phpftp_passwd" value="<? echo $phpftp_passwd; ?>">
<input type="hidden" name="phpftp_dir" value="<? echo $phpftp_dir; ?>">
<input type="hidden" name="function" value="put">
<input type="submit" value="Upload this:">
<input name="userfile" type="file">
</form>
<p>
<form action="ftpclient.php" method=post>
<input type="hidden" name="function" value="mkdir">
<input type="hidden" name="phpftp_host" value="<? echo $phpftp_host; ?>">
<input type="hidden" name="phpftp_user" value="<? echo $phpftp_user; ?>">
<input type="hidden" name="phpftp_passwd" value="<? echo $phpftp_passwd; ?>">
<input type="hidden" name="phpftp_dir" value="<? echo $phpftp_dir; ?>">
<input type="submit" value="Make subdirectory:">
<input name="new_dir" type="text">
<?
        ftp_quit( $ftp );
        phpftp_bottom();
    }
}

/**************************************************
$param:	$phpftp_user		连接服务器所用的用户名
$param:	$phpftp_passwd		用户名所对应密码
$param:	$phpftp_dir			登录后所在的目录名
$param:	$select_directory	选择要进入的目录名
	function:	这个函数进入所选的目录并列出这个目录下的内容
****************************************************/
function phpftp_cd( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir, $select_directory ) {
?>
<!-- function phpftp_cd -->
<?	
	//要进入的目录的路径
    $new_directory=$phpftp_dir . "/" . $select_directory;
    phpftp_list( $phpftp_host, $phpftp_user, $phpftp_passwd, $new_directory );
}

/*************************************************
$param:	$phpftp_user		连接服务器所用的用户名
$param:	$phpftp_passwd		用户名所对应密码
$param:	$phpftp_dir			登录后所在的目录名
$param:	$new_dir			要新建的目录名称
function:	在当前目录下新建一个名称为$new_dir的目录
**************************************************/
function phpftp_mkdir( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir, $new_dir ) {
?>
<!-- function phpftp_mkdir -->
<?
    if ( $phpftp_dir == "" ) {
        $phpftp_dir="/";
    }
    if ( ! $ftp = phpftp_connect($phpftp_host, $phpftp_user, $phpftp_passwd) ) {
        @ftp_quit( $ftp );
        phpftp_top();
?>
<font color="#ff0000"><strong>FTP login failed!</strong></font><p><p>
<a href="ftpclient.php">Start over?</a>
<?
        phpftp_bottom();
    } else {
        $dir_path = $phpftp_dir . "/" . $new_dir;
        @ftp_mkdir( $ftp, $dir_path );
        @ftp_quit( $ftp );
        phpftp_list( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir );
    }
};
    


/***********************************************
$param:	$phpftp_user		连接服务器所用的用户名
$param:	$phpftp_passwd		用户名所对应密码
$param:	$phpftp_dir			登录后所在的目录名
$param:	$select_file		所选择的文件名称
function:	下载指定的文件
************************************************/
function phpftp_get( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir, $select_file ) {
    $ftp = @phpftp_connect( $phpftp_host, $phpftp_user, $phpftp_passwd );
    if ( $phpftp_dir == "" ) {
        $phpftp_dir="/";
    }
    if ( ( ! $ftp ) || ( ! @ftp_chdir( $ftp, $phpftp_dir ) ) ) {
		//登录失败
        @ftp_quit( $ftp );
        phpftp_top();
?>
<font color="#ff0000"><strong>FTP login failed!</strong></font><p><p>
<a href="ftpclient.php">Start over?</a>
<?
        phpftp_bottom();
    } else {
		//下载指定的文件
        srand((double)microtime()*1000000);
        $randval = rand();
        $tmpfile="/tmp/" . $select_file . "." . $randval;
        if ( ! ftp_get( $ftp, $tmpfile, $select_file, FTP_BINARY ) ) {
            ftp_quit( $ftp );
            phpftp_top();
?>
<font color="#ff0000"><strong>FTP get failed!</strong></font><p><p>
<a href="ftpclient.php">Start over?</a>
<?
            phpftp_bottom();
        } else {
			//读取文件的内容
            ftp_quit( $ftp );
            header( "Content-Type: application/octet-stream" );
            header( "Content-Disposition: attachment; filename=" . $select_file );
            readfile( $tmpfile );
        }
        @unlink( $tmpfile );
    }
}

/********************************************
$param:	$phpftp_user		连接服务器所用的用户名
$param:	$phpftp_passwd		用户名所对应密码
$param:	$phpftp_dir			登录后所在的目录名
function:	上载指定的文件
***********************************************/
function phpftp_put( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir, $userfile, $userfile_name ) {
    srand((double)microtime()*1000000);
    $randval = rand();
    $tmpfile="/tmp/" . $userfile_name . "." . $randval;
    if ( ! @copy( $userfile, $tmpfile ) ) {
        phpftp_top();
?>
<font color="#ff0000"><strong>Upload failed!  Can't create temp file?</strong></font>
<p><p>
<a href="ftpclient.php">Start over?</a>
<?
        phpftp_bottom();
    } else {
		//登录失败
        if ( ! $ftp = @phpftp_connect($phpftp_host, $phpftp_user, $phpftp_passwd ) ) {
            unlink( $tmpfile );
            phpftp_top(); 
?>
<font color="#ff0000"><strong>FTP login failed!</strong></font><p><p>
<a href="ftpclient.php">Start over?</a>
<?
            phpftp_bottom();
        } else {
			//上载文件
            ftp_chdir( $ftp, $phpftp_dir );
            ftp_put( $ftp, $userfile_name, $tmpfile, FTP_BINARY );
            ftp_quit( $ftp );
            unlink( $tmpfile );
            phpftp_list( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir );
        }
    }
}


switch( $function ) {
    case "dir";
        phpftp_list($phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir );
        break;
    case "cd";
        phpftp_cd( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir, $select_directory );
        break;
    case "get";
        phpftp_get( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir, $select_file );
        break;
    case "put";
        phpftp_put( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir, $userfile, $userfile_name );
        break;
    case "mkdir";
        phpftp_mkdir( $phpftp_host, $phpftp_user, $phpftp_passwd, $phpftp_dir, $new_dir );
        break;
    case "";
        phpftp_login();
        break;
}
 
?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -