Вопрос или проблема
Я получаю следующую ошибку при попытке загрузить файл 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-типов
- Убедитесь, что файл .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.