一起學習PHP中的FTP操作

2022-09-19 13:18:09 字數 3714 閱讀 4605

除了**上傳之外,在某些業務場景中,比如在雲服務還不是非常流行的年代,往往我們會把、大檔案這些素材存放到一台單獨的有著大容量硬碟的伺服器上。這時,在後台上傳這些檔案的時候,我們就需要使用 ftp 的功能將業務伺服器上傳的檔案再通過 ftp 服務傳輸到檔案伺服器中,這就是在業務環境下 ftp 最典型的應用。

在 php 中,ftp 擴充套件是包含在原始碼中的,也就是說,我們在編譯的時候直接加上 --with-ftp 就可以了,非常地方便。如果編譯的時候沒有安裝的話,後期在原始碼包中直接找到 ftp 目錄擴充套件安裝就可以了。

首先我們來看一下如果連線 ftp 服務,在這裡我們使用虛擬機器搭建了一台 ftp 伺服器,然後從本地連線。

$conn = ftp_connect("192.168.56.102");

ftp_login($conn, 'testftp', '123456');

$pwdinfo = ftp_pwd($conn);

$dirinfo = ftp_nlist($conn, $pwdinfo);

print_r($pwdinfo); // /home/testftp

print_r($dirinfo);

// array

// (

// )

ftp_close($conn);

通過 ftp_connect() 就可以拿到乙個 ftp 連線控制代碼,然後使用 ftp_login() 進行登入。登入之後就算是正式地連線成功了。這時我們就可以通過 ftp_pwd() 看到我們登入帳號的目錄情況,也可以通過 ftp_nlist() 看到目錄中的內容。當前我們還沒有上傳任何東西,目錄裡面還是空的。ftp_close() 用於關閉乙個 ftp 連線控制代碼。

在上傳檔案之前,我們先看下如何操作目錄,也就是目錄的建立、刪除之類的操作。

$conn = ftp_connect("192.168.56.102");

ftp_login($conn, 'testftp', '123456');

ftp_mkdir($conn, 'www');

ftp_mkdir($conn, 'www1');

ftp_mkdir($conn, 'www2');

ftp_rename($conn, 'www1', 'www11');

ftp_rmdir($conn, 'www2');

print_r(ftp_nlist($conn, $pwdinfo));

// array

// (

// [0] => /home/testftp/www

// [1] => /home/testftp/www11

// )

通過 ftp_mkdir() 可以建立目錄,ftp_rename() 用於改名,這個函式不只是針對目錄,也可以對檔案進行改名操作。ftp_rmdir() 就是刪除目錄的操作。

在這段測試**中,我們建立了 3 個目錄,然後對其中乙個目錄改名,並刪乙個目錄。最後通過 ftp_nlist() 檢視當前使用者目錄下的內容。

目錄操作之後就是檔案相關的操作,這裡我們分開來說,先看一下上傳檔案的操作。

ftp_put($conn, '1.php', './1.學習乙個php中用於檢測危險函式的擴充套件taint.php');

ftp_chdir($conn, 'www');

ftp_put($conn, '2.php', './2.一起學習php中的ds資料結構擴充套件(一).php');

ftp_cdup($conn);

ftp_put($conn, 'www11/3.php', './3.一起學習php中的ds資料結構擴充套件(二).php');

ftp_rename($conn, 'www/2.php', 'www/22.php');

print_r(ftp_rawlist($conn, '.'));

// array

// (

// [0] => -rw-r--r-- 1 1003 1003 1785 feb 24 01:09 1.php

// [1] => drwxr-xr-x 2 1003 1003 20 feb 24 01:09 www

// [2] => drwxr-xr-x 2 1003 1003 6 feb 24 00:51 www1

// [3] => drwxr-xr-x 2 1003 1003 19 feb 24 00:50 www11

// )

print_r(ftp_rawlist($conn, 'www'));

// array

// (

// [0] => -rw-r--r-- 1 1003 1003 10538 feb 24 01:09 22.php

// )

print_r(ftp_rawlist($conn, 'www11'));

// array

// (

// [0] => -rw-r--r-- 1 1003 1003 1534 feb 24 01:09 3.php

// )

ftp_put() 用於檔案的上傳,我們需要定義上傳之後的檔名,如果只是乙個檔名的話,那麼這個檔案就會上傳到當前目錄下,也就是我們登入之後的 /home/testftp 這個使用者目錄。我們可以使用 ftp_chdir() 進入某個指定的目錄之後上傳,使用 ftp_cdup() 返回上級目錄。同時,我們也可以直接在檔名加入路徑資訊,這樣就不用進入某個具體的目錄,而是直接將檔案上傳到指定的目錄中。

ftp_rawlist() 是另一種顯示目錄內部檔案和目錄資訊的函式,它展示的內容和作業系統中的 ls -l 命令比較像,也就是顯示的內容更加詳細豐富一些。同樣地,在這裡我們也演示了通過 ftp_rename() 函式來修改檔案的名稱。

檔案上傳了之後,我們也可以通過一些函式來檢視檔案的資訊。

echo ftp_mdtm($conn, 'www11/3.php'), php_eol; // 1614128689

echo ftp_size($conn, 'www/22.php'), php_eol; // 10538

echo ftp_systype($conn), php_eol; // unix

這裡就是簡單的通過這三個函式看一下檔案的上傳時間、大小資訊。ftp_systype() 函式檢視的是 ftp 伺服器的作業系統資訊。

ftp_get($conn, '222.php', 'www/22.php');

// ./222.php

ftp_delete($conn, 'www11/3.php');

print_r(ftp_rawlist($conn, 'www11'));

// array

// (

// )

ftp_delete() 用於刪除 ftp 伺服器上的某個檔案,這個也不需要過多地解釋了。

通過上面這些函式,其實一些基本的 ftp 操作也就完成了,當然,在文件中還有更多的函式這裡沒有解釋說明,不過也並不是特別重要的函式。有興趣的同學可以自己去官方檢視相關的函式說明。ftp 服務雖然現在可能使用的會少一些,但在很多場景下它還是非常方便的,所以大家多少要了解掌握一些。

測試**:

一起學習php中的ftp操作.php

開源一起學習

要想自己學習機器學習,3本 聖經 是一定要看的 花書,西瓜書,和統計學習方法 但不是剛入門就要看的,首先啊,我們必須學好學校教的c語言,對程式設計有乙個初步的了解,其次,我們都知道python的厲害,可以幹很多事,也很出名,這就出現了人人都知道py,但不是人人都懂py的現象。確實要想搞機器學習,你最...

一起學習extjs( )

可以說,extjs是系統類專案最好的ui 前端使用者介面 選擇,特別是自從extjs4.0出來後,不管是 美觀還是效能的提高,及其功能之強大,說它排第一,無可厚非。當然,最近也蠻流行easyui這個輕量級的,據說是國人開發的ui。其實,也是很不錯的。大家可以根據自己專案的情況來進行選擇。然後,我們自...

一起學習PHP中的DS資料結構擴充套件(二)

上文中我們學習了 ds 擴充套件中一些比較常用的資料結構,也留下了一些伏筆,比如 map 中返回 keys 和 values 分別返回的是兩種特殊的資料結構,也就是我們今天要學習的內容。最初見到 vector 還是在很早的時候在 j a 中見過。不過即使是在 j a 中,這個型別的資料結構的使用也並...