PHP的FTP学习Word文档格式.docx
《PHP的FTP学习Word文档格式.docx》由会员分享,可在线阅读,更多相关《PHP的FTP学习Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
ftp>
ls
200PORTcommandsuccessful.
150OpeningASCIImodedataconnectionfor/bin/ls.
drwxr-xr-x5johnusers3072Nov211:
03.
drwxr-xr-x88rootroot2048Nov123:
26..
drwxr--r--2johnusers1024Oct513:
26bin
drwx--x--x8johnusers1024Nov210:
59public_html
drwxr--r--4johnusers1024Nov211:
26tmp
-rw-r--r--1johnusers2941465Oct917:
21data.zip
226Transfercomplete.
bin
200TypesettoI.
getdata.zip
local:
data.zipremote:
data.zip
150OpeningBINARYmodedataconnectionfordata.zip(2941465bytes).
bye
221Goodbye.
你可以看到,进程明显被分为几段:
联接(与FTP服务器建立联接)、验证(确定用户是否有权力进入系统)、传输(这里包括列目录,上传或下载文件)、取消联接。
使用PHP来FTP的步骤
建立一个PHP的FTP联接必须遵守以下基本步骤:
打开一个联接-发出认证信息-使用PHP函数操纵目录和传输文件。
以下具体实现:
//联接FTP服务器
$conn=ftp_connect("
"
);
//使用username和password登录
ftp_login($conn,"
john"
"
doe"
//获取远端系统类型
ftp_systype($conn);
//列示文件
$filelist=ftp_nlist($conn,"
."
//下载文件
ftp_get($conn,"
data.zip"
FTP_BINARY);
//关闭联接
ftp_quit($conn);
让我们一步步的来:
为了初结化一个FTP联接,PHP提供了ftp_connect()这个函数,它使用主机名称和端口作为参数。
在上面的例子里,主机名字为“”;
如果端口没指定,PHP将会使用“21”作为缺省端口来建立联接。
联接成功后ftp_connect()传回一个handle句柄;
这个handle将被以后使用的FTP函数使用。
//connecttoFTPserver
一旦建立联接,使用ftp_login()发送一个用户名称和用户密码。
你可以看到,这个函数ftp_login()使用了ftp_connect()函数传来的handle,以确定用户名和密码能被提交到正确的服务器。
//loginwithusernameandpassword
这时,你就能够做你想做的事情了,具体在下一部分讲:
做完你想做的事后,千万要记住使用ftp_quit()函数关闭你的FTP联接
//closeconnection
登录了FTP服务器,PHP提供了一些函数,它们能获取一些关于系统和文件以及目录的信息。
ftp_pwd()
如果你想知道你当前所在的目录时,你就要用到这个函数了。
//getcurrentlocation
$here=ftp_pwd($conn);
万一你需要知道服务器端运行的是什么系统呢?
ftp_systype()正好提供给你这方面的信息。
//getsystemtype
$server_os=ftp_systype($conn);
关于被动模式(PASV)的开关,PHP也提供了这样一个函数,它能打开或关闭PASV(1表示开)
//turnPASVon
ftp_pasv($conn,1);
现在,你已经知道你在“哪里”和“谁”跟你在一起了吧,现在我们开始在目录中逛逛--实现这一功能的是ftp_chdir()函数,它接受一个目录名作为参数。
//changedirectoryto"
public_html"
ftp_chdir($conn,"
如果你想回到你刚才所在的目录(父目录),ftp_cdup()能帮你实现你的愿望,这个函数能回到上一级目录。
//gouponelevelinthedirectorytree
ftp_cdup($conn);
你也能够建立或移动一个目录,这要使用ftp_mkdir()和ftp_rmdir()函数;
注意:
ftp_mkdir()建立成功的话,就会返回新建立的目录名。
//makethedirectory"
test"
ftp_mkdir($conn,"
//removethedirectory"
ftp_rmdir($conn,"
建立一个FTP的目录通常是传输文件---那么就让我们开始吧!
先是上传文件,ftp_put()函数能很好的胜任这一职责,它需要你指定一个本地文件名,上传后的文件名以及传输的类型。
比方说:
如果你想上传“abc.txt”这个文件,上传后命名为“xyz.txt”,命令应该是这样:
//upload
ftp_put($conn,"
xyz.txt"
abc.txt"
FTP_ASCII);
下载文件:
PHP所提供的函数是ftp_get(),它也需要一个服务器上文件名,下载后的文件名,以及传输类型作为参数,例如:
服务器端文件为his.zip,你想下载至本地机,并命名为hers.zip,命令如下:
//download
hers.zip"
his.zip"
PHP定义了两种模式作为传输模式FTP_BINARY和FTP_ASCII,这两种模式的使用请看上两例,至于其详细解释,本文也不多说了,具体请参看相关书籍。
我该怎样列示文件呢?
(用DIR?
:
))
PHP提供两种方法:
一种是简单列示文件名和目录,另一种就是详细的列示文件的大小,权限,创立时间等信息。
第一种使用ftp_nlist()函数,第二种用ftp_rawlist().两种函数都需要一个目录名做为参数,都返回目录列做为一个数组,数组的每一个元素相当于列表的一行。
//obtainfilelisting
你一定想知道文件的大小吧!
别急,这里有一个非常容易的函数ftp_size(),它返回你所指定的文件的大小,使用BITES作为单位。
要指出的是,如果它返回的是“-1”的话,意味着这是一个目录,在随后的例子中,你将会看到这一功能的应用。
//obtainfilesizeoffile"
$filelist=ftp_size($conn,"
现在,我们已经接触了PHP关于FTP的大量函数,但这仅仅只是函数,离我们的目标还远远不够,要显示出这些函数的真正力量,我们应该建立一个程序,这个程序能以WEB方式上传,下载文件---这就是我们将要做的!
在我们进入代码前,我想要告诉大家的是,这个例子仅仅只是为了向大家解释PHP的各种FTP函数的使用,很多方面还不够完善,比如说,错误分析等,至于你想应用到你自己的程序中,你应该进行一些修改!
程序包括以下几个文件:
index.html-登录文件
actions.php-程序必需的FTP代码
include.php-程序主界面,它显示文件列表和控制按钮。
让我们从"
index.html"
开始吧:
tableborder=0align=center>
formaction="
actions.php"
method=post>
inputtype=hiddenname=actionvalue=CWD>
tr>
td>
Server
/td>
inputtype=textname=server>
/tr>
User
inputtype=textname=username>
Password
inputtype=passwordname=password>
tdcolspan=2align=center>
inputtype="
submit"
value="
BeamMeUp,Scotty!
/form>
/table>
这是一个登录表单,有一个服务器名称、用户名、密码,输入框。
输入的变量将会被存到$server,$username和$password变量中,表单提交后,调用actions.php,它将初始化FTP联接。
注意那个“hidden”它传给action.php一个变量$action,值为CWD。
这是action.php文件的源码:
html>
head>
basefontface=Arial>
/head>
body>
!
--theinclude.phpinterfacewillbeinsertedintothispage-->
//检查表单传来的数据,不全则报错,要想程序完善的话,这里应该有更全的输入检测功能
if(!
$server||!
$username||!
$password)
{
echo"
提交数据不全!
;
}
else
//keepreading
/body>
/html>
接下来是变量"
actions"
.程序允许以下的action:
action=CWD"
改变工作目录
action=Delete"
删除指定文件
action=Download"
下载指定文件
action=Upload"
上传指定文件
如果你仔细检查文件include.php,在里面包括一个HTML界面,你将会看到,它包括许多表单,每一个指向一个特定的功能,每一个表单包含一个field(通常隐藏),当表单提交,相应的功能将被执行。
例如:
按下“删除”,"
就被传送给"
为了操作这四个功能,actions.php中代码如下:
//action:
改变目录
if($action=="
CWD"
)
//具体代码
删除文件
elseif($action=="
Delete"
下载文件
Download"
上传文件
Upload"
以上的具体代码将会实现指定的功能,并退出循环,它们都包含以下步骤:
通过定制的函数联接并登录FTP服务器
connect();
转向适当的目录
执行选择的功能
刷新列表,以察看改变的结果
通过include("
include.php"
),显示文件列表和控制按钮
关闭联接
注意:
以下功能支持多文件操作-即"
和"
它们使用FOR循环来实现。
变量$cdir和$here将在每一阶段实时更新。
现在终于到了我们的第三个文件,include.php它为程序建立起一个用户界面。
包含三个表单,一些PHP代码获取当前的目录列表并将它们存入三个变量
$files(包括当前目录下的文件),
$file_sizes(相应的文件大小),
and$dirs(包含子目录名)
第一个表单使用$dirs产生一个下拉式目录列表,对应于“action=CWD”。
第二个表单使用$files$file_sizes创建一个可用的文件列表,每一个文件使用一个checkbox。
这个表单的action对应于"
and"
第三个表单用来上传一个文件到FTP站点,如下:
formenctype="
multipart/form-data"
action=actions.php4method=post>
...
inputtype=filename=upfile>
当PHP以这种