By Vikram Vaswani
Melonfire
November 07, 2000
我們是一群PHP的忠實(shí)FANS,我們因各種不同的原因使用它-WEB站點(diǎn)的開(kāi)發(fā),畫(huà)圖,數(shù)據(jù)庫(kù)的聯(lián)接等 -我們發(fā)現(xiàn),它非常的友好,強(qiáng)大而且易于使用 " /> 日日噜噜夜夜躁躁狠狠 ,久久精品国产免费中文,欧美成人免费tv在线播放

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PHP的FTP學(xué)習(xí)(一)[轉(zhuǎn)自?shī)W索]


By Vikram Vaswani
Melonfire
November 07, 2000
   我們是一群php的忠實(shí)FANS,我們因各種不同的原因使用它-WEB站點(diǎn)的開(kāi)發(fā),畫(huà)圖,數(shù)據(jù)庫(kù)的聯(lián)接等 -我們發(fā)現(xiàn),它非常的友好,強(qiáng)大而且易于使用……
你可能已經(jīng)看到php是怎樣被用于創(chuàng)建GIF和JPEG圖像,從數(shù)據(jù)庫(kù)中動(dòng)態(tài)的獲取信息等等,但這只是冰山的一角---最新版本的php擁有著強(qiáng)大的文件傳輸功能。
在這篇教程里,我將向你展示FTP怎樣通過(guò)HTTP和FTP聯(lián)接來(lái)傳輸文件,同時(shí)也會(huì)有一些簡(jiǎn)單的程序代碼,跟我來(lái)吧!

首先,你應(yīng)該知道php是通過(guò)HTTP和FTP聯(lián)接來(lái)傳輸文件的。通過(guò)HTTP上傳文件早在php3中就已經(jīng)出現(xiàn),現(xiàn)在,新的FTP函數(shù)已經(jīng)在新的php版本中出現(xiàn)了!
開(kāi)始之前,你需要確信你的php支持FTP,你可以通過(guò)以下代碼查知:

--------------------------------------------------------------------------------
<?

phpinfo();

?>
--------------------------------------------------------------------------------
檢查輸出結(jié)果,有一“Additional Modules”區(qū),這里列示了你的php支持的模塊;如果你沒(méi)發(fā)現(xiàn)FTP模塊,你最好重新安裝php,并添加FTP支持!

先讓我們來(lái)看看一個(gè)典型的FTP任務(wù)是怎樣完成的吧!
--------------------------------------------------------------------------------
$ ftp ftp.server.com
Connected to ftp.server.com
220 server.com FTP server ready.
Name (server:john): john
331 Password required for john.
Password:
230 User john logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
drwxr-xr-x  5 john   users        3072 Nov  2 11:03 .
drwxr-xr-x  88 root     root         2048 Nov  1 23:26 ..
drwxr--r--   2 john   users        1024 Oct  5 13:26 bin
drwx--x--x   8 john   users        1024 Nov  2 10:59 public_html
drwxr--r--   4 john   users        1024 Nov  2 11:26 tmp
-rw-r--r--   1 john   users     2941465 Oct  9 17:21 data.zip
226 Transfer complete.
ftp> bin
200 Type set to I.
ftp> get data.zip
local: data.zip remote: data.zip
200 PORT command successful.
150 Opening BINARY mode data connection for data.zip(2941465 bytes).
226 Transfer complete.
ftp> bye
221 Goodbye.
--------------------------------------------------------------------------------
你可以看到,進(jìn)程明顯被分為幾段:聯(lián)接(與FTP服務(wù)器建立聯(lián)接)、驗(yàn)證(確定用戶是否有權(quán)力進(jìn)入系統(tǒng))、傳輸(這里包括列目錄,上傳或下載文件)、取消聯(lián)接。

使用php來(lái)FTP的步驟
建立一個(gè)php的FTP聯(lián)接必須遵守以下基本步驟:打開(kāi)一個(gè)聯(lián)接 - 發(fā)出認(rèn)證信息 - 使用php函數(shù)操縱目錄和傳輸文件。
以下具體實(shí)現(xiàn):
--------------------------------------------------------------------------------
<?

// 聯(lián)接FTP服務(wù)器
$conn = ftp_connect("ftp.server.com");

