【问题标题】:PHP File Upload Creating DirectoryPHP文件上传创建目录
【发布时间】:2012-09-23 21:07:54
【问题描述】:

所以我的网站上有一个文件上传部分,用户可以在其中上传任何 doc 或 docx 文件夹。这是我的html代码:

<form action="upload_file.php" method="post" enctype="multipart/form-data">
    Select a file: <input type="file" name="upload">
<input type="submit">

这里是upload_file.php的代码:

<?php
    session_start();
    $allowedExts = array("doc", "docx");
    $extension = end(explode(".", $_FILES["upload"]["name"]));

    if (($_FILES["upload"]["size"] < 200000)
    && in_array($extension, $allowedExts)) {
        if ($_FILES["upload"]["error"] > 0)
        {
            echo "Return Code: " . $_FILES["upload"]["error"] . "<br />";
        }
        else
        {
            echo "Upload: " . $_FILES["upload"]["name"] . "<br />";
            echo "Type: " . $_FILES["upload"]["type"] . "<br />";
            echo "Size: " . ($_FILES["upload"]["size"] / 1024) . " Kb<br />";
            echo "Temp file: " . $_FILES["upload"]["tmp_name"] . "<br />";

            if (file_exists("Proposals/".$_SESSION["FirstName"] ."/" . $_FILES["upload"]["name"]))
            {
                echo $_FILES["upload"]["name"] . " already exists. ";
            }
            else
            {
                move_uploaded_file($_FILES["upload"]["tmp_name"],
                "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]);
                echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"];
            }
        }
    } else {
        echo "Invalid file";
    }
?>

但这不会上传任何内容,即使它回复了一条成功的消息。我在想这是因为它不允许我创建目录。上面的代码有什么问题吗,还是我必须添加更多代码才能使其创建目录。如果有帮助的话,这里是我的文件夹结构:

【问题讨论】:

标签: php html file-upload upload directory


【解决方案1】:

您必须创建您试图将文件移动到的目录,它不会由 move_uploaded_file 自动创建。

使用 mkdir(),http://php.net/mkdir,创建目录,然后移动文件。

这是脚本的另一种结尾,应该这样做

// Create directory if it does not exist
if(!is_dir("Proposals/". $_SESSION["FirstName"] ."/")) {
    mkdir("Proposals/". $_SESSION["FirstName"] ."/");
}

// Move the uploaded file
move_uploaded_file($_FILES["upload"]["tmp_name"], "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]);

// Output location
echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"];

【讨论】:

  • 这段代码是一个很好的起点(当然,错误处理留给读者)。我建议的唯一改进是使用常量 DIRECTORY_SEPARATOR 而不是硬编码“/”
【解决方案2】:

你需要检查目录是否存在,如果不存在,则创建它。

if (!file_exists("Proposals/". $_SESSION["FirstName"])) {
      mkdir("Proposals/". $_SESSION["FirstName"]);
}

【讨论】:

    【解决方案3】:

    您正在将文件上传到不存在的目录,因此您需要先创建它,您的 upload_file.php 应该像

    <?php
    session_start();
    $allowedExts = array("doc", "docx");
    $extension = end(explode(".", $_FILES["upload"]["name"]));
    
    if (($_FILES["upload"]["size"] < 200000)
    && in_array($extension, $allowedExts)) {
        if ($_FILES["upload"]["error"] > 0)
        {
            echo "Return Code: " . $_FILES["upload"]["error"] . "<br />";
        }
        else
        {
            echo "Upload: " . $_FILES["upload"]["name"] . "<br />";
            echo "Type: " . $_FILES["upload"]["type"] . "<br />";
            echo "Size: " . ($_FILES["upload"]["size"] / 1024) . " Kb<br />";
            echo "Temp file: " . $_FILES["upload"]["tmp_name"] . "<br />";
    
            if (file_exists("Proposals/".$_SESSION["FirstName"] ."/" . $_FILES["upload"]["name"]))
            {
                echo $_FILES["upload"]["name"] . " already exists. ";
            }
            else
            {
                // Check if directory exists if not create it 
                if(!is_dir("Proposals/". $_SESSION["FirstName"] ."/")) {
                   mkdir("Proposals/". $_SESSION["FirstName"] ."/");
                 }
                 move_uploaded_file($_FILES["upload"]["tmp_name"],
                "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]);
                echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"];
            }
        }
    } else {
        echo "Invalid file";
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 2014-11-10
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      相关资源
      最近更新 更多