PHP 內建 FTP 擴展提供完整的 FTP 客戶端功能,支援連線、登入、被動模式、檔案上傳/下載、目錄操作等。
| 函式 | 說明 |
|---|---|
ftp_connect(host, port, timeout) | 建立連線,port 預設 21,timeout 秒 |
ftp_login(conn, user, pass) | 登入驗證 |
ftp_pasv(conn, true) | 開啟被動模式(客戶端發起資料連線),穿透防火牆/NAT 必開 |
ftp_put(conn, remote, local, mode) | 上傳檔案,mode: FTP_ASCII 或 FTP_BINARY |
ftp_get(conn, local, remote, mode) | 下載檔案 |
ftp_chdir(conn, dir) | 切換遠端目錄 |
ftp_mkdir(conn, dir) | 建立遠端目錄 |
ftp_close(conn) | 關閉連線 |
<?php
$host = 'ftp.example.com';
$user = 'username';
$pwd = 'password';
$local_file = 'data.txt';
$remote_file = 'uploads/data.txt';
$conn = ftp_connect($host) or die("無法連線 $host");
$login = ftp_login($conn, $user, $pwd) or die("登入失敗");
ftp_pasv($conn, true); // 強烈建議開啟被動模式
// 二進制模式上傳(適用圖片、壓縮檔等)
$upload = ftp_put($conn, $remote_file, $local_file, FTP_BINARY);
if ($upload) {
echo "上傳成功:$remote_file";
} else {
echo "上傳失敗";
}
ftp_close($conn);
?>
function ftp_put_dir($conn, $local_dir, $remote_dir) {
if (!ftp_chdir($conn, $remote_dir)) {
ftp_mkdir($conn, $remote_dir);
ftp_chdir($conn, $remote_dir);
}
$handle = opendir($local_dir);
while (($file = readdir($handle)) !== false) {
if ($file === '.' || $file === '..') continue;
$local_path = $local_dir . '/' . $file;
if (is_dir($local_path)) {
ftp_put_dir($conn, $local_path, $file);
} else {
ftp_put($conn, $file, $local_path, FTP_BINARY);
}
}
closedir($handle);
ftp_cdup($conn); // 返回上層目錄
}
urlencode 或統一用英文/數字命名。