Это может быть примером того, как обрабатывать загрузку файла изображения через ваш ajax-вызов к php-скрипту таким образом, который обычно безопасен, а также предотвращает повторные конфликты.
Вам нужно будет придумать свой собственный способ отслеживания имени изображения (используя базу данных или тому подобное), который выходит за рамки вопроса.
Если ваша структура каталогов и php такова:
/path/to/webroot/index.php
/path/to/webroot/upload.php
/path/to/webroot/uploads/(image files)
Следующий PHP для обработки загрузки может быть таким:
upload.php :
<?php
if ( isset($_FILES['avatar']) and empty($_FILES['avatar']['error']) ) {
if ( is_uploaded_file($_FILES['avatar']['tmp_name']) ) { // safety check
// validate that it is an accepted image format (and not some junk file)
$imgdat = getimagesize($_FILES['avatar']['tmp_name']);
$valid = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP);
if ( in_array($imgdat[2],$valid) ) {
// create a unique filename for the image, using the extension result
$imgname = com_create_guid() . image_type_to_extension($imgdat[2]);
$result = move_uploaded_file(
$_FILES['avatar']['tmp_name'],
__DIR__ .'/uploads/'. $imgname
); // safely moves the upload to your final destination
}
}
}
else {
// possible error return handler
}
?>
Если com_create_guid()
не существует на вашем сервере, вы можете добавить его в конфигурацию или использовать встроенную мини-функцию для генерации того же: https://stackoverflow.com/a/18206984/2960971