在php上传图片

时间:2012-11-23 10:39:04

标签: php html image

我想在目录中添加图片。该目录动态生成。但是在目录中上传图像时出错,由于此错误导致图片无法上传,错误如下:

警告:mkdir():文件存在于第21行的C:\ wamp \ www \ test \ index.php中

我的代码在这里:

 <body>
            <form method="post" action="" enctype="multipart/form-data">
            <input type="file" name="filename" id="filename" />
            <input type="submit" name="pic" />
            </form>

    </body>
    </html>

    <?php
        if(isset($_POST['pic'])){
            $comimages = $_FILES['filename']['tmp_name'];
            $targetpath = mkdir("pageimage/pageid");
                $compath = $targetpath."/".$_FILES['filename']['name'];

                $comFileType=$_FILES['filename']['type'];
                $comFileSize=$_FILES['filename']['size'];
                $comFileSize=$comFileSize/1024;

                if($comFileSize<1000)
                {
                    $arrFileType=array("image/jpeg","image/png","image/gif","image/bmp");

                    if(in_array($comFileType,$arrFileType))

                    {

                        move_uploaded_file($comimages,$compath);
                    }
                    else
                    {
                        echo("invalid file format");    
                    }
                }
                else
                {
                    echo("File Size Error");    
                }
        }
    ?>

5 个答案:

答案 0 :(得分:4)

线索出现错误。您尝试使用$targetpath = mkdir("pageimage/pageid");创建的目录已存在...因此您无法再次创建该目录!

我建议在尝试制作之前进行快速文件存在检查。有一个功能: file_exists()

此外,mkdir()返回布尔值(成功或失败);不是文件目录,因此您将无法按预期使用$targetpath变量。

试试这个......

$targetpath = "pageimage/pageid";
if (!file_exists($targetpath)) {
    mkdir($targetpath);
}
...

答案 1 :(得分:0)

替换

$targetpath = mkdir("pageimage/pageid");

使用:

$targetpath = "pageimage/pageid";
if(!is_dir($targetpath)){
mkdir($targetpath);
}

这样,只有在目录不存在时才创建目录。这个目录已经存在,这是正常的错误。

答案 2 :(得分:0)

你不能创建一个目录两次,因为它创建了目录检查它的存在。

您可以使用is_dir()is_writeable()来确保您可以写入此目录。

请参阅: http://uk.php.net/manual/en/function.is-writable.php

http://uk.php.net/is_dir

答案 3 :(得分:0)

替换

$targetpath = mkdir("pageimage/pageid");

使用..

$targetpath = if(is_dir("pageimage/pageid")) ? "pageimage/pageid" : mkdir("pageimage/pageid");

您应该在创建文件夹之前检查文件夹是否存在。

答案 4 :(得分:0)

第一个问题:第21行在哪里? 无论如何,您必须在创建目录之前测试目录是否存在。显然,它似乎已经存在于您的情况下(文件夹在技术上被认为是文件,例如参见is_dir())。使用file_exists()。 还要注意,如果你创建一个结构(里面有一个文件夹和一个文件夹),你必须使用$recursive参数,参见PHP doc:http://php.net/manual/fr/function.mkdir.php