В WordPress по умолчанию можно загружать файлы довольно большого размера, но иногда необходимо ограничить размер загружаемых файлов или типы файлов, чтобы избежать проблем с безопасностью или нагрузкой на сервер. В этой статье мы подробно разберём, как установить ограничения на загрузку файлов в WordPress с помощью кода и популярных плагинов, а также рассмотрим, как реализовать пользовательские проверки при загрузке.
Почему важно ограничивать загрузку файлов в WordPress
Если на вашем сайте разрешена загрузка файлов от пользователей (например, в комментариях, при регистрации или в личных кабинетах), отсутствие контроля может привести к нескольким проблемам:
- Большие файлы занимают много дискового пространства и могут замедлить сайт.
- Загрузка вредоносных файлов может привести к взлому сайта.
- Некорректные типы файлов могут вызвать ошибки или проблемы с отображением.
Поэтому важно установить ограничения как на размеры, так и на типы файлов, которые могут быть загружены.
Ограничение размера загружаемых файлов через functions.php
Самый простой способ — добавить фильтр, который будет проверять размер файла при загрузке. Для этого используем хук wp_handle_upload_prefilter. Ниже пример функции, которая запрещает загружать файлы больше 2 МБ:
function wptool_limit_upload_size( $file ) {
$max_size = 2 * 1024 * 1024; // 2 МБ в байтах
if ( $file['size'] > $max_size ) {
$file['error'] = 'Ошибка: размер файла не должен превышать 2 МБ.';
}
return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'wptool_limit_upload_size' );Добавьте этот код в файл functions.php активной темы или в свой плагин. Теперь, если пользователь попытается загрузить файл больше 2 МБ, он получит ошибку.
Как изменить ограничение на размер через php.ini или .htaccess
Иногда серверные настройки PHP могут запрещать загрузку больших файлов, даже если WordPress позволяет. Для проверки и изменения ограничений найдите или добавьте в ваш php.ini или .htaccess следующие параметры:
upload_max_filesize = 2M— максимальный размер загружаемого файла.post_max_size = 8M— максимальный размер POST-запроса.
В .htaccess можно прописать:
php_value upload_max_filesize 2M
php_value post_max_size 8MПосле изменения этих параметров необходимо перезапустить сервер или дождаться обновления настроек.
Ограничение типов файлов для загрузки
По умолчанию WordPress разрешает загрузку определённых типов файлов. Чтобы запретить или разрешить дополнительные типы, используйте фильтр upload_mimes. Например, чтобы запретить загрузку файлов SVG (часто используется для векторов, но может быть опасен), добавим:
function wptool_restrict_mime_types( $mimes ) {
if ( isset( $mimes['svg'] ) ) {
unset( $mimes['svg'] );
}
return $mimes;
}
add_filter( 'upload_mimes', 'wptool_restrict_mime_types' );<И наоборот, если нужно разрешить загрузку формата WebP, добавьте:
function wptool_add_webp_mime_type( $mimes ) {
$mimes['webp'] = 'image/webp';
return $mimes;
}
add_filter( 'upload_mimes', 'wptool_add_webp_mime_type' );Использование плагинов для ограничения загрузки файлов
Если вы предпочитаете не трогать код, можно использовать плагины, которые позволят гибко настраивать ограничения:
- Clearfy Pro — улучшает безопасность WordPress, в том числе позволяет ограничивать загрузку файлов и управлять MIME-типами. Подробнее на https://wpshop.ru/plugins/clearfy-pro
- WP File Upload — удобный плагин для загрузки файлов с возможностью настройки ограничений по размеру и типу.
- Restrict Uploads — позволяет ограничить загрузку файлов по ролям пользователей и типам файлов.
Эти плагины помогут быстро настроить ограничения без написания кода.
Дополнительные проверки при загрузке: пример с AJAX
Иногда необходимо сделать интерфейс загрузки файлов более дружелюбным, сразу показывая ошибку при превышении размера. Вот пример AJAX-проверки в WordPress:
function wptool_ajax_check_file_size() {
$max_size = 2 * 1024 * 1024; // 2 МБ
if ( isset($_FILES['file']) && $_FILES['file']['size'] > $max_size ) {
wp_send_json_error('Размер файла не должен превышать 2 МБ');
}
wp_send_json_success();
}
add_action('wp_ajax_wptool_check_file_size', 'wptool_ajax_check_file_size');
add_action('wp_ajax_nopriv_wptool_check_file_size', 'wptool_ajax_check_file_size');На стороне JavaScript нужно отправить файл на проверку перед загрузкой и обработать ответ, показывая пользователю сообщение об ошибке без перезагрузки страницы.
Итоги и рекомендации
Ограничение загрузки файлов — важный аспект безопасности и производительности сайта на WordPress. Используйте сочетание серверных параметров, фильтров WordPress и плагинов для точной настройки.
Если нужна простая и быстрая настройка — используйте фильтр wp_handle_upload_prefilter для ограничения размера и upload_mimes для типов файлов.
Для более сложных случаев подойдут плагины Clearfy Pro или WP File Upload с расширенными настройками.
Запомните, что всегда стоит тестировать новые ограничения на тестовом сайте, чтобы не нарушить работу загрузок для легитимных пользователей.