Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala pessoal, tudo bem?
Tenho um script em PHP que uso para redimensionar imagens.
O problema é que, aparentemente, ele não está redimensionando imagens com mais 3bm! ou com resolução muito alta.
Ele redimensiona sem problemas qualquer imagem menor que 3mb, ou com resoluções menores.
Já coloquei na página os init_set desta forma:
ini_set('memory_limit','300M');
ini_set('post_max_size','150M');
ini_set('upload_max_filesize','100M');
ini_set('max_execution_time','0');
ini_set('session.gc_maxlifetime','3600');
Creio que funciona, já que o upload de imagens grandes não gera nenhum problema. O problema está em redimensionar as imagens!
O script está aqui:
<?php
$larg = $_GET['larg'];
$alt = $_GET['alt'];
// recebendo a url da imagem
$filename = $_GET['img'];
$percent = 0.10;
// Cabeçalho que ira definir a saida da pagina
header('Content-type: image/jpeg');
// pegando as dimensoes reais da imagem, largura e altura
list($width, $height) = getimagesize($filename);
#setando as proporcoes desejadas
$largura = $larg;
$altura = $alt;
#setando a proporcao da miniatura
if($height > $width) {
$new_height = $altura;
$new_width = $width*$altura/$height;$new_width = $largura;
$new_height = $height*$largura/$width;
}
if($new_width > $largura){
$new_width = $largura;
$new_height = $height*$largura/$width;
}
if($new_height > $altura){
$new_height = $altura;
$new_width = $width*$altura/$height;
}
//gerando a a miniatura da imagem
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
//o 3º argumento é a qualidade da imagem de 0 a 100
imagejpeg($image_p, null, 100);
imagedestroy($image_p);
?>
Será que alguem consegue me dar uma luz???
>
Pra que isso ?
$largura = $larg;
$altura = $alt;
A largura e altura são recebidas por GET lá em cima.
Para inserir a imagem eu uso:
<img src="thumb.php?img=imagem.jpg&larg=100&alt=100" />
Seu script não tem nenhum retorno $largura/$altura, então por que colocar variavel com valor sendo outra variavel ?
>
Seu script não tem nenhum retorno $largura/$altura, então por que colocar variavel com valor sendo outra variavel ?
Enfim, é só trocar:
$largura = $larg;
$altura = $alt;
por
$largura = $_GET['larg'];
$altura = $_GET['alt'];
Isso não vai alterar em nada o script e também não vai resolver o meu problema.
configure o php para exibir todas as mensagens de erro
se puder também configure para gerar logs dos erros
>
configure o php para exibir todas as mensagens de erro
se puder também configure para gerar logs dos erros
Configurei o PHP para mostrar todos os erros e também gerar logs, mas ele não gera nenhum erro referente ao meu problema! Quando carrego a página com este script, nenhum erro é gerado.
apenas para confirmar, poderia postar aqui como fez as configurações para gerar os logs e para exibir os erros?
nào confunda o log do apache com o log do php.. no php.ini ou usando htaccess é possível definir um path físico para gravar logs de erros do php, que é independente do log de erros do apache ou de qualquer outro webserver que esteja usando.
poste também a versão do php, apache, sistema operacional, etc..
>
apenas para confirmar, poderia postar aqui como fez as configurações para gerar os logs e para exibir os erros?
nào confunda o log do apache com o log do php.. no php.ini ou usando htaccess é possível definir um path físico para gravar logs de erros do php, que é independente do log de erros do apache ou de qualquer outro webserver que esteja usando.
poste também a versão do php, apache, sistema operacional, etc..
Opa.
Para exibir os erros utilizei isso:
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);
Como eu faria para gerar esses logs usando htaccess ou algum outro método?
Algumas infos do host:
Versão Apache 2.2.17
Versão PHP 5.2.17
Versão MySQL 5.0.92-community
Arquitetura i686
Sistema operacional linux
Versão Perl 5.8.8
Versão Kernel 2.6.18-194.32.1.el5PAE
está ok
1. verifique se o arquivo error_log.txt possui permissões adequadas para leitura e escrita. Pode ser que não esteja gravando os logs por falta de permissões.
Para testar se as permissões estão ok, você pode forçar um erro qualquer. O erro deverá aparecer no log.
Por exemplo, para forçar um erro,
<?php
echo funcao_inexistente();
?>
pode rodar exatamente isso, apenas para gerar erro e ver se o log está gravando mesmo.
dica para configurar no .htaccess
* obviamente em "php_value error_log" você deve trocar pelo caminho físico absoluto..
Verifique também se o php está em safe_mode ou não. Apesar de que isso, acho que não tem relevância para o caso, mas verifique.
se não encontrarmos nada anormal até aqui, vamos tentar criar breakpoints no script que faz o redimensionamento.
off
se for possível atualize o php e o mysql
o recomendado é o atual php 5.3.8, pois o 5.2 está descontinuado, portanto não terá suporte ou garantia alguma.
o mysql mudou muito na parte da engine do 5.1 para o 5.5, o ganho de performance em ambiente windows passa de 500% em relação a versões anteriores.
hinom,
Muito obrigado pelas dicas, depois de fazer os testes que pediu e me toquei de uma coisa:
Eu coloco os init_set no arquivo de conexão do mysql, e incluo no index.php. As páginas rodam sempre no index.
O problema é que o arquivo onde estão os scripts de upload e redimensionamento rodam fora do index, logo ele não reconhece as configurações dos init_sets!
Então eu coloque os init_set também neste arquivo... e voilá! Funcionou perfeitamente!! Redimensionou logo depois do upload sem problemas.
No fim o problema era bem mais simples do que imaginava...
Aproveitando, você comentou sobre as versões que uso no host. Mas para atualizar, eu dependo dos administradores dele, correto? Ou eu mesmo consigo atualizar de alguma forma?
Mais uma vez, muito obrigado!!
quanto ao update no host, creio que não seja possível
há hosts mais modernos que mesmo compartilhados permitem a troca de ambientes sem comprometer outros clientes..
mas veja com o seu host e negocie.. é até melhor para eles.
talvez até eles saibam que é necessário atualizar, no entanto, depende muito da estrutura que possuem... é compreensível.
falowss
Pra que isso ?