Personne ne semble avoir simplement travaillé avec ce qui est et c'est dommage alors voici comment j'ai géré ...
Histoire / Contexte
J'ai créé un uploader SVG en 2015 basé sur un article CSS-Tricks regardant ce qui était. J'ai également fait fonctionner la grille pour la prévisualisation d'image et j'ai utilisé quelques autres correctifs. Plugin simple (les plugins de type fichier IMO doivent être simples)
Solution
Il y a eu quelques changements pour 4.7. Le vrai PITA était que pour les image/
types MIME, WP utilise maintenant GD sur les images. Pour contourner cela, j'ai défini l' svg
extension à utiliser application/svg+xml
pour que GD ne joue pas avec le fichier.
Mise à jour: à partir de 4.7.2, une étincelle brillante s'est également déclenchée dans certains cas
Puis, plus tard, via un crochet, nous le réinscrivons à chaud image/svg+xml
. C'est la même chose utilisée dans d'autres réponses, mais nous le verrons d'abord dans notre cas spécifique pour éliminer les effets (est-ce un fichier SVG); nous pouvons compter sur la lecture $data['ext']
(devrait être moins cher que la fonction pour obtenir des informations sur les fichiers comme une seule comparaison et un accès tableau / hachage).
Mise à jour: à partir de 4.7.2 $data['ext']
n'est pas toujours définie, nous allons donc maintenant si sa longueur est <1 extraire (potentiellement dangereux) l'extension du nom de fichier en utilisant
strtolower(end(explode('.', $filename)))
. La raison pour laquelle je me bats vraiment en utilisant FileInfo est que s'appuyer essentiellement sur une extension PHP est trop opaque et ne fonctionnera pas toujours pour tout le monde (en particulier pas ceux qui compilent sans ou sans accès pour activer les extensions s'il n'y en a pas). J'aimerais quelque chose qui fonctionne au lieu d'une extension. Il ne s'agit plus d'avoir les informations correctes, donc pour ceux qui font confiance à la sortie de FileInfo
et ayant l'extension (je pense que c'est la valeur par défaut en 5.6+), cela devrait fonctionner. De plus, comme il s'agit d'un plugin, il ne modifie pas le noyau, vous pouvez désactiver ce code ou désinscrire le hook.
https://github.com/Lewiscowles1986/WordPressSVGPlugin
Voir
Autres solutions de contournement
Autoriser les téléchargements non filtrés est une solution horrible car, comme d'autres l'ont dit, un lien vers ce fil de discussion pourrait permettre aux gens de télécharger des fichiers php via le téléchargement de médias (c'est mauvais et si vous le faites, vous devriez vous arrêter et réfléchir!)
Forcer chaque fichier à travers n'importe quelle fonction sans vérification (Ironiquement, si vous avez image/
dans le type mime, vous ne pouvez pas simplement avoir une simple vérification d'ext). Cela a le potentiel de créer des effets d'une portée beaucoup plus large pour résoudre un problème relativement de niche et introduit plus de travail dans l'ensemble (avertir mon plugin introduit également plus de travail pour les utilisateurs administrateurs pour que l'interface utilisateur des médias d'administration fonctionne)
Si nous quittions le mime en tant qu'application / svg + xml et filtrions simplement les types de mime que l'image téléchargerait, mais AFAIK exigerait-il que des correctifs soient utilisés comme image en vedette, etc. Il y a plus de travail à faire pour assurer une expérience SVG universelle, alors j'ai choisi pour choisir les batailles avec soin.
J'espère que cela t'aides.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
àwp-config.php
. Ce n'est pas sûr pour la production.