一般 PHP 的上傳檔案方法, 是將上傳的檔案放到暫存目錄, 再複製到指定的目錄, 雖然操作上方便, 但問題是儲存上傳檔案的目錄必需要有寫入權限 (CHMOD 777), 而且不能上傳到遠端伺服器。
要解決以上問題, 我覺得較簡單的方法是用 PHP 內建的 FTP 功能, 例如現時 WordPress 的更新功能, 也是透過 FTP 操作。以下會介紹在 PHP 連接到 FTP 上傳及下載檔案的方法:
FTP 下載檔案
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php $remote_file = 'somefile.txt'; ### 遠端檔案 $local_file = 'localfile.txt'; ### 本機儲存檔案名稱 $handle = fopen($local_file, 'w'); ### 連接的 FTP 伺服器是 localhost $conn_id = ftp_connect('localhost'); ### 登入 FTP, 帳號是 USERNAME, 密碼是 PASSWORD $login_result = ftp_login($conn_id, 'USERNAME', 'PASSWORD'); if (ftp_fget($conn_id, $handle, $remote_file, FTP_ASCII, 0)) { echo "下載成功, 並儲存到 $local_file\n"; } else { echo "下載 $remote_file 到 $local_file 失敗\n"; } ftp_close($conn_id); fclose($handle); ?> |
FTP 上傳檔案
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $file = 'upload_file.pdf'; ### 上傳的檔案 $fp = fopen($file, 'r'); ### 連接的 FTP 伺服器是 localhost $conn_id = ftp_connect('localhost'); ### 登入 FTP, 帳號是 USERNAME, 密碼是 PASSWORD $login_result = ftp_login($conn_id, 'USERNAME', 'PASSWORD'); if (ftp_fput($conn_id, $file, $fp, FTP_ASCII)) { echo "成功上傳 $file\n"; } else { echo "上傳檔案 $file 失敗\n"; } ftp_close($conn_id); fclose($fp); ?> |
PHP 的 FTP 功能十分完善, 除了基本的上傳, 下載檔案外, 其他常用的 FTP 操作指令也包括在內, 以下是常用 PHP 的 FTP 函式:
ftp_pwd() — 回傳當前的目錄.
ftp_chdir() — 改變工作目錄.
ftp_cdup() — 移到上一層目錄, 等如 Linux 指令的 “cd ../”.
ftp_delete() — 刪除檔案.
ftp_chmod — 設定權限.
ftp_rename — 將檔案或目錄重新名命, 即 Linux 的 mv 指令.
ftp_rmdir — 刪除目錄.
ftp_size — 回傳檔案的體積, 單位是 bytes.
ftp_nlist — 回傳當前目錄所有檔案/目錄名稱.
ftp_rawlist — 回傳當前目錄所有檔案/目錄及其詳細資料.
ftp_raw — 執行自訂 FTP 指令.