當前位置: 首頁> 最新文章列表> 在文件上傳時如何結合is_dir 函數檢查目錄的存在性

在文件上傳時如何結合is_dir 函數檢查目錄的存在性

gitbox 2025-05-28

一、基本用法

is_dir()的語法非常簡單:

 bool is_dir(string $filename)

它接受一個字符串參數$filename ,返回布爾值。如果該路徑存在並且是一個目錄,返回true ;否則返回false


二、結合文件上傳使用示例

假設我們希望將上傳的文件保存到uploads/documents/目錄中,我們就需要在上傳文件前先檢查該目錄是否存在:

 <?php
$uploadDir = 'uploads/documents/';

if (!is_dir($uploadDir)) {
    // 如果目錄不存在,就嘗試創建它
    if (!mkdir($uploadDir, 0755, true)) {
        die('無法創建上傳目錄');
    }
}

// 處理文件上傳
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
    $tmpName = $_FILES['file']['tmp_name'];
    $filename = basename($_FILES['file']['name']);
    $destination = $uploadDir . $filename;

    if (move_uploaded_file($tmpName, $destination)) {
        echo '文件上傳成功:' . htmlspecialchars($destination);
    } else {
        echo '文件移動失敗';
    }
} else {
    echo '上傳出錯';
}
?>

這段代碼的關鍵在於:

  1. 使用is_dir()檢查目標上傳目錄是否存在。

  2. 如果不存在,則使用mkdir()遞歸創建目錄。

  3. 上傳文件成功後,使用move_uploaded_file()將臨時文件移動到目標目錄中。


三、實際項目中的路徑規范建議

在實際項目中,我們還可以結合__DIR__$_SERVER['DOCUMENT_ROOT']來構建更穩健的路徑,避免相對路徑帶來的問題:

 $uploadDir = __DIR__ . '/uploads/documents/';

或:

 $uploadDir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/documents/';

四、與URL 的結合使用(前端展示)

上傳成功後,我們可能需要將文件的URL 返回給前端。假設我們服務器的域名是gitbox.net ,可以這樣拼接文件地址:

 $fileUrl = 'https://gitbox.net/uploads/documents/' . urlencode($filename);
echo '文件已上傳,訪問地址:<a href="' . $fileUrl . '">' . $fileUrl . '</a>';

這樣,用戶就可以通過該URL 直接訪問上傳的文件了。