pq no usas is_dir() para saber si es un directorio?
ademas cuando pasas a la recursion de la fucion deberias pasar bien el nombre de la carpeta
else fun_dir($d->path.$df."/",$tab+1);
pq no usas una direccion base para utilizar direcciones aboslutas y no relativas?
$base = dirname(__FILE__); //te da la ruta completa de tu script y luego de ahi en mas le adjunas el resto

espero te sirva la ayuda