В 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, который помогает блокировать опасные загрузки.
- Следить за нагрузкой на сервер при больших объёмах загрузок.
Все эти меры помогут сохранить сайт быстрым и защищённым.