Как разрешить загрузку файлов .xls?

Вопрос или проблема

Я получаю следующую ошибку при попытке загрузить файл xls.

Извините, этот тип файла не разрешен по соображениям безопасности.

Пробовал плагин wp-extra для типов файлов, но там нет возможности выбрать тип файла xls.

Пробовал плагин pro mime type, там есть опция разрешить Xls, и я это сделал, но все равно не работает и появляется та же ошибка.

Также пробовал добавить следующий код в файл function.php

function my_myme_types($mime_types){
      // Новые разрешенные типы mime.
$mime_types['xls'] = 'application/vnd.ms-excel';

return $mime_types;
}
add_filter('upload_mimes', 'my_myme_types', 1, 1);

но все равно отображается та же ошибка.

Также пробовал

function wpse294198_mime_types( $mimes ) {
    $mimes['xls|xlsx'] = 'application/vnd.ms-excel';
    return $mimes;
}
add_filter( 'mime_types', 'wpse294198_mime_types' );

единственное решение, которое сработало – это wp-config ALLOW UNFILTERED UPLOADS. но это рискованно, если рассматривать соображения безопасности. Я хочу разрешить только файл xls, а не какие-либо другие форматы файлов, такие как Php, js и т.д.

 define(‘ALLOW_UNFILTERED_UPLOADS’, true)

проблема, с которой я столкнулся с вышеупомянутым решением, заключается в том, что теперь любой может загружать любой тип файла откуда угодно, если у него есть возможность загрузки. Поэтому я считаю, что это не хорошо. Мне нужно лучшее решение моей проблемы.

Я использую WordPress v5.2, и кто-то посоветовал мне попробовать решение ниже, но оно тоже не сработало.

function wpse323750_multi_mimes( $check, $file, $filename, $mimes ) {
  if ( empty( $check['ext'] ) && empty( $check['type'] ) ) {
    $multi_mimes = [ [ 'xls' => 'application/excel' ], [ 'xls' => 'application/vnd.ms-excel' ], ['xls' => 'application/x-excel' ], ['xls' => 'application/x-msexcel'] ];

  foreach( $multi_mimes as $mime ) {
    remove_filter( 'wp_check_filetype_and_ext', 'wpse323750_multi_mimes', 99, 4 );
    $check = wp_check_filetype_and_ext( $file, $filename, $mime );
    add_filter( 'wp_check_filetype_and_ext', 'wpse323750_multi_mimes', 99, 4 );
    if ( ! empty( $check['ext'] ) ||  ! empty( $check['type'] ) ) {
      return $check;
    }
  }
  }
  return $check;
}
add_filter( 'wp_check_filetype_and_ext', 'wpse323750_multi_mimes', 99, 4 );

Попробуйте ту же функцию, но с другим ключом $mime_types ('xla|xls|xlt|xlw'):

<?php
function my_myme_types( $mime_types ){
    // Новые разрешенные типы mime.
    $mime_types['xla|xls|xlt|xlw'] = 'application/vnd.ms-excel';

    return $mime_types;
}
add_filter( 'upload_mimes', 'my_myme_types', 1, 1 );

Чтобы получить ключи и значения массива MIME типов, используемых WordPress:

<?php
$mimes = wp_get_mime_types();

echo '<pre>';
print_r( $data );
echo '</pre>';

Ответ или решение

Для решения проблемы с загрузкой файлов формата .xls в WordPress, необходимо учитывать несколько важных аспектов, связанных с настройками разрешенных MIME-типов, а также безопасностью вашей установки. Ваша текущая ситуация подразумевает, что даже после использования различных плагинов и кода в functions.php, проблема все еще актуальна. Ниже представлен детальный план действий по решению этой проблемы.

Шаг 1: Проверка настроек MIME-типов

  1. Убедитесь, что файл .xls действительно имеет корректный MIME-тип. В большинстве случаев это application/vnd.ms-excel, но также могут использоваться и другие типы, например:
    • application/excel
    • application/x-excel
    • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet для .xlsx файлов.

Шаг 2: Всестороннее добавление MIME-типов

Вы уже пробовали несколько функций для добавления MIME-типов. Однако для успешного решения задачи попробуйте следующую модификацию кода в вашем файле functions.php:

function my_custom_mime_types($mime_types) {
    // Разрешенные MIME-типы
    $mime_types['xls'] = 'application/vnd.ms-excel';
    $mime_types['xlt'] = 'application/vnd.ms-excel';
    $mime_types['xla'] = 'application/vnd.ms-excel';
    $mime_types['xlw'] = 'application/vnd.ms-excel';
    return $mime_types;
}
add_filter('upload_mimes', 'my_custom_mime_types', 1, 1);

Это решение добавляет все возможные форматы, связанные с Microsoft Excel, и может помочь в вашем случае.

Шаг 3: Очистка кеша и временных файлов

После внесения изменений, убедитесь, что вы очистили кеш вашего сайта и браузера. Бывает, что старый кеш мешает обновлениям, и изменения могут не вступить в силу.

Шаг 4: Проверка на конфликты с плагинами

Отключите все плагины, кроме тех, которые непосредственно необходимы для загрузки файлов, и проверьте, сохраняется ли проблема. Если загрузка .xls работает, активируйте плагины последовательно, чтобы обнаружить, какой из них вызывает конфликт.

Шаг 5: Проверка прав доступа к директориям

Убедитесь, что директория загрузок вашего WordPress может изменяться, и у нее есть необходимые разрешения. Обычно для папки wp-content/uploads необходимо установить права 755.

Шаг 6: Использование wp-config и безопасность

Согласен, использование ALLOW_UNFILTERED_UPLOADS — не самый безопасный вариант. Вместо этого постарайтесь устранять конкретные проблемы с MIME-типами. Если ни одно из предложенных решений не помогает, рекомендую создать собственный плагин, который будет обрабатывать только загрузку файлов .xls и при этом обеспечивать необходимую безопасность.

Заключение

Работа с MIME-типами в WordPress может быть сложной, особенно если возникают конфликты с плагинами или темами. Следуя данным шагам, вы сможете корректно разрешить загрузку файлов формата .xls и при этом сохранить высокую безопасность вашего сайта. Если проблема остается нерешенной, возможно, стоит обратиться к профессиональному разработчику или техподдержке WordPress.

Оцените материал
Добавить комментарий

Капча загружается...