// 使用username和password登錄
ftp_login($conn, "john", "doe");

// 獲取遠(yuǎn)端系統(tǒng)類(lèi)型
ftp_systype($conn);

// 列示文件
$filelist = ftp_nlist($conn, ".");

// 下載文件
ftp_get($conn, "data.zip", "data.zip", FTP_BINARY);

// 關(guān)閉聯(lián)接
ftp_quit($conn);

?>
--------------------------------------------------------------------------------
讓我們一步步的來(lái):
為了初結(jié)化一個(gè)FTP聯(lián)接,php提供了ftp_connect()這個(gè)函數(shù),它使用主機(jī)名稱(chēng)和端口作為參數(shù)。在上面的例子里,主機(jī)名字為“ftp.server.com”;如果端口沒(méi)指定,php將會(huì)使用“21”作為缺省端口來(lái)建立聯(lián)接。
聯(lián)接成功后ftp_connect()傳回一個(gè)handle句柄;這個(gè)handle將被以后使用的FTP函數(shù)使用。
--------------------------------------------------------------------------------
<?

// connect to FTP server
$conn = ftp_connect("ftp.server.com");

?>
--------------------------------------------------------------------------------
一旦建立聯(lián)接,使用ftp_login()發(fā)送一個(gè)用戶名稱(chēng)和用戶密碼。你可以看到,這個(gè)函數(shù)ftp_login()使用了ftp_connect()函數(shù)傳來(lái)的handle,以確定用戶名和密碼能被提交到正確的服務(wù)器
--------------------------------------------------------------------------------
<?

// log in with username and password
ftp_login($conn, "john", "doe");

?>
--------------------------------------------------------------------------------
這時(shí),你就能夠做你想做的事情了,具體在下一部分講:

做完你想做的事后,千萬(wàn)要記住使用ftp_quit()函數(shù)關(guān)閉你的FTP聯(lián)接

--------------------------------------------------------------------------------
<?

// close connection
ftp_quit($conn);

?>
--------------------------------------------------------------------------------
登錄了FTP服務(wù)器php提供了一些函數(shù),它們能獲取一些關(guān)于系統(tǒng)和文件以及目錄的信息。

ftp_pwd()
如果你想知道你當(dāng)前所在的目錄時(shí),你就要用到這個(gè)函數(shù)了。
--------------------------------------------------------------------------------
<?

// get current location
$here = ftp_pwd($conn);

?>
--------------------------------------------------------------------------------
萬(wàn)一你需要知道服務(wù)器端運(yùn)行的是什么系統(tǒng)呢?
ftp_systype()正好提供給你這方面的信息。
--------------------------------------------------------------------------------
<?

// get system type
$server_os = ftp_systype($conn);

?>
--------------------------------------------------------------------------------
關(guān)于被動(dòng)模式(PASV)的開(kāi)關(guān),php也提供了這樣一個(gè)函數(shù),它能打開(kāi)或關(guān)閉PASV(1表示開(kāi))
--------------------------------------------------------------------------------
<?

// turn PASV on
ftp_pasv($conn, 1);

?>
--------------------------------------------------------------------------------

現(xiàn)在,你已經(jīng)知道你在“哪里”和“誰(shuí)”跟你在一起了吧,現(xiàn)在我們開(kāi)始在目錄中逛逛--實(shí)現(xiàn)這一功能的是ftp_chdir()函數(shù),它接受一個(gè)目錄名作為參數(shù)。
--------------------------------------------------------------------------------
<?

// change directory to "public_html"
ftp_chdir($conn, "public_html");

?>
--------------------------------------------------------------------------------
如果你想回到你剛才所在的目錄(父目錄),ftp_cdup()能幫你實(shí)現(xiàn)你的愿望,這個(gè)函數(shù)能回到上一級(jí)目錄。
--------------------------------------------------------------------------------
<?

// go up one level in the directory tree
ftp_cdup($conn);

?>
--------------------------------------------------------------------------------
你也能夠建立或移動(dòng)一個(gè)目錄,這要使用ftp_mkdir()和ftp_rmdir()函數(shù);注意:ftp_mkdir()建立成功的話,就會(huì)返回新建立的目錄名。
--------------------------------------------------------------------------------
<?

