首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 實現 FTP 文件上傳完整示例與目錄遞歸創建

     編輯:PHP 綜合知識

FTP 上傳是 PHP 後端開發中高頻需求,無論是自動化部署、跨服務器文件同步,還是用戶素材收集,穩健的 FTP 客戶端封裝都不可或缺。本文提供一個生產級的完整示例,涵蓋連接認證、多級目錄遞歸創建、二進制上傳、本地臨時文件清理等核心環節,並針對權限配置給出關鍵提示。

核心功能模組

1. 遞歸創建遠程目錄

function make_directory($ftp_stream, $dir) {
    // 目錄已存在或可直接創建則返回成功
    if ($this->ftp_is_dir($ftp_stream, $dir) || @ftp_mkdir($ftp_stream, $dir)) {
        return true;
    }
    // 遞歸創建父目錄
    if (!$this->make_directory($ftp_stream, dirname($dir))) {
        return false;
    }
    // 最後創建當前目錄
    return ftp_mkdir($ftp_stream, $dir);
}

2. 判斷遠程路徑是否為目錄

function ftp_is_dir($ftp_stream, $dir) {
    $original_directory = ftp_pwd($ftp_stream);
    // 嘗試切換目錄,抑制錯誤輸出
    if (@ftp_chdir($ftp_stream, $dir)) {
        ftp_chdir($ftp_stream, $original_directory); // 切回原目錄
        return true;
    }
    return false;
}

主流程實現

$conn = ftp_connect("ftp地址") or die("Could not connect");
ftp_login($conn, "ftpname", "password");

// 確保遠程目錄存在
make_directory($conn, $path);
ftp_chdir($conn, $path);

// 執行上傳(二進制模式)
if (ftp_put($conn, $info[0]['savename'], getcwd().$upload->savePath.$info[0]['savename'], FTP_BINARY)) {
    // 上傳成功後刪除本地臨時文件
    unlink(getcwd().$upload->savePath.$info[0]['savename']);
}

ftp_close($conn);
// 注意:需確保 FTP 賬號具備目標目錄的寫入/創建權限

關鍵技術點總結

  • 錯誤抑制與容錯:大量使用 @ 抑制 FTP 函數的警告,配合邏輯判斷實現靜默重試,避免中斷主流程。
  • 遞歸回溯機制:make_directory 採用「先嘗試創建,失敗則遞歸創建父目錄,再創建自身」的策略,完美解決多級嵌套目錄問題。
  • 資源清理閉環:上傳成功即刪除本地臨時文件,防止磁盤佔用;最後 ftp_close 釋放連接資源。
  • 權限前置檢查:代碼註釋明確提醒「注意上傳端的 FTP 權限設置」,這是部署時最常見的坑點。

進階優化建議

生產環境建議增加:
① 連接超時與傳輸超時設置(ftp_set_option)
② 被動模式開關(ftp_pasv)以適應防火牆/NAT 環境
③ 上傳前 MD5 校驗、斷點續傳支持(需配合 ftp_nb_put 非阻塞模式)
④ 結構化異常處理替代 die(),便於上層業務捕獲錯誤碼

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved