Проблема: загрузка и сохранение больших файлов в WPForms
Пользователи WPForms часто сталкиваются с ограничениями при загрузке больших файлов, особенно чертежей и технической документации, в форматах .dwg, .pdf, .zip и других. Стандартные настройки WordPress и WPForms не всегда позволяют корректно загружать и сохранять такие файлы из-за ограничений PHP, настроек сервера и встроенного валидационного фильтра WPForms.
Диагностика проблемы
- Проверить максимальный размер загружаемого файла в WordPress:
php.iniпараметрыupload_max_filesizeиpost_max_size. - Проверить, не блокирует ли WPForms загрузку по типу файла или размеру.
- Проверить логи сервера и WordPress на ошибки загрузки.
- Убедиться, что тема и плагины не конфликтуют с загрузкой файлов.
Как проверить лимиты PHP на загрузку
php -r "echo ini_get('upload_max_filesize').PHP_EOL;" # Максимальный размер загрузки файла
php -r "echo ini_get('post_max_size').PHP_EOL;" # Максимальный размер POST-запроса
Если значения меньше необходимых (например, менее 20M для чертежей), их нужно увеличить.
Пошаговое решение для автоматического сохранения больших файлов в WPForms
1. Увеличение лимитов PHP и WordPress
Измените настройки в php.ini или через .htaccess (если нет доступа к php.ini):
upload_max_filesize = 50M
post_max_size = 55M
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
Если вы используете хостинг с ограничениями, обратитесь в техподдержку.
2. Разрешение загрузки нужных форматов в WPForms
WPForms по умолчанию разрешает загрузку определенных типов файлов. Чтобы добавить поддержку специфичных расширений (.dwg, .svg, .zip), добавьте фильтр в functions.php вашей темы или в плагин для кастомного кода:
add_filter('wpforms_upload_mimes', function($mimes) {
$mimes['dwg'] = 'application/acad';
$mimes['svg'] = 'image/svg+xml';
$mimes['zip'] = 'application/zip';
return $mimes;
});
3. Автоматическое сохранение загруженных файлов в отдельную папку с уникальными именами
Для удобства и безопасности можно настроить автоматический перенос загруженных файлов из стандартной директории WPForms в отдельную папку, например wp-content/uploads/wpforms_custom/, и переименование файлов с добавлением метки времени:
add_filter('wpforms_upload_file_move', function($file) {
$upload_dir = wp_upload_dir();
$custom_dir = $upload_dir['basedir'] . '/wpforms_custom';
if (!file_exists($custom_dir)) {
wp_mkdir_p($custom_dir);
}
$path_info = pathinfo($file['file']);
$new_name = $path_info['filename'] . '_' . time() . '.' . $path_info['extension'];
$new_path = $custom_dir . '/' . $new_name;
if (rename($file['file'], $new_path)) {
$file['file'] = $new_path;
$file['url'] = str_replace($upload_dir['basedir'], $upload_dir['baseurl'], $new_path);
}
return $file;
});
Проверка результата
- Загрузите файл с расширением .dwg или .zip размером до 50Мб через форму WPForms.
- Убедитесь, что файл успешно загружен без ошибок.
- Проверьте, что файл сохранился в папке
wp-content/uploads/wpforms_customс уникальным именем. - Проверьте в админке WPForms, что файл доступен для скачивания и отображается корректно.
Частые ошибки и их исправление
- Ошибка "Размер файла превышает максимально допустимый": проверьте и увеличьте параметры
upload_max_filesizeиpost_max_size. Также проверьте, не ограничивает ли плагин WPForms или тема размер. - Загрузка запрещенного типа файла: убедитесь, что добавили расширение и MIME-тип в фильтр
wpforms_upload_mimes. Иногда нужно очистить кэш браузера и сайта. - Файл не сохраняется в нужной папке: проверьте права доступа к папке, используйте
wp_mkdir_p()для создания папки. - Файл загружается, но не прикрепляется к записи: проверьте, что при переносе файла обновляется URL и путь в массиве файла.
Практические советы по безопасности и производительности
- Ограничьте максимальный размер файлов, чтобы избежать перегрузки сервера.
- Используйте уникальные имена файлов, чтобы не перезаписывать существующие.
- Проверяйте MIME-тип и расширение файла, чтобы избежать загрузки опасных файлов.
- Регулярно очищайте папку с загруженными файлами от неактивных или устаревших данных.
- Если ожидается большой поток загрузок, рассмотрите использование внешних сервисов хранения (Amazon S3, Google Drive) с интеграцией через webhook.
Сравнение вариантов реализации загрузки больших файлов
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Увеличение лимитов PHP + разрешение форматов в WPForms | Просто настроить, работает без сторонних плагинов | Зависит от хостинга, может нагрузить сервер | Для сайтов с умеренным трафиком и редкой загрузкой больших файлов |
| Автоматическое переименование и перемещение файлов | Организует файлы, снижает риск конфликтов | Нужен дополнительный код, требует контроля прав доступа | Для проектов с большим количеством загруженных файлов |
| Использование внешнего хранилища (S3, Google Drive) | Масштабируемо, снижает нагрузку на сервер | Сложнее в настройке, требует API-интеграции | Для крупных проектов с интенсивной загрузкой и хранением файлов |