Часто возникает задача ограничить размер загружаемых пользователями файлов в WordPress. Это особенно актуально для сайтов с формами обратной связи, порталами с пользовательским контентом или интернет-магазинами, где загрузка больших файлов может привести к расходу ресурсов сервера и замедлению работы сайта. В этой статье мы подробно разберём несколько способов установки ограничений на размер загружаемых файлов без использования плагинов, а также рассмотрим, как контролировать эти параметры программно.
Почему важно ограничивать размер загружаемых файлов?
Ограничение размера файла помогает:
- Избежать переполнения дискового пространства;
- Уменьшить нагрузку на сервер и увеличить скорость обработки;
- Обеспечить безопасность, предотвращая загрузку потенциально опасных больших файлов;
- Поддерживать комфортную работу пользователей, ограничивая слишком большие файлы.
WordPress по умолчанию устанавливает лимит на размер загружаемых файлов, но он зависит от настроек PHP и может быть недостаточно строгим или, наоборот, слишком жёстким. Поэтому важно уметь управлять этими настройками самостоятельно.
Настройка размера загрузки через php.ini
Первый и самый эффективный способ — изменить параметры PHP на сервере. Для этого нужно найти или создать файл php.ini в корне сайта или в директории с WordPress и добавить или изменить следующие параметры:
upload_max_filesize = 5M
post_max_size = 6M
memory_limit = 128M
Здесь upload_max_filesize — максимальный размер одного загружаемого файла, post_max_size — максимальный размер всего POST-запроса (важно, чтобы он был больше или равен upload_max_filesize), а memory_limit — лимит памяти PHP.
После внесения изменений необходимо перезапустить веб-сервер или PHP-FPM, чтобы настройки вступили в силу. Проверить текущие значения можно с помощью файла phpinfo(); или плагина, например, Debug Info.
Использование .htaccess для ограничения размера файла
Если у вас Apache-сервер и нет доступа к php.ini, можно попробовать добавить директивы в файл .htaccess в корне сайта:
php_value upload_max_filesize 5M
php_value post_max_size 6M
Однако на некоторых хостингах это может не работать из-за ограничений конфигурации сервера. В таком случае лучше обратиться к хостинг-провайдеру или использовать другие способы.
Ограничение загрузки через functions.php темы
Если вы хотите установить ограничение на размер файла именно на уровне WordPress, можно сделать проверку при загрузке файла с помощью хука wp_handle_upload_prefilter. Это позволит отклонять загрузку при превышении лимита и выводить понятное сообщение.
function wp7ru_limit_upload_size( $file ) {
$size_limit = 5 * 1024 * 1024; // 5 МБ в байтах
if ( $file['size'] > $size_limit ) {
$file['error'] = 'Ошибка: размер файла превышает допустимый лимит в 5 МБ.';
}
return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'wp7ru_limit_upload_size' );
Добавьте этот код в файл functions.php вашей активной темы или в отдельный плагин. Теперь при попытке загрузить файл больше 5 МБ пользователь увидит ошибку.
Разбор кода
Функция wp7ru_limit_upload_size принимает массив $file с информацией о загружаемом файле. Мы проверяем его размер и если он больше 5 МБ, добавляем ошибку в поле error. Хук wp_handle_upload_prefilter позволяет вмешаться в процесс загрузки до сохранения файла.
Контроль размера файлов в контактных формах
Если вы используете формы, например, с плагином WP Pro Forms или WPForms, то у большинства из них есть встроенные настройки ограничения размера файлов. Но можно усилить защиту и контролировать это дополнительным кодом.
Пример для WPForms, где мы дополнительно проверяем размер загружаемого файла через хук:
function wp7ru_wpforms_file_size_limit( $errors, $field_id, $file ) {
$max_size = 5 * 1024 * 1024; // 5 МБ
if ( $file['size'] > $max_size ) {
$errors[] = 'Файл слишком большой. Максимальный размер — 5 МБ.';
}
return $errors;
}
add_filter( 'wpforms_process_file_upload_errors', 'wp7ru_wpforms_file_size_limit', 10, 3 );
Дополнительные советы и рекомендации
Чтобы полностью контролировать загрузку, рекомендуем:
- Проверять настройки PHP через
phpinfo()или плагины; - Использовать фильтры WordPress для проверки размеров и форматов файлов;
- Оповещать пользователей понятными сообщениями об ошибках;
- Если используете плагин WP7, например, WPGPT или Clearfy Pro, изучите их возможности по контролю загрузок и безопасности.
Как проверить текущий лимит загрузки файлов в WordPress
Для быстрого определения, какой максимальный размер файла разрешён к загрузке, можно использовать функцию, которую мы назовём wp7ru_get_max_upload_size:
function wp7ru_get_max_upload_size() {
$max_upload = (int)( ini_get( 'upload_max_filesize' ) );
$max_post = (int)( ini_get( 'post_max_size' ) );
$memory_limit = (int)( ini_get( 'memory_limit' ) );
return min( $max_upload, $max_post, $memory_limit ) . 'M';
}
echo 'Максимальный размер загружаемого файла: ' . wp7ru_get_max_upload_size();
Этот код выводит минимальное значение из трёх ключевых параметров PHP, определяющих максимальный размер загружаемых файлов. Таким образом вы всегда будете знать текущие ограничения.