setembro 10, 2014

Resolvendo o erro de estouro do limite de memória no upload de imagens

PHP Fatal error:  Allowed memory size of (algum número) bytes exhausted (tried to allocate (algum número) bytes) in (caminho do arquivo no servidor, exemplo: /site/pagina.php) on line (linha do código onde ocorreu o erro)

O problema acima ocorreu comigo na tentativa de upload de imagens que eram grandes o suficiente para estourar o limite de 32MB definido no parâmetro memory_limit.

A solução que encontrei foi definir o limite de memória de forma dinâmica, considerando a necessidade de processamento para cada imagem.

// Recebe informações da imagem através do comando getimagesize
$imageInfo = getimagesize("/caminhodaimagem/imagem.jpg");

// Calcula a quantidade em MB
$requiredMemoryMB = ( $imageInfo[0] * $imageInfo[1] * ($imageInfo['bits'] / 8) * $imageInfo['channels'] * 2.5 ) / 1024;
                             
 // Arredonda valor para cima
$alocar_memoria_para_imagem = ceil($requiredMemoryMB);

// Define limite de memória de acordo com necessidade da imagem
ini_set('memory_limit', $alocar_memoria_para_imagem.'M');

Um comentário:

Obrigado pelo comentário.