Кажется, никто не работал с тем, что есть, и это очень плохо, вот как я справился ...
История / История
Я создал загрузчик 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 необходимо проделать большую работу, поэтому я выбрал тщательно выбирать сражения.
Надеюсь это поможет.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
вwp-config.php
. Это не безопасно для производства.