Я пытаюсь разрешить моей системе загружать один файл в зависимости от нескольких заданий, выбранных из списка.
Система будет по существу выбирать задания, позволяя пользователю загружать файл, связанный со всеми этими заданиями, которые хранятся в базе данных с уникальным идентификатором.
Пока что кажется, что файл загружается только для первого идентификатора в массиве. Как загрузить файл несколько раз, используя каждый идентификатор задания в имени файла, чтобы определить каждый файл отдельно?
Это цикл до сих пор:
if ($_FILES["file"]["type"] != "") {
$count++;
$uploadComplete = 0;
$newFileName = date("YmdHis");
$newFileName = $newFileName . "-TEST".$multiId[$i]."-";
$newFileName2 = $newFileName . "-";
$newFileName2 = $_FILES["file"]["name"];
$newFileName2 = str_replace(" ", "-", $newFileName2);$ext = strrchr($_FILES["file"]["name"], ".");
if (($ext == ".png")
|| ($ext == ".jpeg")
|| ($ext == ".pjpeg")
|| ($ext == ".jpg")
|| ($ext == ".PNG")
|| ($ext == ".JPEG")
|| ($ext == ".PJPEG")
|| ($ext == ".JPG")) {
$fileType = "image";
}
if (($ext == ".pdf")
|| ($ext == ".doc")
|| ($ext == ".docx")
|| ($ext == ".zip")
|| ($ext == ".PDF")
|| ($ext == ".DOC")
|| ($ext == ".DOCX")
|| ($ext == ".ZIP")) {
$fileType = "file";
}if (($ext == ".png")
|| ($ext == ".jpeg")
|| ($ext == ".pjpeg")
|| ($ext == ".jpg")
|| ($ext == ".pdf")
|| ($ext == ".doc")
|| ($ext == ".docx")
|| ($ext == ".zip")
|| ($ext == ".PNG")
|| ($ext == ".JPEG")
|| ($ext == ".PJPEG")
|| ($ext == ".JPG")
|| ($ext == ".PDF")
|| ($ext == ".DOC")
|| ($ext == ".DOCX")
|| ($ext == ".ZIP")
&& ($_FILES["file"]["size"] < 10000000)){
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
} else {if (file_exists("../../uploads/logdocs/".$newFileName . $_FILES["file"]["name"])) {
//nothing
} else {
move_uploaded_file($_FILES["file"]["tmp_name"],"../../uploads/logdocs/" .$newFileName . $newFileName2);
$fileLocation = "/uploads/logdocs/" .$newFileName . $newFileName2;
if (empty($fileLocation)) {
$uploadComplete = 0;
} else {
$uploadComplete = 1;
}
}
}
}
} else {
$uploadComplete = 1;
}
if ($uploadComplete == 1) {
mysql_query("UPDATE system_modificationsLogs
SET
modificationLogUpload = '$fileLocation'
WHERE modificationsLogId = '$modificationsLogId'");
}
Я предполагаю, что вы делаете это в цикле.
На первой итерации эта строка кода корректно «загружает» или, точнее, перемещает файл, который находится в местоположении tmp.
move_uploaded_file($_FILES["file"]["tmp_name"],"../../uploads/logdocs/" .$newFileName . $newFileName2);
На второй и последующих итерациях вы вернетесь назад и попытаетесь переместить тот же файл, но файла больше нет, потому что вы переместили его в первом варианте.
Вы можете использовать copy вместо move_uploaded_file.
copy($_FILES["file"]["tmp_name"], "../../uploads/logdocs/" .$newFileName . $newFileName2);
Это скопирует файл и оставит оригинальный файл tmp на месте для последующего копирования.
В конце выполнения вашего скрипта файл tmp будет уничтожен.
Других решений пока нет …