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 '上傳出錯';
}
?>
這段代碼的關鍵在於:
使用is_dir()檢查目標上傳目錄是否存在。
如果不存在,則使用mkdir()遞歸創建目錄。
上傳文件成功後,使用move_uploaded_file()將臨時文件移動到目標目錄中。
在實際項目中,我們還可以結合__DIR__或$_SERVER['DOCUMENT_ROOT']來構建更穩健的路徑,避免相對路徑帶來的問題:
$uploadDir = __DIR__ . '/uploads/documents/';
或:
$uploadDir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/documents/';
上傳成功後,我們可能需要將文件的URL 返回給前端。假設我們服務器的域名是gitbox.net ,可以這樣拼接文件地址:
$fileUrl = 'https://gitbox.net/uploads/documents/' . urlencode($filename);
echo '文件已上傳,訪問地址:<a href="' . $fileUrl . '">' . $fileUrl . '</a>';
這樣,用戶就可以通過該URL 直接訪問上傳的文件了。