当前位置: 首页> 最新文章列表> 文件上传过程中,如何利用 PHP 的 is_dir 函数来检查目录是否存在?实用方法分享

文件上传过程中,如何利用 PHP 的 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 直接访问上传的文件了。