wpforms.ru wordpress WPForms.ru

Автоматическое сохранение чертежей и файлов больших размеров

Проблема: загрузка и сохранение больших файлов в 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-интеграцииДля крупных проектов с интенсивной загрузкой и хранением файлов
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