В WordPress 4.7.1 было внесено изменение, которое проверяет тип MIME загруженного файла. Это нарушает загрузку файлов таких типов, как SVG или DOCX. Уже есть заявки на эту проблему в WordPress Core, где вы можете прочитать больше об этом:
Временный и рекомендуемый обходной путь ( в течение времени , пока эта проблема не будет устранена) является следующим плагиным:
Отключить Real MIME Check
Если вы не хотите использовать этот плагин, вот та же функциональность:
add_filter( 'wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
global $wp_version;
if ( '4.7.2' !== $wp_version ) {
return $data;
}
$filetype = wp_check_filetype( $filename, $mimes );
return [
'ext' => $filetype['ext'],
'type' => $filetype['type'],
'proper_filename' => $data['proper_filename']
];
}, 10, 4 );
Обратите внимание, что в этот отсканированный файл включена проверка версии, чтобы отключить исправление сразу после обновления WordPress.
редактировать
Первоначально проблема была решена в 4.7.2. Но так как 4.7.2 был срочным выпуском безопасности , исправление не вошло в эту версию. Теперь это должно быть исправлено в 4.7.3.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
вwp-config.php
. Это не безопасно для производства.'svg' === strtolower($filetype['ext']);
и не вводит больше работы в том случае, если работа не требуется (в основном) или если файл не относится к типу svg ...Похоже, это может быть связано с этим билетом https://core.trac.wordpress.org/ticket/39552 , похоже, что-то сломалось в 4.7.1
источник
Кажется, никто не работал с тем, что есть, и это очень плохо, вот как я справился ...
История / История
Я создал загрузчик SVG в 2015 году, основываясь на статье о хитростях CSS и взгляде на то, что было. Я также получил сетку, работающую для предварительного просмотра изображения, и использовал несколько других исправлений. Простой плагин (плагины типа файлов IMO должны быть простыми)
Решение
Произошло несколько изменений для 4.7. Настоящая PITA заключалась в том, что для
image/
типов пантомимы WP теперь использует GD на изображениях. Чтобы обойти это, я установилsvg
расширение,application/svg+xml
чтобы GD не связывался с файлом.Обновление: с 4.7.2 в некоторых случаях вспыхнула яркая искра
Затем, через крючок, мы возвращаем его обратно
image/svg+xml
. Это то же самое, что и в других ответах, но мы сначала привязываем его к нашему конкретному случаю, чтобы устранить эффекты (это файл SVG); мы можем рассчитывать на чтение$data['ext']
(должна быть дешевле, чем функция, чтобы получить информацию о файле только как одно сравнение и один доступ к массиву / хэшу).Обновить: состоянию на 4.7.2
$data['ext']
не всегда устанавливается, поэтому мы теперь, если его длина составляет <1, извлекают (потенциально небезопасно) расширение из имени файла, используяstrtolower(end(explode('.', $filename)))
. Причина, по которой я действительно борюсь с использованием FileInfo, заключается в том, что, по сути, полагаться на расширение PHP слишком непрозрачно и не всегда будет работать для всех (особенно для тех, кто компилирует без или без доступа для включения расширений, если его там нет). Я хотел бы что-то, что работает вместо расширения. Больше неFileInfo
нужно иметь правильную информацию, поэтому для тех, кто доверяет выводу и имеет расширение (я полагаю, по умолчанию в 5.6+), оно должно работать. Кроме того, поскольку это плагин, он не модифицирует ядро, поэтому вы можете отключить этот код или отменить регистрацию.https://github.com/Lewiscowles1986/WordPressSVGPlugin
Видеть
Другие обходные пути
Разрешение нефильтрованных загрузок - это ужасное решение, потому что, как другие говорили, что, связываясь с этим потоком, люди могут загружать php-файлы через загрузчик медиа (это плохо, и если вы это сделаете, вам следует остановиться и подумать!)
Принудительное выполнение каждого файла через любую функцию без проверок (как ни странно, если
image/
mime-тип, вы не можете просто простую проверку ext). Это имеет потенциал для создания гораздо более широких эффектов для решения относительно нишевой проблемы и увеличивает общую нагрузку (предостережение, что мой плагин также вводит больше работы для администраторов, чтобы заставить работать пользовательский интерфейс администратора).Если мы оставим mime как application / svg + xml и просто отфильтруем типы mime, которые будет загружать изображение, но AFAIK потребует исправления, которые будут использоваться в качестве избранного изображения и т. Д. Для обеспечения универсальной работы с SVG необходимо проделать большую работу, поэтому я выбрал тщательно выбирать сражения.
Надеюсь это поможет.
источник