Yo creo que lo ideal sería crear un array con range y luego mezclarlo con shuffle:
Código PHP:
<?php
$numeros = range(1, 60); //numeros entre 1 y 60
$numeros_a_mostar=30;
$numeros_a_mostar=($numeros_a_mostar>(count($numeros)-1)) ? (count($numeros)-1) : ($numeros_a_mostar);
shuffle($numeros);
for ($i=0;$i<=$numeros_a_mostar;$i++) print $numeros[$i].(($i==$numeros_a_mostar) ? ("") : (", "));
?>
Tu mezclas el array y coges los 30 primeros valores, porque quieres 30 numeros al azar, y cómo ya están mezclados, estan al azar y sin repetición.
Salu2 ;)