Nessuno sembra aver appena lavorato con ciò che è ed è un peccato, quindi ecco come ho gestito ...
Storia / Sfondo
Ho creato un uploader SVG nel 2015 sulla base di un articolo CSS-Tricks che guardava cosa fosse. Ho anche fatto funzionare la griglia per l'anteprima dell'immagine e ho usato alcune altre correzioni. Plug-in semplice (i plug-in di tipo file IMO dovrebbero essere semplici)
Soluzione
Ci sono stati alcuni cambiamenti per 4.7. Il vero PITA era che per i image/
tipi MIME WP ora utilizza GD sulle immagini. Per aggirare questo ho impostato l' svg
estensione da utilizzare in application/svg+xml
modo che GD non si scherzasse con il file.
Aggiornamento: a partire dalla 4.7.2 qualche scintilla luminosa si è rotta anche in alcuni casi
Quindi più tardi tramite hook lo ricolleghiamo a image/svg+xml
. È lo stesso usato in altre risposte, ma innanzitutto lo blocchiamo nel nostro caso specifico per eliminare gli effetti (è un file SVG); possiamo fare affidamento sulla lettura $data['ext']
(dovrebbe essere più economico della funzione per ottenere informazioni sui file come solo un confronto e un accesso array / hash).
Aggiornamento: a partire dalla 4.7.2 $data['ext']
non è sempre impostato, quindi ora se la sua lunghezza è <1 estrarre (potenzialmente non sicura) l'estensione dal nome file usando
strtolower(end(explode('.', $filename)))
. Il motivo per cui sto davvero combattendo usando FileInfo è che essenzialmente fare affidamento su un'estensione PHP è troppo opaco e non funzionerà sempre per tutti (specialmente non quelli che compilano senza o senza accesso per abilitare le estensioni se non è lì). Vorrei qualcosa che funzioni al posto di un'estensione. Non si tratta più di avere le informazioni corrette, quindi per coloro FileInfo
che si fidano dell'output e hanno l'estensione (credo che sia l'impostazione predefinita in 5.6+) dovrebbe funzionare. Inoltre, poiché si tratta di un plug-in, non si tratta di modificare il core, è possibile disattivare questo codice o annullare la registrazione dell'hook.
https://github.com/Lewiscowles1986/WordPressSVGPlugin
Vedere
Altre soluzioni alternative
Consentire i caricamenti non filtrati è una soluzione orribile perché, come altri hanno già detto, il collegamento a questa discussione potrebbe caricare file php tramite l'uploader multimediale (è un male e se lo fai, dovresti fermarti e pensare!)
Forzare ogni file attraverso qualsiasi funzione senza controlli (ironicamente se ne hai image/
il tipo MIME non puoi semplicemente avere un semplice controllo ext). Ciò ha il potenziale per creare effetti di portata molto più ampia per risolvere un problema relativamente di nicchia e introduce più lavoro in generale (attenzione al mio plugin introduce anche più lavoro per gli utenti amministratori per far funzionare l'interfaccia utente dei media di amministrazione)
Se avessimo lasciato il mime come application / svg + xml e avessimo semplicemente filtrato i tipi di mime che l'immagine avrebbe caricato, ma se AFAIK avesse bisogno di correzioni da utilizzare come immagine in primo piano ecc. C'è ancora molto lavoro da fare per garantire un'esperienza SVG universale, quindi ho scelto di scegliere con cura le battaglie.
Spero che sia di aiuto.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
awp-config.php
. Questo non è sicuro per la produzione.