PHP 中的 FTP 管理脚本。





4.00/5 (3投票s)
连接服务器到FTP服务器的PHP应用程序。
介绍
大家好,我想介绍一下用于连接您的服务器到FTP服务器的PHP函数。我使用PHP函数创建了一个应用程序来实现这个功能。我之前已在一些网站上发布过此应用程序。
优点
我想说明它的优势,因为当像“FILEZILLA”这样高级的应用程序可用时,您可能会想这个PHP脚本有什么用。
它有其自身的用途。
- 它允许您将服务器连接到FTP服务器。
- 您不希望中间电脑从FTP服务器上传文件到您的服务器。
背景
当我想将文件上传到我的服务器时,产生了使用PHP创建FTP客户端的想法。将文件下载到我的电脑然后再上传到我的服务器并不是一个好方法。
由此产生了创建FTP客户端以帮助连接服务器到FTP服务器的想法。
使用代码
让我们看看如何在PHP中实现此应用程序。
首先,我需要一个存储介质来存储FTP服务器的主机、用户名和密码。使用……
$user = $_GET['usrname'];
$passwd = $_GET['passwrd'];
$host = $_GET['host'];
我想将变量的值存储在一个介质中。所以我选择了会话cookie来存储变量的值以便以后使用。现在的代码如下所示:
$user = $_COOKIE['ftpuser'];
$passwd = !$_COOKIE['ftppassword']?"":$_COOKIE['ftppassword'];
$host = $_COOKIE['host'];
所以当用户填写表单并提交时,我会这样存储表单的值:
if(isset($_GET['host']) && isset($_GET['usrname']) && isset($_GET['passwrd']))
{
global $user, $passwd, $host;
setcookie("ftpuser", $_GET['usrname']);
setcookie("ftppassword", $_GET['passwrd']);
setcookie("host", $_GET['host']);
}
现在让我们检查一下PHP的FTP函数,它将有助于连接FTP服务器。要连接FTP服务器,请使用:$connect = ftp_connect($host);
它将尝试连接到FTP服务器。函数ftp_connect()
将返回一个布尔值给变量$connect
。
如果连接成功,下一步是登录到FTP服务器。要登录到FTP服务器,请使用函数ftp_login()
所以代码将变成:$login = ftp_login($connect, $user, $passwd);
函数ftp_login()
将返回一个布尔值给变量$login
接下来是读取FTP服务器上的文件。有两个函数可以列出FTP服务器上的文件:ftp_nlist()
和ftp_rawlist()
在这里,ftp_rawlist()
是更高级的目录列表类型,因为它将返回FTP服务器上文件的几乎所有详细信息。
function dirDetails($directory=".")
{
global $connect;
if(is_array($directs=ftp_rawlist($connect, $directory)))
{
$prop = array();
$nl=count($directs);
foreach($directs as $dirx)
{
$chunks = preg_split("/[\s]+/", $dirx, 9);
list($prop['perm'], $prop['num'], $prop['user'], $prop['group'], $prop['size'], $prop['mon'], $prop['day'], $prop['time']) = $chunks;
$prop['type']=$chunks[0]{0}==='d'?'Directory':'File';
$prop['name']=$chunks[8];
array_splice($chunks, 0, 8);
$props[implode(" ", $chunks)]=$prop;
}
return $props;
}
}
函数dirDetails()
将在我们使用路径作为参数(默认情况下为当前工作目录“.”)调用该函数时读取目录中的文件。
内部函数将根据权限、用户、组、大小(以位为单位)、上次修改日期(月、日、时间)、文件类型和文件名
分割ftp_rawlist()
的输出。
为了显示FTP服务器上文件和目录的详细信息,使用了下面的函数。
$property = dirDetails($fpath);
foreach($property as $prop)
{
global $fpath;
$modified = date("F d Y",ftp_mdtm($connect, $prop['name']));
if($prop['type']=='Directory')
{
print "[ ".$prop["name"]." ]".$prop['type']."".filesizex($prop['size'])."$modified".$prop['perm']."".$prop['user']."".$prop['group']."Rename | Delete";
}
else
{
print "".$prop['name']."".$prop['type']."".filesizex($prop['size'])."$modified".$prop['perm']."".$prop['user']."".$prop['group']."Download | Rename | Delete";
}
}
要从FTP服务器下载文件,请使用$down = ftp_get($resource, $fname, $fname, FTP_ASCII);
这里$resource
是连接流,第一个$fname
表示下载文件的名称,第二个$fname
表示远程文件,第三个参数FTP_ASCII
表示下载的resumepos。
function download($resource, $fname)
{
$down = ftp_get($resource, $fname, $fname, FTP_ASCII);
if($down)
{
success("The file ".$fname." downloaded sucessfully");
}
else
{
failed("The file ".$fname." failed to download");
}
}
以上代码片段是我使用的确切函数。要从FTP服务器删除文件,您可以使用函数ftp_delete($connect, $file);
function deleteFiled($file, $dire)
{
global $connect;
ftp_chdir($connect, $dire);
$del = ftp_delete($connect, $file);
if($del)
{
success("The file $file deleted sucessfully");
}
else {
failed("The file $file cannot delete");
}
}
以上代码片段是我用来删除文件的。
要删除目录,您可以简单地调用函数ftp_rmdir($connect, $file);
但是如果目录不为空,则执行将失败。因此,在删除目录之前,您应该删除目标目录中的所有文件和目录。您可以使用递归函数来实现:
function deleteDir($file, $cdir)
{
global $connect, $fpath;
$arraay = dirDetails("$fpath/$file");
ftp_rmdir($connect, $file);
foreach ($arraay as $key)
{
if($key['type']!='Directory')
{
deleteFiledd($fpath."/".$file."/".$key['name']);
}
else
{
deleteDir($fpath."/".$file."/".$key['name']);
}
}
if(ftp_rmdir($connect, $file))
{
success("The directory $file has deleted succssfully");
}
else
{
failed("The directory $file cannot delete");
}
}
如果将目录删除设置为用户,则函数deleteDir()
将成功删除目录。
要将文件从服务器上传到FTP服务器,PHP函数ftp_put($connect, $file, $file, FTP_ASCII);
将有所帮助。第一个$file
表示您要给定的远程文件的名称,第二个$file
表示服务器上文件的当前名称。
我在应用程序中使用的确切函数是:
function uploadf()
{
$file=$_GET['upload'];
global $connect, $host;
$uploadd = ftp_put($connect, $file, $file, FTP_ASCII);
if($uploadd)
{
success("Successfully uploaded file $file to FTP Server $host");
}
else
{
failed("Failed to upload file $file to FTP Server $host");
}
}
现在我们已经上传、下载和删除了服务器上的文件。现在我们要维护服务器上的文件。我想展示如何重命名服务器上的文件,重命名文件的PHP函数是ftp_rename($resource, $fname, $nfname);
$fname
表示文件的当前名称,$nfname
表示文件的新的名称。我使用的确切函数是:
function renamef($resource, $fname, $nfname)
{
$ren = ftp_rename($resource, $fname, $nfname);
if($ren)
{
success("The file ".$fname." renamed sucessfully");
}
else
{
failed("The file ".$fname." failed to rename");
}
}
接下来是更改FTP服务器上文件的权限。更改权限的PHP函数是ftp_chmod($connect, $mode, $file);
您可以像这样使用函数ftp_chmod($connect, 0777, "ajithkp.jpg");
将文件“ajithkp.jpg”的权限更改为模式777。
我使用的确切代码是:
function changeperm()
{
global $connect, $fpath;
ftp_chdir($connect, $fpath);
$mode = $_GET['new_perm'];
$file = $_GET['fname'];
$mode = octdec(str_pad($mode, 4, '0', STR_PAD_LEFT));
if(ftp_chmod($connect, $mode, $file) != FALSE)
{
success("The file $file permission changed successfully");
}
else
{
failed("The file $file permission cannot changed");
}
}
我在此应用程序中使用的其他函数如下所示。为了将位大小转换为KB、MB和GB,我使用了下面的函数:
function filesizex($size)
{
if ($size>=1073741824)$size = round(($size/1073741824) ,2)." GB";
elseif ($size>=1048576)$size = round(($size/1048576),2)." MB";
elseif ($size>=1024)$size = round(($size/1024),2)." KB";
else $size .= " B";
return $size;
}
要注销当前会话,您需要删除存储在浏览器中的会话cookie。要删除cookie,我使用了PHP函数setcookie("ftpuser", "");
我使用的确切函数是:
function logout()
{
setcookie("ftpuser", "");
setcookie("ftppassword", "");
setcookie("host", "");
}
更改当前目录:ftp_chdir($connect, $fpath);
获取FTP系统类型:ftp_systype($connect);
获取当前超时:ftp_get_option($connect, FTP_TIMEOUT_SEC);
我希望您喜欢这篇文章和这个应用程序