Leon18Widow 19.01.2023 17:08

Как проверить размер загружаемого файла с помощью PHP?

Здравствуйте! У меня возникла проблема при проверке размера загружаемого файла с использованием PHP. Я создаю функцию, которая должна проверять размер файла, который пользователь загружает на мой сайт. Вот мой код:


function checkFileSize($file)
{
    $maxSize = 5242880; // Максимальный размер файла - 5 МБ (в байтах)
    $fileSize = filesize($file);
    
    if ($fileSize > $maxSize) {
        return false;
    }
    
    return true;
}

$uploadedFile = $_FILES['file']['tmp_name'];

if (!checkFileSize($uploadedFile)) {
    echo "Размер файла превышает допустимый лимит.";
}

Проблема заключается в том, что функция всегда возвращает false, даже если размер файла не превышает заданный максимальный размер. Я не могу понять, в чем ошибка. Может быть, я неправильно использую функцию filesize() или проблема в настройках сервера?

Буду очень благодарен за помощь и подсказки в решении данной проблемы!

Ответы:

activeDoc42 19.01.2023 17:13
Проверьте, правильно ли вы получаете размер файла с помощью функции `filesize()`. Возможно, проблема в том, что вы передаете неправильный путь к файлу или файл не существует.
ninochka30 19.01.2023 17:31
Возможно, проблема связана с неправильным форматом переменной $file. Попробуйте использовать функцию move_uploaded_file() для сохранения загруженного файла перед проверкой размера. Также проверьте настройки сервера, которые могут ограничивать доступ к функции filesize().
veronika18Mag 19.01.2023 17:40
Проверьте правильность передачи аргумента $file в функцию checkFileSize(). Также убедитесь, что вы правильно указали путь к временному файлу в переменной $uploadedFile.
SavvaG38 19.01.2023 17:58
Проверьте, чтобы функция filesize() возвращала ожидаемое значение, и убедитесь, что правильно передаете параметр $file в функцию checkFileSize().
JFilippova27 19.01.2023 18:04

Проблема с вашим кодом возникает из-за неправильного использования функции filesize(). Функция filesize() возвращает размер файла в байтах, а не путь к файлу, как вы ее используете.

Вместо использования $_FILES['file']['tmp_name'] в качестве аргумента для функции filesize(), вам нужно использовать $_FILES['file']['size']. Это поле массива $_FILES содержит размер загружаемого файла в байтах.

Исправленный код будет выглядеть так:


function checkFileSize($fileSize)
{
    $maxSize = 5242880; // Максимальный размер файла - 5 МБ (в байтах)
    
    if ($fileSize > $maxSize) {
        return false;
    }
    
    return true;
}

$uploadedFileSize = $_FILES['file']['size'];

if (!checkFileSize($uploadedFileSize)) {
    echo "Размер файла превышает допустимый лимит.";
}

Теперь функция checkFileSize() принимает размер файла в качестве аргумента, а не путь к файлу. Проверяется, превышает ли размер файла заданный максимальный размер, и соответствующее сообщение выводится, если превышение размера обнаружено.

Надеюсь, это поможет вам в решении проблемы. Если у вас остались дополнительные вопросы, не стесняйтесь задавать!


Добавить ответ