在php中创建目录

时间:2013-09-30 21:30:53

标签: php

我有一个问题,当我想上传图片并创建一个不存在的新目录时它不会创建文件夹$ 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";
    }
}

3 个答案:

答案 0 :(得分:5)

如果它们尚未存在,你需要告诉mkdir()以递归方式创建目录。

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

mkdir($desired_dir, 0777, true); 

php documents具体说明默认情况下mkdir()不处理递归目录,从5.0.0开始你可以传入参数来改变它

答案 1 :(得分:2)

您在这里使用is_dir

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

何时应使用file_exists。也许这是你问题的部分

答案 2 :(得分:2)

根据PHP documentation

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

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

mkdir("$desired_dir", 0777, true);