у меня есть форма загрузки файлов, js и php которые ее обрабатывают. так вот, все хорошо, все заружается. но мне нужно чтобы фотки загружались не в одну папку указанную в переменной $upload_path = __DIR__ . "/upload/"; а в этой папке upload создавал свою новую папку с уникальным именем (не важно каким).
прикладываю код:
это ajax.php
и JS
прикладываю код:
это ajax.php
PHP:
header('Content-Type: application/json; charset=utf-8');
$response = array();
$response['status'] = 'bad';
if (!empty($_FILES['file']['tmp_name'])){
for($key=0;$key<count($_FILES['file']['tmp_name']);$key++){
$upload_path = __DIR__ . "/upload/";
$user_filename = $_FILES['file']['name'][$key];
$userfile_basename = pathinfo($user_filename,PATHINFO_FILENAME );
$userfile_extension = pathinfo($user_filename, PATHINFO_EXTENSION);
$server_filename = $userfile_basename . "." . $userfile_extension;
$server_filepath = $upload_path . $server_filename;
$i = 0;
while(file_exists($server_filepath)){
$i++;
$server_filepath = $upload_path . $userfile_basename . "($i)." . $userfile_extension;
}
if (copy($_FILES['file']['tmp_name'][$key], $server_filepath)){
$response['files'][] = $server_filepath;
$response['status'] = 'ok';
}
}
}
echo json_encode($response);
и JS
JavaScript:
$(document).ready(
function(e){
let form = $('#myform');
let message = $('#myform_status');
let progressBar = $('#progressbar');
form.on('submit',function(){
let formData = new FormData();
if(($('#myfile')[0].files).length !=0){
$.each($('#myfile')[0].files, function(i, file){
formData.append("file[" + i + "]", file);
});
}
else{
message.text('Нужно выбрать файл/ы');
return false;
}
$.ajax({
type:"POST",
url:"ajax.php",
cache:false,
dataType:"json",
contentType: false,
processData: false,
data: formData,
xhr: function(){
let uploadBar = document.getElementById('progressbar_on-off');
uploadBar.classList.add('progress-on');
let xhr = $.ajaxSettings.xhr(); // получаем объект XMLHttpRequest
xhr.upload.addEventListener('progress', function(evt){ // добавляем обработчик события progress (onprogress)
if(evt.lengthComputable) { // если известно количество байт
// высчитываем процент загруженного
let percentComplete = Math.ceil(evt.loaded / evt.total * 100);
// устанавливаем значение в атрибут value тега <progress>
// и это же значение альтернативным текстом для браузеров, не поддерживающих <progress>
progressBar.val(percentComplete);
}
}, false);
return xhr;
},
beforeSend: function(){
console.log('Запрос начат');
message.text('Файлы загружаются, подождите...');
form.find('input').prop("disabled",true);
},
success: function(data){
console.log('А тут отработать если ок');
if(data.status == 'ok'){
$('#myfile').val('');
message.text('Файлы загружены');
}
else{
message.text('Что-то не так с загрузкой');
}
},
complete: function(data){
console.log('Запрос закончен');
form.find('input').prop("disabled",false);
document.location.href = "/thanks.php";
}/*,
error: function(xhr, ajaxOptions, thrownError){
console.log(thrownError);
message.html('Была ошибка');
}*/
});
return false;
});
}
);