É uma verificação simples, porém ninguém faz. Todos se preucupam com o tamanho do arquivo em kb ou as dimensões. Mas e a memória? Será que o PHP aguenta? Por default, o PHP pode usar 8mb por execução. Para manipular imagens isso é pouco... Geralmente se usa a GDLib para gerar thumbs, redimencionar e baixar a qualidade para não ocupar espaço em disco. Mas o peso em kb não tem nenhuma relação com a imagem "real" em memória, afinal, no disco ela está comprimida em algum formato (jpg, gif, png) e em memória é jogada ponto a ponto (bitmap).
Fiz uma imagem PNG que resultou em 96kb em disco, maravilha...
Em memória ocupava 205mb, as dimensões eram 3000 × 3000 pixels e estava em 24 bits.
A fórmula para saber o quanto uma imagem ocupa em memória é bem simples,
basta multiplicar a altura pela largura em pixels vezes os bits (8 bits, 16 bits, 24 bits, 32 bits... bits não é a paleta indexada, a paleta é em relação a compressão).
memoria = width * height * bits
Exemplo:
<?php
// arquivo a ser aberto
$file = 'test.png';
// limite de uso da memória para abrir a imagem
$limit = 8388608; // 8mb
// pega as informações sobre o tamanho da imagem
// espaço que ocupa em memória (formula: memoria = width * height * bits)
$alloc = $size[0] * $size[1] * $size['bits'];
// arquivo maior que permitido em memória, não pode ser manipulado
if ($alloc > $limit) {
echo 'A imagem não pode ser aberta na gdlib';
} else {
// abre o arquivo na gdlib :D
// gera thumbs e zaz
}
?>
Não coloque toda a memória disponível, afinal o script consome memória. Lembre-se também que ao abrir duas imagens, as duas vão estar na memória, então, sempre libere elas com as funções da GDLib antes de abrir outra.