Falha ao criar imagens em miniatura, médias e grandes


10

Ao usar uma nova instalação do Drupal 7.10, configurei o diretório para uploads públicos sites/uploads.

Quando adiciono uma imagem a uma instância de conteúdo, carrego o original sites/example.org/files/imagename.pngconforme o esperado. No entanto, as outras imagens (miniatura, média e grande) não são criadas em sites/example.org/styles/*.

O diretório é legível e gravável pelo usuário do PHP5-FPM e, portanto, não deve haver permissões de emissão.

Por que isso acontece? Como posso corrigir isso?


Se você estiver usando nginx como servidor web você precisa de uma configuração extra no seu vhost, leia aqui para mais informações: drupal.org/node/1048570#comment-4047984
Gnuget

Respostas:


13

Certo, a resposta é de fato um pouco mais sutil do que eu imaginava. Acontece que a imagecachesubstituição do D7 precisa de alguma atenção no seu nginx vhost. Sem que os 404s sejam enviados ao Drupal para os arquivos ausentes, as imagens não são criadas - algo que eu não percebi inicialmente, pois supus que elas foram criadas no upload.

location @rewrite {
    rewrite ^/(.*)$ /index.php?q=$1;
}

location ~ ^/sites/.*/files/styles/ {
    try_files $uri @rewrite;
}

Ele precisa ser adicionado à sua definição de servidor e você deve estar pronto para rolar. Claramente, o caminho pode precisar ser alterado para sua configuração, mas para a minha era.


1
Observe que a parte @rewrite precisa ser definida adequadamente em outra parte do arquivo de configuração para que isso funcione. Dito isto, já estava na minha e isso resolveu o meu problema tão bem, por isso obrigado jvc26 :)
El Yobo

@ElYobo good point - atualizei a resposta para garantir que isso esteja claro. Graças
jvc26

Isso afetaria uma configuração de proxy reverso nginx? Eu tenho o mesmo problema e isso não parece resolver isso.
Grizly

Se você quiser que eles sejam criados no upload, drupal.org/project/imageinfo_cache faz isso #
mikeytown2

Boa pegada. Eventualmente, isso me levou a usar o arquivo de servidor recomendado do nginx em vez daquele que o DigitalOcean configura automaticamente com uma instalação Drupal com um clique.
Meglio

2

Certifique-se de verificar o caminho do sistema de arquivos público e o caminho temporário em admin / config / media / file-system

Depois que essas duas pastas são definidas com as permissões corretas, minhas subpastas são criadas automaticamente quando eu salvo um arquivo, a imagem é salva e a mensagem de erro desaparece :-)


2

No meu caso, o problema estava causando porque as imagens foram buscadas usando https,

Adicionei as seguintes linhas nas configurações de página segura para ignorar https nos caminhos dos arquivos.

*/files/*

Espero que isso ajude alguém. :)


1

Enquanto você diz que verificou as permissões, ainda é onde eu começaria, já que eu mesmo tive esse problema com frequência, e quase sempre foi um problema de permissões.

Conselho geral: Antes de tudo, vá para admin / config / media / file-system e clique em "Salvar configuração". Isso fará com que o Drupal reavalie as permissões dos diretórios definidos e fornecerá mensagens de erro se houver algum problema.

Segundo: Suponho que você tenha um apache, ou www-data ou outros usuários, que possua o servidor da web, em oposição ao usuário php? Em um sistema Linux ou Mac, sudo para esse usuário. Tentar gravar um arquivo como o usuário certo , é a melhor maneira de garantir realmente que você tenha as permissões corretas. Vá para sites / domain.com / files / e chame "echo data> new_file; cat new_file;" em um terminal. Isso verificará se você realmente pode gravar no diretório de gravação. Faça o mesmo com o seu diretório tmp. Espero que alguém possa sugerir como executar as mesmas ações em um sistema como o Windows.

Terceiro: para descartar as permissões de diretório, aplique recursivamente 777 o diretório de arquivos. Você pode restaurar mais permissões sensatas posteriormente com

find . -type d -print0 | xargs -0 chmod 755
find . -type f -print0 | xargs -0 chmod 644

Quarto: verifique se o diretório tmp possui permissões permanentes.

Quinto: pode ser necessário iniciar a depuração do código se você já o tiver descoberto.


Obrigado pelas sugestões: Já tentei o acima, nenhum erro do Drupal no sistema de arquivos é alterado, portanto, as permissões devem ser boas. Todos os processos PHP são executados como o usuário que pode gravar nesse diretório; portanto, o usuário que o servidor da Web executa como não fará diferença na capacidade de gravação. Verificaram manualmente as permissões compatíveis com a gravação. / tmp é como de costume 777, portanto, não há problemas de gravação lá. A discrepância de caminho foi resolvida foi um erro de minha parte.
precisa saber é

Como um aviso, o problema era um dos nginx config, com problemas para a passagem de 404s para o Drupal, que por sua vez acionavam a criação de miniaturas.
jvc26

1

Para completar a resposta Letharion, aqui está o método que eu usei para obter estilos de imagem em miniatura, médio ... criados.

Preciso verificar primeiro todos os pontos listados acima, sem resultado.

Então (em um sistema operacional Linux), editei /usr/local/etc/suphp.conf para alterar o umask no php , para que ele pudesse criar arquivos e diretórios com 755 permissões no máximo (era no máximo 744).

E isso definitivamente resolveu o problema. :)


0

Biblioteca de códigos GP Criar imagem em miniatura por php Quando carregamos imagens de tamanho grande no servidor. As imagens grandes carregadas levam mais tempo para serem carregadas na página da web, por isso precisamos mostrar imagens de tamanho pequeno em nossa página. A miniatura da imagem é uma solução para gerar a miniatura da imagem carregada para mostrar as imagens de tamanho necessárias em nosso site. http://codelibrary.googleplus.co.in/create-thumbnail-image-by-php/


0

Estou no Drupal 8.0.3.
No meu caso, essa pasta não é gerada na instalação.

sites/default/files/field/image

Por isso, copiei da versão mais antiga da instalação do Drupal.
Todas as imagens, incluindo miniaturas, médias e grandes, agora são exibidas.


-1

Verifique seu arquivo .htaccess no diretório raiz e de arquivos. Substitua pelo novo arquivo .htaccess, se necessário

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.