Tengo un fragmento en mi archivo PHP de funciones que me permite cargar archivos SVG. Desde la actualización a la última versión de WP hoy, ya no puedo cargar svgs. También probé un segundo fragmento de código del sitio web de trucos CSS y tampoco funciona.
¿Alguien sabe a) qué pudo haber causado esto con la última actualización yb) ¿Alguien sabe una solución alternativa?
Aquí está el código que normalmente uso:
function svg_mime_types( $mimes ) {
mimes['svg'] = 'image/svg+xml';
return $mimes;}
add_filter( 'upload_mimes', 'svg_mime_types' );
Muchas gracias
Pablo.
define( 'ALLOW_UNFILTERED_UPLOADS', true );
awp-config.php
. Esto no es seguro para la producción.'svg' === strtolower($filetype['ext']);
e introduzca más trabajo en caso de que no se necesite trabajo (principalmente) o el archivo no sea del tipo svg ...Parece que esto podría estar relacionado con este ticket https://core.trac.wordpress.org/ticket/39552 , parece que algo se rompió en 4.7.1
fuente
Nadie parece haber trabajado con lo que es y eso es una lástima, así que así es como lo manejé ...
Historia / antecedentes
Creé un cargador de SVG en 2015 basado en un artículo de CSS-Tricks que analizaba lo que era. También conseguí que la cuadrícula funcionara para la vista previa de la imagen, y usé algunas otras correcciones. Complemento simple (los complementos de tipo de archivo IMO deben ser simples)
Solución
Hubo algunos cambios para 4.7. El verdadero PITA era que para los
image/
tipos mime WP ahora está usando GD en las imágenes. Para omitir esto, configuré lasvg
extensión para usarapplication/svg+xml
para que GD no se meta con el archivo.Actualización: a partir de 4.7.2, una chispa brillante también se rompió en algunos casos
Luego, a través de un gancho, lo conectamos nuevamente
image/svg+xml
. Es el mismo que se usa en otras respuestas, pero primero lo bloqueamos a nuestro caso específico para eliminar los efectos (es un archivo SVG); podemos confiar en la lectura$data['ext']
(debería ser más barato que la función para obtener información del archivo como solo una comparación y un acceso de matriz / hash).Actualización: a partir de 4.7.2
$data['ext']
no siempre se establece, por lo que ahora si su longitud es <1 extracción (potencialmente insegura) extensión del nombre de archivo usandostrtolower(end(explode('.', $filename)))
. La razón por la que realmente estoy luchando con FileInfo es que, esencialmente, confiar en una extensión de PHP es demasiado opaco y no siempre funcionará para todos (especialmente para aquellos que compilan sin o sin acceso para habilitar extensiones si no está allí). Me gustaría algo que funcione en lugar de una extensión. Ya no se trata de tener la información correcta, por lo que para aquellos que confían en la salidaFileInfo
y tienen la extensión (creo que es predeterminada en 5.6+) debería funcionar. Además, debido a que es un complemento, no está modificando el núcleo, puede desactivar este código o anular el registro del gancho.https://github.com/Lewiscowles1986/WordPressSVGPlugin
Ver
Otras soluciones
Permitir cargas no filtradas es una solución horrible porque, como otros han dicho, vincular a este hilo la gente podría subir archivos php a través del cargador de medios (eso es malo y si lo haces, ¡deberías detenerte y pensar!)
Forzar cada archivo a través de cualquier función sin controles (Irónicamente, si tiene
image/
el tipo mime, no puede tener un simple control de extensión). Esto tiene el potencial de crear efectos de alcance mucho más amplio para resolver un problema relativamente nicho e introduce más trabajo en general (advertencia mi plugin también introduce más trabajo para que los usuarios administradores obtengan la interfaz de usuario de medios de administración para trabajar)Si dejáramos el mime como application / svg + xml y simplemente filtramos los tipos de mime, la imagen se cargaría, pero AFAIK requeriría soluciones para usarlas como imagen destacada, etc. para elegir batallas con cuidado.
Espero que esto ayude.
fuente