如何根据选择输入将文件移动到特定的目录文件夹


How to move file to specific directory folder based on select input?

以下是我到目前为止所拥有的,我将在微时间上传时重命名文件,然后将其移动到一个名为"pdf cv"的文件夹中,然而,我需要做的是根据选择输入将其移到一个文件夹中(此外,如果该文件夹还不存在,如果我能在目录中创建该文件夹,那就太好了。)非常感谢您的帮助。

示例:如果用户选择"Option1"然后上传文件,则该文件将被移动到名为"Option1"的目录中的文件夹中。

选择输入:

<select id="categories" name="categories" class="categories">
<option value="">-- Select --</option>
<option value="">option 1</option>
<option value="">option 2 </option>
<option value="">option 3 </option>
</select>

上传形式:

<form action ="pdf_upload.php" id="cv_upload_form" method="post" enctype="multipart/form-data">
<div class="fileUpload text-center cv_select">
    <span>Select File</span>
    <input type="file" name="file" class="upload" id="pdf_input" />
</div>   
<canvas class="center-block pdf_canvas" id="the-canvas" style=""><p class="preview_text">Preview</p></canvas>    
<input class="cv_upload" type="submit" value="Upload">
</form>  

pdf_upload.php内容:

<?php
$uploaddir = "pdf-cv/";
$allowed_ext = "pdf";
$max_size = "5000000";
$extension = pathinfo($_FILES['file'] ['name']);
$extension = $extension[extension];
$allowed_paths = explode(", ", $allowed_ext);
for($i = 0; $i < count($allowed_paths); $i++) {
if ($allowed_paths [$i] == "$extension") {
    $ok = "1";
}
}

if ($ok == "1")  {
    if($_FILES['file']['size'] > $max_size)
    {
        print "File is too big!";
        exit;
    }

if(is_uploaded_file($_FILES['file']['tmp_name']))
{
$temp = explode(".", $_FILES["file"]["name"]);
$newfilename = round(microtime(true)) . '.' . end($temp);
move_uploaded_file($_FILES["file"]["tmp_name"],$uploaddir.''. $newfilename);
 header("Location: new_begining_index.php#home"); 
}
print "Your CV has been successfully uploaded!";    
} else {
print "Incorrect file extension!";
}
?>

您首先需要给您选择的输入实际值:

<select id="categories" name="categories" class="categories">
<option value="">-- Select --</option>
<option value="Option1">option 1</option>
<option value="Option2">option 2 </option>
<option value="Option3">option 3 </option>
</select>

然后验证输入,检查目录是否存在或创建它。我在下面的例子中使用die()进行错误检查,这不是最优雅的方法,但无论如何都应该回答你的问题:

$uploaddir = "pdf-cv/";
// make sure a category was selected
if (!isset($_POST['categories']) || trim($_POST['categories']) == '') {
    die("no category selected");
}
// validate input against a whitelist
if (!in_array($_POST['categories'], array('Option1', 'Option2', 'Option3'))) {
    die("don't hack me bruh");
}
// make directory if it doesn't exist
$newdir = $uploaddir . $_POST['categories'];
if (!file_exists($newdir)) {
    mkdir($newdir, 0755, true);
}

现在您可以正常移动文件:

move_uploaded_file($_FILES["file"]["tmp_name"], $newdir . '/' . $newfilename);

请注意,对于$uploaddir,您可能需要使用绝对路径,而不是相对路径。例如:/var/www/public_html/my_project/pdf-cv/。如果你不知道你的绝对路径是什么,这通常可以在$_SERVER超全局:中找到

echo '<pre>';
var_dump($_SERVER);
echo '</pre>';