电脑安全

您当前的位置:主页 > 电脑安全 >

PHP的FTP学习(一)[转自奥索]-网络编程

来源:[db:来源]标题:   函数    编辑:电脑技术全能网 时间:2019-09-20 18:32

原标题:PHP的FTP学习(一)[转自奥索]-网络编程
   By Vikram VaswaniMelonfireNovember 07, 2000咱们是一群PHP的忠诚FANS,咱们因种种差别的起因应用它-WEB站点的开辟,绘图,数据库的连接等 -咱们发觉,它十分的友爱,强盛并且易于应用……你能够曾经看到PHP是怎么被用于创立GIF和JPEG图象,从数据库中静态的猎取信息等等,但这只是冰山的一角---最新版本的PHP领有着强盛的文件传输功效。在这篇教程里,我将向你展现FTP怎么经过HTTP和FTP连接来传输文件,同时也会有一些简略的顺序代码,跟我来吧!起首,你应当晓得PHP是经过HTTP和FTP连接来传输文件的。经过HTTP上传文件早在PHP3中就曾经呈现,当初,新的FTP函数曾经在新的PHP版本中呈现了!开端之前,你须要确信你的PHP支撑FTP,你能够经过以下代码查知:--------------------------------------------------------------------------------<?phpinfo();?>--------------------------------------------------------------------------------检讨输入成果,有一“Additional Modules”区,这里列示了你的PHP支撑的模块;假如你没发觉FTP模块,你最好从新装置PHP,并增加FTP支撑!先让咱们来看看一个典范的FTP义务是怎么实现的吧!--------------------------------------------------------------------------------$ ftp ftp.server.comConnected to ftp.server.com220 server.com FTP server ready.Name (server:john): john331 Password required for john.Password:230 User john logged in.Remote system type is UNIX.Using binary mode to transfer files.ftp> ls200 PORT command successful.150 Opening ASCII mode data connection for /bin/ls.drwxr-xr-x5 johnusers3072 Nov2 11:03 .drwxr-xr-x88 rootroot2048 Nov1 23:26 ..drwxr--r--2 johnusers1024 Oct5 13:26 bindrwx--x--x8 johnusers1024 Nov2 10:59 public_htmldrwxr--r--4 johnusers1024 Nov2 11:26 tmp-rw-r--r--1 johnusers2941465 Oct9 17:21 data.zip226 Transfer complete.ftp> bin200 Type set to I.ftp> get data.ziplocal: data.zip remote: data.zip200 PORT command successful.150 Opening BINARY mode data connection for data.zip(2941465 bytes).226 Transfer complete.ftp> bye221 Goodbye.--------------------------------------------------------------------------------你能够看到,过程显明被分为几段:连接(与FTP效劳器树立连接)、考证(断定用户能否有权利进入体系)、传输(这里包含列名目,上传或下载文件)、撤消连接。应用PHP来FTP的步调树立一个PHP的FTP连接必需遵照以下基础步调:翻开一个连接 - 收回认证信息 - 应用PHP函数把持名目和传输文件。以下详细完成:--------------------------------------------------------------------------------<?// 连接FTP效劳器$conn = ftp_connect("ftp.server.com");// 应用username和password登录ftp_login($conn, "john", "doe");// 猎取远端体系范例ftp_systype($conn);// 列示文件$filelist = ftp_nlist($conn, ".");// 下载文件ftp_get($conn, "data.zip", "data.zip", FTP_BINARY);// 封闭连接ftp_quit($conn);?>--------------------------------------------------------------------------------让咱们一步步的来:为了初结化一个FTP连接,PHP供给了ftp_connect()这个函数,它应用主机称号和端口作为参数。在下面的例子里,主机名字为“ftp.server.com”;假如端口没指定,PHP将会应用“21”作为缺省端口来树立连接。连接胜利后ftp_connect()传回一个handle句柄;这个handle将被当前应用的FTP函数应用。--------------------------------------------------------------------------------<?// connect to FTP server$conn = ftp_connect("ftp.server.com");?>--------------------------------------------------------------------------------一旦树立连接,应用ftp_login()发送一个用户称号和用户暗码。你能够看到,这个函数ftp_login()应用了ftp_connect()函数传来的handle,以断定用户名和暗码能被提交到准确的效劳器。--------------------------------------------------------------------------------<?// log in with username and passwordftp_login($conn, "john", "doe");?>--------------------------------------------------------------------------------这时,你就可能做你想做的事件了,详细鄙人一局部讲:做完你想做的过后,万万要记着应用ftp_quit()函数封闭你的FTP连接--------------------------------------------------------------------------------<?// close connectionftp_quit($conn);?>--------------------------------------------------------------------------------登录了FTP效劳器,PHP供给了一些函数,它们能猎取一些对于体系和文件以及名目的信息。ftp_pwd()假如你想晓得你以后地点的名目时,你就要用到这个函数了。--------------------------------------------------------------------------------<?// get current location$here = ftp_pwd($conn);?>--------------------------------------------------------------------------------万一你须要晓得效劳器端运转的是甚么体系呢?ftp_systype()恰好供给给你这方面的信息。--------------------------------------------------------------------------------<?// get system type$server_os = ftp_systype($conn);?>--------------------------------------------------------------------------------对于主动形式(PASV)的开关,PHP也供给了如许一个函数,它能翻开或封闭PASV(1表现开)--------------------------------------------------------------------------------<?// turn PASV onftp_pasv($conn, 1);?>--------------------------------------------------------------------------------当初,你曾经晓得你在“那里”和“谁”跟你在一同了吧,当初咱们开端在名目中走走--完成这一功效的是ftp_chdir()函数,它接收一个名目名作为参数。--------------------------------------------------------------------------------<?// change directory to "public_html"ftp_chdir($conn, "public_html");?>--------------------------------------------------------------------------------假如你想回到你方才地点的名目(父名目),ftp_cdup()能帮你完成你的欲望,这个函数能回到上一级名目。--------------------------------------------------------------------------------<?// go up one level in the directory treeftp_cdup($conn);?>--------------------------------------------------------------------------------你也可能树立或挪动一个名目,这要应用ftp_mkdir()和ftp_rmdir()函数;留神:ftp_mkdir()树立胜利的话,就会前往新树立的名目名。--------------------------------------------------------------------------------<?// make the directory "test"ftp_mkdir($conn, "test");// remove the directory "test"ftp_rmdir($conn, "test");?>--------------------------------------------------------------------------------树立一个FTP的名目平日是传输文件--- 那末就让咱们开端吧!先是上传文件,ftp_put()函数能很好的胜任这一职责,它须要你指定一个当地文件名,上传后的文件名以及传输的范例。比喻说:假如你想上传“abc.txt”这个文件,上传后定名为“xyz.txt”,下令应当是如许:--------------------------------------------------------------------------------<?// uploadftp_put($conn, "xyz.txt", "abc.txt", FTP_ASCII);?>--------------------------------------------------------------------------------下载文件:PHP所供给的函数是ftp_get(),它也须要一个效劳器上文件名,下载后的文件名,以及传输范例作为参数,比方:效劳器端文件为his.zip,你想下载至当地机,并定名为hers.zip,下令以下:--------------------------------------------------------------------------------<?// downloadftp_get($conn, "hers.zip", "his.zip", FTP_BINARY);?>--------------------------------------------------------------------------------PHP界说了两种形式作为传输形式 FTP_BINARY 和 FTP_ASCII ,这两种形式的应用请看上两例,至于其具体说明,本文也未几说了,详细请参看相干册本。我该怎么列示文件呢?(用DIR? :) )PHP供给两种方式:一种是简略列示文件名和名目,另一种就是具体的列示文件的巨细,权限,创建时光等信息。第一种应用ftp_nlist()函数,第二种用ftp_rawlist().两种函数都须要一个名目名做为参数,都前往名目列做为一个数组,数组的每一个元素相称于列表的一行。--------------------------------------------------------------------------------<?// obtain file listing$filelist = ftp_nlist($conn, ".");?>--------------------------------------------------------------------------------你必定想晓得文件的巨细吧!别急,这里有一个十分轻易的函数ftp_size(),它前往你所指定的文件的巨细,应用BITES作为单元。要指出的是,假如它前往的是 “-1”的话,象征着这是一个名目,在随后的例子中,你将会看到这一功效的利用。--------------------------------------------------------------------------------<?// obtain file size of file "data.zip"$filelist = ftp_size($conn, "data.zip");?>当初,咱们曾经打仗了PHP对于FTP的大批函数,但这仅仅只是函数,离咱们的目的还远远不敷,要表现出这些函数的真正力气,咱们应当树立一个顺序,这个顺序能以WEB方法上传,下载文件---这就是咱们将要做的!在咱们进入代码前,我想要告知各人的是,这个例子仅仅只是为了向各人说明PHP的种种FTP函数的应用,许多方面还不敷完美,比方说,过错剖析等,至于你想利用到你本人的顺序中,你应当停止一些修正!顺序包含以下几个文件:index.html - 登录文件actions.php - 顺序必须的FTP代码include.php - 顺序主界面,它表现文件列表和操纵按钮。让咱们从 "index.html"开端吧:--------------------------------------------------------------------------------<table border=0 align=center><form action="actions.php" method=post><input type=hidden name=action value=CWD><tr><td>Server</td><td><input type=text name=server></td></tr><tr><td>User</td><td><input type=text name=username></td></tr><tr><td>Password</td><td><input type=password name=password></td></tr><tr><td colspan=2 align=center><input type="submit" value="Beam Me Up, Scotty!"></td></tr></form></table>--------------------------------------------------------------------------------这是一个登录表单,有一个效劳器称号、用户名、暗码,输出框。输出的变量将会被存到$server, $username 和 $password 变量中,表单提交后,挪用actions.php,它将初始化FTP连接。留神谁人“hidden” 它传给action.php一个变量$action ,值为CWD。这是action.php文件的源码:--------------------------------------------------------------------------------<html><head><basefont face=Arial></head><body><!-- the include.php interface will be inserted into this page --><?//检讨表单传来的数据,不全则报错,要想顺序完美的话,这里应当有更全的输出检测功效if (!$server !$username !$password){echo "提交数据不全!";}else{// keep reading}?></body></html>--------------------------------------------------------------------------------接上去是变量 "actions". 顺序同意以下的action:"action=CWD"转变任务名目"action=Delete"删除指定文件"action=Download"下载指定文件"action=Upload"上传指定文件假如你认真检讨文件include.php,在外面包含一个HTML界面,你将会看到,它包含很多表单,每一个指向一个特定的功效,每一个表单包括一个field(平日暗藏) ,当表单提交,响应的功效将被履行。比方:按下“删除”,"action=Delete"就被传递给"actions.php"为了操纵这四个功效,actions.php中代码以下:--------------------------------------------------------------------------------<?// action: 转变名目if ($action == "CWD"){// 详细代码}// action: 删除文件else if ($action == "Delete"){// 详细代码}// action: 下载文件else if ($action == "Download"){// 详细代码}// action: 上传文件else if ($action == "Upload"){// 详细代码}?>--------------------------------------------------------------------------------以上的详细代码将会完成指定的功效,并加入轮回,它们都包括以下步调:--------------------------------------------------------------------------------经过定制的函数连接并登录FTP效劳器connect();转向恰当的名目履行抉择的功效革新列表,以观察转变的成果经过include("include.php"),表现文件列表和操纵按钮封闭连接--------------------------------------------------------------------------------留神:以下功效支撑多文件操纵- 即 "action=Delete" 和 "action=Download" 它们应用FOR轮回来完成。变量$cdir 和 $here 将在每一阶段及时更新。