Os arquivos SVG não são enviados desde a atualização mais recente do WP

16

Eu tenho um trecho no meu arquivo PHP de funções que me permite fazer upload de arquivos SVG. Desde a atualização para a versão mais recente do WP hoje, não posso mais fazer upload de svgs. Eu também tentei um segundo trecho de código do site de truques de CSS e isso não funciona.

Alguém sabe a) o que pode ter causado isso com a última atualização eb) Alguém sabe de uma solução.

Aqui está o código que eu uso normalmente:

function svg_mime_types( $mimes ) {
   mimes['svg'] = 'image/svg+xml';
   return $mimes;}
add_filter( 'upload_mimes', 'svg_mime_types' );  

Muito obrigado

Paulo.

    
por Paul12_ 11.01.2017 / 22:16

3 respostas

16

No WordPress 4.7.1 foi introduzida uma alteração que verifica o tipo mime real de um arquivo carregado. Isso interrompe o upload de tipos de arquivo como SVG ou DOCX. Já existem tickets para esse problema no WordPress Core, onde você pode ler mais sobre isso:

  • Alguns arquivos que não são imagens não são enviados após o 4.7.1 ( enlace )
  • Suporte para upload de SVG quebrado em 4.7.1 ( enlace )

Uma solução alternativa temporária e recomendada (para o tempo até o problema ser corrigido) é o seguinte plug-in:
Desativar Real MIME Check

Se você não quiser usar esse plug-in, veja a mesma funcionalidade:

add_filter( 'wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
    global $wp_version;

    if ( '4.7.2' !== $wp_version ) {
       return $data;
    }

    $filetype = wp_check_filetype( $filename, $mimes );

    return [
        'ext'             => $filetype['ext'],
        'type'            => $filetype['type'],
        'proper_filename' => $data['proper_filename']
    ];

}, 10, 4 );

Observe que esse snipped tem uma verificação de versão incluída para desativar a correção assim que o WordPress é atualizado.

Editar

O problema foi inicialmente definido para ser corrigido em 4.7.2. Mas como 4.7.2 foi um lançamento de segurança urgente , a correção não chegou a essa versão. Agora é para ser corrigido em 4.7.3.

    
por Gchtr 12.01.2017 / 19:51
5

Parece que isso pode estar relacionado a este ticket enlace , parece algo que foi quebrado em 4.7.1

    
por Mark Kaplun 12.01.2017 / 02:16
2

Ninguém parece ter trabalhado com o que é e isso é muito ruim, então aqui está como eu lidei ...

Histórico / Histórico

Eu criei um uploader de SVG em 2015 com base em um artigo CSS-Tricks olhando para o que era. Eu também tenho grade trabalhando para visualização de imagem e usei algumas outras correções. Plugin simples (plugins de tipo de arquivo IMO devem ser simples)

Solução

Houve algumas alterações para 4,7. O verdadeiro PITA era que, para tipos image/ mime, o WP agora está usando o GD nas imagens. Para ignorar isso, defini a extensão svg para usar application/svg+xml , para que o GD não mexesse no arquivo.

Atualização: a partir de 4.7.2 alguma faísca brilhante quebrou isso também em alguns casos

Depois, mais tarde, por meio do hook, retornamos ao image/svg+xml . É o mesmo usado em outras respostas, mas primeiro bloqueamos em nosso caso específico para eliminar efeitos (é um arquivo SVG); podemos confiar na leitura de $data['ext'] (deve ser mais barato que a função para obter informações de arquivo como apenas uma comparação e um acesso de matriz / hash).

Atualização: a partir de 4,7,2 $data['ext'] nem sempre é definida, por isso, agora, se o tamanho for << 1 extrair extensão (potencialmente insegura) do nome do arquivo usando %código%. A razão pela qual estou realmente lutando usando o FileInfo é que confiar essencialmente em uma extensão PHP é muito opaco e nem sempre funciona para todos (especialmente aqueles que compilam sem ou sem acesso para habilitar extensões, se não estiverem lá). Eu gostaria de algo que funcione no lugar de uma extensão. Não é mais uma questão de ter as informações corretas, para quem confia na saída de strtolower(end(explode('.', $filename))) e ter a extensão (acredito que seja padrão em 5.6+), isso deve funcionar. Também porque este é um plugin, ele não está modificando o núcleo, você pode desligar esse código ou cancelar o registro do gancho.

enlace

Veja

Outras soluções alternativas

Permitir uploads não filtrados é uma solução horrível, porque, como outros já disseram, linkar esse segmento pode fazer upload de arquivos php via media uploader (isso é ruim e, se você fizer isso, pare e pense!)

Forçando todo arquivo através de qualquer função sem checagens (Ironicamente, se você tem FileInfo no tipo mime você não pode simplesmente ter uma simples verificação ext). Isso tem o potencial de criar efeitos de alcance muito mais amplos para resolver um problema de nicho relativamente e introduz mais trabalho em geral (ressaltar que meu plug-in também introduz mais trabalho para usuários administrativos para que a interface de administração de mídia funcione)

Se deixássemos o mime como application / svg + xml e simplesmente filtrássemos os tipos MIME que a imagem faria upload, mas o AFAIK exigiria que as correções fossem usadas como imagem em destaque etc. Há mais trabalho a ser feito para garantir a experiência universal do SVG então escolhi escolher batalhas com cuidado.

Espero que isso ajude.

    
por MrMesees 19.01.2017 / 17:50

Tags