0

当我想上传图片并创建不存在的新目录时遇到问题,它不会创建文件夹 $gallery_name,它将图片存储在 uploads/galerije/$username 而不是 uploads/galerije/$username/$gallery_name 中。谁能帮我?

$username = $_SESSION['username'];
$gallery_name = $_POST['gallery_name'];

if (isset($_FILES['files'])) {
    $errors = array();
    foreach ( $_FILES['files']['tmp_name'] as $key => $tmp_name ) {
        $file_name = $key . $_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];

        if ($file_size > 2097152) {
            $errors[] = 'File size must be less than 2 MB';
        }

        $desired_dir = "uploads/galerije/" . $username . "/" . $gallery_name;

        if (empty($errors)) {
            if (!is_dir($desired_dir)) {
                mkdir($desired_dir, 0777); // Create directory if it does not exist
            }
            if (!is_dir("$desired_dir/" . $file_name) == false) {
                move_uploaded_file($file_tmp, "$desired_dir/" . $file_name);
                header("location: index.php");
            }
        }
        else {
            print_r($errors);
        }
    }
    if (empty($error)) {
        echo "Success";
    }
}
4

3 回答 3

5

如果目录不存在,您需要告诉 mkdir() 以递归方式创建目录。

尝试传递true给您的 mkdir() 函数:

mkdir($desired_dir, 0777, true); 

php 文档明确指出 mkdir() 默认情况下不处理递归目录,从 5.0.0 开始,您可以传入参数来更改它

于 2013-09-30T21:35:27.853 回答
2

您在is_dir这里使用:

if(is_dir("$desired_dir/".$file_name)==false){

什么时候应该使用file_exists. 也许这是你问题的一部分

于 2013-09-30T21:36:33.013 回答
2

根据PHP 文档

bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )

所以,递归地创建目录你可能会这样做:

mkdir("$desired_dir", 0777, true);
于 2013-09-30T21:37:11.650 回答