Wydaje się, że nikt nie pracował z tym, co jest, a szkoda, więc poradziłem sobie z tym ...
Historia / Tło
Stworzyłem program do przesyłania plików SVG w 2015 r. Na podstawie artykułu CSS-Tricks, w którym sprawdziłem, co było. Mam również siatkę działającą do podglądu obrazów i użyłem kilku innych poprawek. Prosta wtyczka (wtyczki typu pliku IMO powinny być proste)
Rozwiązanie
Wprowadzono kilka zmian w wersji 4.7. Prawdziwa PITA polegała na tym, że dla image/
typów MIME WP używa teraz GD na obrazach. Aby to obejść, ustawiłem svg
rozszerzenie, aby application/svg+xml
GD nie zadzierało z plikiem.
Aktualizacja: od 4.7.2 wybuchła pewna jasna iskra w niektórych przypadkach
Następnie za pomocą haka podłączamy go z powrotem do image/svg+xml
. Jest to to samo, co używane w innych odpowiedziach, ale najpierw blokujemy go do naszego konkretnego przypadku, aby wyeliminować efekty (czy jest to plik SVG); możemy polegać na czytaniu $data['ext']
(powinno być tańsze niż funkcja, aby uzyskać informacje o pliku jako tylko jedno porównanie i jeden dostęp do tablicy / skrótu).
Aktualizacja: od 4.7.2 $data['ext']
nie zawsze jest ustawiona, więc teraz, jeśli jej długość wynosi <1 wyciąg (potencjalnie niebezpieczne) rozszerzenie z nazwy pliku przy użyciu
strtolower(end(explode('.', $filename)))
. Powodem, dla którego tak naprawdę walczę za pomocą FileInfo jest to, że zasadniczo poleganie na rozszerzeniu PHP jest zbyt nieprzejrzyste i nie zawsze będzie działać dla wszystkich (szczególnie nie dla tych, które kompilują się bez dostępu lub bez dostępu, aby włączyć rozszerzenia, jeśli go nie ma). Chciałbym coś, co działa zamiast rozszerzenia. Nie jest już kwestia posiadania poprawnych informacji, więc dla osób ufających wyjściu FileInfo
i posiadających rozszerzenie (uważam, że jest to domyślne w wersji 5.6+) powinno działać. Ponieważ jest to wtyczka, nie modyfikuje ona rdzenia, więc możesz wyłączyć ten kod lub wyrejestrować hak.
https://github.com/Lewiscowles1986/WordPressSVGPlugin
Widzieć
Inne obejścia
Zezwolenie na przesyłanie niefiltrowanych plików jest okropnym rozwiązaniem, ponieważ, jak powiedzieli inni, linkowanie do tego wątku, ludzie mogą przesyłać pliki php za pośrednictwem programu do przesyłania multimediów (to źle, a jeśli to zrobisz, powinieneś przestać i pomyśleć!)
Wymuszanie każdego pliku przez dowolną funkcję bez sprawdzania (jak na ironię, jeśli masz image/
typ MIME, nie możesz po prostu mieć prostego sprawdzenia zewnętrznego). Może to potencjalnie stworzyć znacznie szersze efekty w celu rozwiązania stosunkowo niszowego problemu i wprowadza ogólnie więcej pracy (zastrzeżenie, że moja wtyczka wprowadza również więcej pracy dla administratorów, aby uzyskać interfejs administratora mediów do pracy)
Jeśli zostawimy mime jako application / svg + xml i po prostu przefiltrujemy typy mime, obraz zostanie przesłany, ale AFAIK wymaga poprawek do użycia jako wyróżnionego obrazu itp. Jest jeszcze wiele do zrobienia, aby zapewnić uniwersalne wrażenia SVG, więc wybrałem starannie dobierać bitwy.
Mam nadzieję że to pomoże.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
dowp-config.php
. To nie jest bezpieczne do produkcji.