Не работает move_uploaded_file() (ошибок нет)
Не могу загрузить фото на веб-сервер
$_FILES['file']['error'] выдает 0, array выводит всю информацию о изображении. Скрипт выполняется без ошибок, в БД записывается новое имя файла, но сам файл не появляется в папке.
К скрипту как я понял вопросов нет, к вебсерверу тоже (rename() прекрасно работает, значит проблема не с правами)
Код
<?php
session_start();
require_once 'connect.php';
$id = $_SESSION['user']['id'];
if (isset($_POST['submit']))
{
$file = $_FILES['file'];
$fileName = $file['name'];
$fileType = $file['type'];
$fileTempName = $file['tmp_name'];
$fileError = $file['error'];
$fileSize = $file['size'];
$fileExt = explode('.', $fileName);
$fileActualExt = strtolower(end($fileExt));
$allowed = array("jpg", "jpeg", "png", "pdf");
if (in_array($fileActualExt, $allowed))
{
if ($fileError === 0)
{
if ($fileSize < 500000)
{
$fileNameNew = uniqid('', true).".".$fileActualExt;
$fileDestination = '../avatars/'.$fileNameNew;
move_uploaded_file($fileNameNew, $fileDestination);
mysqli_query($connect, "UPDATE `users` SET `img` = '$fileNameNew' WHERE `id` = '$id'");
header("Location: ../profile.php");
}
else
{
$_SESSION['message'] = "Файл слишком большой!";
header('Location: ../profile.php');
exit();
}
}
else
{
$_SESSION['message'] = "Возникла ошибка при загрузке файла!";
header('Location: ../profile.php');
exit();
}
}
else
{
$_SESSION['message'] = "Выберите файл формата JPG/PNG/JPEG!";
header('Location: ../profile.php');
exit();
}
}
Права на директорию /var/www/
drwxr-xr-x 3 ubant www 4096
drwxr-xr-x 14 root root 4096
drwxr-xr-x 3 ubant www 4096
php.ini
file_uploads = On
upload_max_filesize = 10M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = On
default_socket_timeout = 60
Ответы (1 шт):
move_uploaded_file (в отличии от rename) проверяет настройку open_basedir и поэтому может не копировать файл, так как место назначения не входит в эту настройку.
Плюс в описании move_uploaded_file написано что эта функций проверяет действительно ли исходный файл был загружен через запрос POST. Возможно в вашем случае эта проверка не проходит и файл не копируется из-за этого.