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 直接访问上传的文件了。