wpcorp.ru wordpress WP Corp

Как установить ограничения на загрузку файлов в WordPress

В WordPress по умолчанию установлены ограничения на размер и тип загружаемых файлов, но часто этих настроек бывает недостаточно для конкретных задач. В этой статье мы рассмотрим, как можно самостоятельно задать ограничения на загрузку файлов, предотвращая загрузку слишком больших или неподходящих файлов. Также рассмотрим примеры кода и полезные плагины для управления загрузками.

Почему важно ограничивать загрузку файлов в WordPress

Без контроля загрузок можно столкнуться с несколькими проблемами:

  • Перегрузка хостинга: загрузка слишком больших файлов занимает много места и ресурсов.
  • Безопасность: нельзя позволять загружать потенциально опасные форматы файлов.
  • Удобство пользователей: ограничение размеров помогает избежать ошибок при загрузке.

Чтобы избежать этих проблем, важно корректно настроить ограничения по типу и размеру файлов.

Основные способы ограничения загрузок в WordPress

1. Использование настроек PHP и WordPress

Первым шагом рекомендуется проверить настройки PHP:

  • upload_max_filesize — максимальный размер загружаемого файла;
  • post_max_size — максимальный размер POST-запроса;
  • max_execution_time — максимальное время выполнения скрипта.

Эти параметры обычно настраиваются в php.ini или через .htaccess. Например:

php_value upload_max_filesize 10M
php_value post_max_size 12M
php_value max_execution_time 300

В WordPress есть фильтр upload_size_limit, который позволяет задать ограничение программно. Ниже пример функции с префиксом wpcorp_ для ограничения загрузки до 5 МБ:

function wpcorp_upload_size_limit($size) {
    return 5 * 1024 * 1024; // 5 МБ
}
add_filter('upload_size_limit', 'wpcorp_upload_size_limit');

2. Ограничение типов файлов

WordPress по умолчанию разрешает определённые типы файлов, но их можно расширить или сузить. Для этого используется фильтр upload_mimes. Например, чтобы разрешить только изображения и PDF:

function wpcorp_restrict_mime_types($mimes) {
    return [
        'jpg|jpeg|jpe' => 'image/jpeg',
        'png' => 'image/png',
        'gif' => 'image/gif',
        'pdf' => 'application/pdf',
    ];
}
add_filter('upload_mimes', 'wpcorp_restrict_mime_types');

Если нужно запретить загрузку SVG (часто используют для безопасности), можно удалить этот тип:

function wpcorp_disable_svg_upload($mimes) {
    if(isset($mimes['svg'])) {
        unset($mimes['svg']);
    }
    return $mimes;
}
add_filter('upload_mimes', 'wpcorp_disable_svg_upload');

3. Проверка загружаемых файлов при загрузке

Чтобы дополнительно проверять размер и формат файла, можно использовать хук wp_handle_upload_prefilter. Пример, который запрещает файлы больше 3 МБ:

function wpcorp_check_file_size($file) {
    $max_size = 3 * 1024 * 1024; // 3 МБ
    if ($file['size'] > $max_size) {
        $file['error'] = 'Ошибка: размер файла превышает 3 МБ';
    }
    return $file;
}
add_filter('wp_handle_upload_prefilter', 'wpcorp_check_file_size');

Плагины для ограничения загрузок в WordPress

Если не хочется писать код, можно использовать готовые решения:

  • WP Upload Restriction — простой плагин для ограничения типа и размера загружаемых файлов.
  • File Upload Types by WPForms — добавляет гибкое управление разрешёнными типами загрузок.
  • Clearfy Pro — плагин, который среди множества функций позволяет управлять безопасностью загрузок и ограничениями.

Как интегрировать ограничения с пользовательскими формами загрузки

Если на сайте есть кастомные формы для загрузки файлов, например, через AJAX, стоит добавить проверку на стороне сервера. Пример использования нашего фильтра wpcorp_check_file_size совместно с AJAX-обработчиком:

add_action('wp_ajax_wpcorp_upload_file', 'wpcorp_handle_ajax_upload');
add_action('wp_ajax_nopriv_wpcorp_upload_file', 'wpcorp_handle_ajax_upload');

function wpcorp_handle_ajax_upload() {
    if (!isset($_FILES['file'])) {
        wp_send_json_error('Файл не загружен');
    }
    $file = $_FILES['file'];
    $max_size = 3 * 1024 * 1024;
    if ($file['size'] > $max_size) {
        wp_send_json_error('Размер файла превышает 3 МБ');
    }
    $allowed_types = ['image/jpeg', 'image/png', 'application/pdf'];
    if (!in_array($file['type'], $allowed_types)) {
        wp_send_json_error('Недопустимый тип файла');
    }

    $upload = wp_handle_upload($file, ['test_form' => false]);
    if (isset($upload['error'])) {
        wp_send_json_error($upload['error']);
    }

    wp_send_json_success(['url' => $upload['url']]);
}

Такой подход обеспечит контроль как на клиенте, так и на сервере.

Рекомендации по безопасности и производительности

Помимо ограничения типов и размеров, важно:

  • Регулярно обновлять WordPress и плагины.
  • Ограничивать права пользователей на загрузку.
  • Использовать плагины безопасности, например, Clearfy Pro, который помогает блокировать опасные загрузки.
  • Следить за нагрузкой на сервер при больших объёмах загрузок.

Все эти меры помогут сохранить сайт быстрым и защищённым.

×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