Диагностика проблемы: почему нужно ограничивать видео по размеру и длительности
При загрузке видео в WordPress без ограничений можно столкнуться с проблемами производительности сайта, превышением лимитов хостинга и ухудшением пользовательского опыта. Большие видео занимают много места и медленно загружаются, а слишком длинные — снижают вовлечённость посетителей. Поэтому на сайтах с видеоконтентом важно установить чёткие ограничения на размер и длительность загружаемых файлов.
Как проверить текущие ограничения на загрузку видео
По умолчанию WordPress использует настройки PHP и сервера для лимитов загрузки:
upload_max_filesize— максимальный размер файла;post_max_size— максимальный размер POST-запроса;max_execution_time— время выполнения скрипта;- ограничения медиабиблиотеки в WordPress.
Проверить текущие значения можно через phpinfo() или файл wp-includes/pluggable.php. Для видео длительность проверяется только программно.
Пошаговое решение: установка ограничений на размер и длительность видео
1. Ограничение размера файла через фильтр upload_size_limit
Добавьте в functions.php вашей темы или в плагин следующий код для ограничения размера загружаемых видео (например, до 50 МБ):
add_filter('upload_size_limit', function($size) {
$max_size = 50 * 1024 * 1024; // 50 МБ
return ($size > $max_size) ? $max_size : $size;
});2. Проверка длительности видео при загрузке с помощью wp_handle_upload_prefilter
Для проверки длительности используем PHP-библиотеку ffmpeg (должна быть установлена на сервере). Пример кода:
add_filter('wp_handle_upload_prefilter', function($file) {
if (strpos($file['type'], 'video') !== 0) {
return $file; // не видео
}
$tmp_name = $file['tmp_name'];
$cmd = "ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 " . escapeshellarg($tmp_name);
$duration = shell_exec($cmd);
$max_duration = 300; // максимум 5 минут
if ($duration && floatval($duration) > $max_duration) {
$file['error'] = 'Видео слишком длинное. Максимальная длительность 5 минут.';
}
return $file;
});3. Ограничение типа файлов и вывод информативных ошибок
Чтобы избежать загрузки неподдерживаемых форматов, добавьте проверку MIME-типа и вывод ошибок:
add_filter('wp_handle_upload_prefilter', function($file) {
$allowed_types = ['video/mp4', 'video/webm', 'video/ogg'];
if (!in_array($file['type'], $allowed_types)) {
$file['error'] = 'Недопустимый формат видео. Разрешены: MP4, WebM, OGG.';
return $file;
}
return $file;
});Как проверить, что ограничения работают
- Попробуйте загрузить видео размером больше 50 МБ — WordPress должен выдать ошибку.
- Попробуйте загрузить видео длительностью более 5 минут — должна появиться ошибка о длительности.
- Загрузите видео неподдерживаемого формата — получите соответствующее сообщение.
- Проверьте в медиабиблиотеке, что запрещённые файлы не загрузились.
Частые ошибки и как их исправить
- Ошибка: «ffprobe не найден»
Убедитесь, чтоffmpegустановлена, а путь кffprobeдоступен для PHP. Можно указать полный путь в команде, например/usr/bin/ffprobe. - Ограничение размера не работает
Проверьте настройки PHPupload_max_filesizeиpost_max_size— они должны быть больше или равны вашему ограничению в коде. - Не срабатывает проверка длительности
Убедитесь, что PHP может выполнять shell-команды, и чтоshell_execне отключена в настройках сервера.
Практические советы по безопасности и производительности
- Ограничивайте загрузку видео не только по размеру, но и по типу и длительности, чтобы избежать загрузки потенциально опасных или чрезмерно больших файлов.
- Используйте CDN для отдачи видео, чтобы снизить нагрузку на основной сервер.
- Кэшируйте медиаконтент и используйте lazy load для видео, чтобы улучшить скорость загрузки страниц.
- Регулярно обновляйте серверное ПО и плагины, чтобы избежать уязвимостей при работе с файлами.
Сравнение способов ограничения видео в WordPress
| Метод | Преимущества | Недостатки |
|---|---|---|
| Ограничение PHP (upload_max_filesize) | Простая настройка, работает на уровне сервера | Не проверяет длительность, только размер |
Фильтры WordPress (upload_size_limit) | Гибкость, можно менять динамически | Не учитывает длительность видео |
Проверка длительности через ffmpeg | Точная проверка длительности, предотвращает загрузку слишком длинных видео | Требует установки ffmpeg и разрешения на shell_exec |