Il problema non e' nella stampa, ma nell'algoritmo. La tua elaborazione prosegue finche' il numero decimale e' maggiore di zero, ma l'unica modifica che fai a quel numero e' dividerlo per 2. Ora, e' evidente che nessun numero maggiore di zero diventa zero solo a forza di dividerlo per due (l'elaborazione termina comunque quando il numero diventa sufficientemente piccolo perche' venga considerato zero dall'approssimazione), quindi devi fare il controllo sulla parte intera di $dec.
Codice PHP:
function mybin($dec) {
$bin = '';
while ( intval($dec) > 0 ) {
$bin = $dec % 2 . $bin;
$dec /= 2;
}
return $bin;
}
echo mybin(8);