У меня есть форма, которая будет загружать в каталог, в котором она находится, но мне нужно, чтобы она загружалась в подкаталоги или подкаталоги подкаталогов из выбора. Но не знаете, как использовать выбранную информацию.
Моя структура папок состоит из 4 слоев
Produce
Produce/Meat
Produce/Meat/Beef
Produce/Meat/Beef/Portions
Produce/Meat/Beef/Packaged
Produce/Vegtables
Produce/Vegetables/Fresh
Produce/Vegetables/Fresh/Local etc,.
Это моя форма
<form id="Upload" action="upload_file.php" method="post" enctype="multipart/form-data">
<br>
<label for="fileSelect"><strong>There is a 10MB limit Filesize limit.</strong> Allowed file types are pictures, MSWord, MSExcel, PDF, and plain text. Navigate and choose:</label>
<input type="file" name="file" id="fileSelect"><br><br>
Upload to:
<select name="folder"><option value="this" selected>This folder</option><option value="BBB">Meat</option><option value="CCC">Meat/Beef</option><option value="DDD">Meat/Beef/Portions</option><option value="EEE">Meat/Beef/Packaged</option><option value="FFF">Vegetables</option><option value="GGG">Vegetables/Fresh</option><option value="HHH">Vegetables/Fresh/Local</option><option value="III">Vegetables/Fresh/Packaged</option></select>
<input class="button" type="submit" name="action" value="Upload to Shared Folder"><br><br>
</form>
Тогда upload_file.php имеет этот код PHP
<?php
if(isset($_FILES["file"]["error"])){
if($_FILES["file"]["error"] > 0){
echo "Error: " . $_FILES["file"]["error"] . "<br>";
} else{
$allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png", "doc" => "application/msword", "docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "xls" => "application/vnd.ms-excel", "xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "pdf" => "application/pdf", "txt" => "text/plain");
$filename = $_FILES["file"]["name"];
$filetype = $_FILES["file"]["type"];
$filesize = $_FILES["file"]["size"];
// Verify file extension
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!array_key_exists($ext, $allowed)) die("Error: This file is not an accepted file type.</br></br>");
// Verify file size - 10MB maximum
$maxsize = 200000 * 60;
if($filesize > $maxsize) die("Error: File size is larger than the allowed 10MB limit.</br></br>");
// Verify MYME type of the file
if(in_array($filetype, $allowed)){
// Check whether file exists before uploading it
if(file_exists("general/" . $_FILES["file"]["name"])){
echo $_FILES["file"]["name"] . " already exists. Go back and choose another file or rename the original.</br></br>";
} else{
move_uploaded_file($_FILES["file"]["tmp_name"], "" . $_FILES["file"]["name"]);
echo "The file was uploaded successfully.</br></br>";
}
}
else{
echo "Error: There was a problem uploading the file - please try again.";
}
}
} else{
echo "Error: Invalid parameters - something is very wrong with this upload.";
}
?>
Есть ли способ, которым я могу взять выбранное значение и загрузить в выбранный подкаталог?
Есть много способов сделать это, поэтому вот один из способов:
Проверьте, установлен ли массив POST (для выпадающего списка), затем проверьте, совпадает ли он со значением из опций, затем переместите файл в выбранную папку:
if(isset($_POST['folder'])){
if($_POST['folder'] == 'this'){
// move_uploaded_file to said folder
}
if($_POST['folder'] == 'BBB'){
// move_uploaded_file to said folder
}
// ... do the same for the others below}
Вы также можете установить папку загрузки по умолчанию.
Редактировать:
Примечание: поищите мой оригинальный фрагмент внутри // My snippet START
— // My snippet END
,
<?php
if(isset($_FILES["file"]["error"])){
if($_FILES["file"]["error"] > 0){
echo "Error: " . $_FILES["file"]["error"] . "<br>";
} else{
$allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png", "doc" => "application/msword", "docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "xls" => "application/vnd.ms-excel", "xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "pdf" => "application/pdf", "txt" => "text/plain");
$filename = $_FILES["file"]["name"];
$filetype = $_FILES["file"]["type"];
$filesize = $_FILES["file"]["size"];
// Verify file extension
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!array_key_exists($ext, $allowed)) die("Error: This file is not an accepted file type.</br></br>");
// Verify file size - 10MB maximum
$maxsize = 200000 * 60;
if($filesize > $maxsize) die("Error: File size is larger than the allowed 10MB limit.</br></br>");
// Verify MYME type of the file
if(in_array($filetype, $allowed)){
// Check whether file exists before uploading it
if(file_exists("general/" . $_FILES["file"]["name"])){
echo $_FILES["file"]["name"] . " already exists. Go back and choose another file or rename the original.</br></br>";
} else{
// My snippet START
if(isset($_POST['folder'])){
if($_POST['folder'] == 'this'){
// move_uploaded_file to said folder
$uploaddir = '/var/www/uploads/Produce/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
echo "The file was uploaded successfully.</br></br>";
}
if($_POST['folder'] == 'BBB'){
// move_uploaded_file to said folder
$uploaddir = '/var/www/uploads/Produce/Meat/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
echo "The file was uploaded successfully.</br></br>";
}
// ... do the same for the others below}
// My snippet END
}
}
else{
echo "Error: There was a problem uploading the file - please try again.";
}
}
} else{
echo "Error: Invalid parameters - something is very wrong with this upload.";
}
?>
Других решений пока нет …