if(!isset($_GET['r']) || empty($_GET['r'])){
print '<meta http-equiv="refresh" content="8;url='.$_SERVER['PHP_SELF'].'?r=1" />';
}
Prova qualcosa del genere ...
Con il tuo esempio non funzionava perché la variabile $r la imposti = 1, ma quanda il refresh si esegue l'interpretazione della pagina da parte del server ricomincia da zero perdendo il valore = 1 per $r, dunque parti in un loop infinito.
Se invece ricarichi la pagina passandogli un parametro nell'URL con $_GET puoi accederci e sapere se devi fare il refresh oppure é già stato fatto.