// make the directory "test"
ftp_mkdir($conn, "test");

// remove the directory "test"
ftp_rmdir($conn, "test");

?>
--------------------------------------------------------------------------------
建立一個(gè)FTP的目錄通常是傳輸文件--- 那么就讓我們開(kāi)始吧!

先是上傳文件,ftp_put()函數(shù)能很好的勝任這一職責(zé),它需要你指定一個(gè)本地文件名,上傳后的文件名以及傳輸?shù)念?lèi)型。比方說(shuō):如果你想上傳“abc.txt”這個(gè)文件,上傳后命名為“xyz.txt”,命令應(yīng)該是這樣:
--------------------------------------------------------------------------------
<?

// upload
ftp_put($conn, "xyz.txt", "abc.txt", FTP_ASCII);

?>
--------------------------------------------------------------------------------
下載文件:
php所提供的函數(shù)是ftp_get(),它也需要一個(gè)服務(wù)器上文件名,下載后的文件名,以及傳輸類(lèi)型作為參數(shù),例如:服務(wù)器端文件為his.zip,你想下載至本地機(jī),并命名為hers.zip,命令如下:
--------------------------------------------------------------------------------
<?

// download
ftp_get($conn, "hers.zip", "his.zip", FTP_BINARY);

?>
--------------------------------------------------------------------------------
php定義了兩種模式作為傳輸模式 FTP_BINARY 和 FTP_ASCII ,這兩種模式的使用請(qǐng)看上兩例,至于其詳細(xì)解釋?zhuān)疚囊膊欢嗾f(shuō)了,具體請(qǐng)參看相關(guān)書(shū)籍。




我該怎樣列示文件呢?(用DIR? :) )
php提供兩種方法:一種是簡(jiǎn)單列示文件名和目錄,另一種就是詳細(xì)的列示文件的大小,權(quán)限,創(chuàng)立時(shí)間等信息。
第一種使用ftp_nlist()函數(shù),第二種用ftp_rawlist().兩種函數(shù)都需要一個(gè)目錄名做為參數(shù),都返回目錄列做為一個(gè)數(shù)組,數(shù)組的每一個(gè)元素相當(dāng)于列表的一行。
--------------------------------------------------------------------------------
<?

// obtain file listing
$filelist = ftp_nlist($conn, ".");

?>
--------------------------------------------------------------------------------
你一定想知道文件的大小吧!別急,這里有一個(gè)非常容易的函數(shù)ftp_size(),它返回你所指定的文件的大小,使用BITES作為單位。要指出的是,如果它返回的是 “-1”的話,意味著這是一個(gè)目錄,在隨后的例子中,你將會(huì)看到這一功能的應(yīng)用
--------------------------------------------------------------------------------
<?

// obtain file size of file "data.zip"
$filelist = ftp_size($conn, "data.zip");

?>

現(xiàn)在,我們已經(jīng)接觸了php關(guān)于FTP的大量函數(shù),但這僅僅只是函數(shù),離我們的目標(biāo)還遠(yuǎn)遠(yuǎn)不夠,要顯示出這些函數(shù)的真正力量,我們應(yīng)該建立一個(gè)程序,這個(gè)程序能以WEB方式上傳,下載文件---這就是我們將要做的!

在我們進(jìn)入代碼前,我想要告訴大家的是,這個(gè)例子僅僅只是為了向大家解釋php的各種FTP函數(shù)的使用,很多方面還不夠完善,比如說(shuō),錯(cuò)誤分析等,至于你想應(yīng)用到你自己的程序中,你應(yīng)該進(jìn)行一些修改!

程序包括以下幾個(gè)文件:
index.html - 登錄文件

actions.php - 程序必需的FTP代碼

include.php - 程序主界面,它顯示文件列表和控制按鈕。

讓我們從 "index.html"開(kāi)始吧:
--------------------------------------------------------------------------------
<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>
--------------------------------------------------------------------------------
這是一個(gè)登錄表單,有一個(gè)服務(wù)器名稱(chēng)、用戶名、密碼,輸入框。輸入的變量將會(huì)被存到$server, $username 和 $password 變量中,表單提交后,調(diào)用actions.php,它將初始化FTP聯(lián)接。

注意那個(gè)“hidden” 它傳給action.php一個(gè)變量$action ,值為CWD。


