Здається, ніхто просто не працював із тим, що є, і це дуже погано, ось ось як я впорався ...
Історія / передумови
Я створив завантажувач SVG у 2015 році, базуючись на статті CSS-Tricks, що розглядає, що було. Я також отримав сітку, яка працює для попереднього перегляду зображень, і використала кілька інших виправлень. Простий плагін (плагіни типу IMO повинні бути простими)
Рішення
Було кілька змін за 4.7. Справжнім PITA було те, що для image/
типів mime 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 вимагав би виправлення, щоб вони використовувались як зображене зображення і т.д. вибирати бої ретельно.
Сподіваюсь, це допомагає.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
доwp-config.php
. Це не безпечно для виробництва.