除了**上傳之外,在某些業務場景中,比如在雲服務還不是非常流行的年代,往往我們會把、大檔案這些素材存放到一台單獨的有著大容量硬碟的伺服器上。這時,在後台上傳這些檔案的時候,我們就需要使用 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 中,這個型別的資料結構的使用也並...