這是action.php文件的源碼:
--------------------------------------------------------------------------------
<html>
<head>
<basefont face=Arial>
</head>
<body>

<!-- the include.php interface will be inserted into this page -->

<?

//檢查表單傳來(lái)的數(shù)據(jù),不全則報(bào)錯(cuò),要想程序完善的話,這里應(yīng)該有更全的輸入檢測(cè)功能
if (!$server
!$username
!$password)
{
echo "提交數(shù)據(jù)不全!";
}
else
{
// keep reading
}

?>

</body>
</html>
--------------------------------------------------------------------------------


接下來(lái)是變量 "actions". 程序允許以下的action:

"action=CWD"

改變工作目錄

"action=Delete"

刪除指定文件

"action=Download"

下載指定文件

"action=Upload"

上傳指定文件

如果你仔細(xì)檢查文件include.php,在里面包括一個(gè)HTML界面,你將會(huì)看到,它包括許多表單,每一個(gè)指向一個(gè)特定的功能,每一個(gè)表單包含一個(gè)field(通常隱藏) ,當(dāng)表單提交,相應(yīng)的功能將被執(zhí)行。

例如:按下“刪除”,"action=Delete"就被傳送給"actions.php"

為了操作這四個(gè)功能,actions.php中代碼如下:
--------------------------------------------------------------------------------
<?
// action: 改變目錄
if ($action == "CWD")
{
// 具體代碼
}

// action: 刪除文件
else if ($action == "Delete")
{
// 具體代碼
}
// action: 下載文件
else if ($action == "Download")
{
// 具體代碼
}
// action: 上傳文件
else if ($action == "Upload")
{
// 具體代碼
}

?>
--------------------------------------------------------------------------------
以上的具體代碼將會(huì)實(shí)現(xiàn)指定的功能,并退出循環(huán),它們都包含以下步驟:

--------------------------------------------------------------------------------
通過(guò)定制的函數(shù)聯(lián)接并登錄FTP服務(wù)器
connect();

轉(zhuǎn)向適當(dāng)?shù)哪夸?br>
執(zhí)行選擇的功能

刷新列表,以察看改變的結(jié)果

通過(guò)include("include.php"),顯示文件列表和控制按鈕

關(guān)閉聯(lián)接
--------------------------------------------------------------------------------
注意:
以下功能支持多文件操作- 即 "action=Delete" 和 "action=Download" 它們使用FOR循環(huán)來(lái)實(shí)現(xiàn)。
變量$cdir 和 $here 將在每一階段實(shí)時(shí)更新。

php技術(shù)PHP的FTP學(xué)習(xí)(一)[轉(zhuǎn)自?shī)W索],轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产视频999 | 亚洲国产精品日韩高清秒播 | 成年午夜视频免费观看视频 | 亚洲精品免费网站 | 色在线视频免费 | 日本高清色www | 久久免费视频2 | 午夜亚洲国产 | 夜夜未满十八勿进的爽爽影院 | 看全色黄大色黄女片做 | 亚洲欧美色鬼久久综合 | 91国在线高清视频 | 悠悠影院欧美日韩国产 | 国产一级做a爰片久久毛片男 | 亚洲狠狠婷婷综合久久久久网站 | 九九热播 | 国产玖玖在线观看 | 国产真实乱子伦精品 | 国产精品一区伦免视频播放 | 麻豆xfplay国产在线观看 | 2021久久精品99精品久久 | 51国产午夜精品免费视频 | 久久精品国产99久久 | 午夜视频免费在线观看 | 91久久国产口精品久久久久 | 欧美图片另类小说综合 | 在线免费观看国产精品 | 丝袜精品 欧美 亚洲 自拍 | 国产成人综合久久亚洲精品 | 国产一区二区三区手机在线观看 | 在线免费观看一区二区三区 | 国产成人精品999在线观看 | 看一级毛片国产一级毛片 | 久久亚洲国产成人精品性色 | 51短视频版在线观看www免费 | 四虎影视永久在线精品免费 | 特黄aaaaa日本大片免费看 | 91精品国产福利尤物免费 | 伊人影院在线观看视频 | 久久狠狠第一麻豆婷婷天天 | 国产精品成人麻豆专区 |