Yo lo hago así, y me salen un máximo de páginas abajo que yo quiera:
Código PHP:
if ($numPags > 1){ ?>
<table width="100%">
<tr><td colspan="5"><br></td></tr>
<tr>
<td colspan="5" align="center">
<?php
if ($pagina > 1){
?> <a href="index.php?opcion=<?php echo $_REQUEST["opcion"]; ?>&pagina=<?php echo $pagina - 1; ?>">Anterior</a>   <?php
}
for ($i = 1; $i <= $numPags; $i++){
if ($i == $pagina){
echo "<b>".$i."</b>  ";
}else{
if (($i > $pagina - 6) && ($i < $pagina + 6)){
?> <a href="index.php?opcion=<?php echo $_REQUEST["opcion"]; ?>&pagina=<?php echo $i; ?>"><?php echo $i; ?></a>   <?php
}
}
}
if ($pagina < $numPags){
?> <a href="index.php?opcion=<?php echo $_REQUEST["opcion"]; ?>&pagina=<?php echo $pagina + 1; ?>">Siguiente</a> <?php
} ?>
</td>
</tr>
</table>
<?php } ?>