Esto es lo que dice la documentacion oficial:
Código PHP:
<?php
//antes de PHP 4.3.0
dirname('c:/'); // devolvía '.'
//después de PHP 4.3.0
dirname('c:/x'); // devuelve 'c:\'
dirname('c:/Temp/x'); // devuelve 'c:/Temp'
dirname('/x'); // devuelve '\'
?>
Basicamente el problema está, en que si quieres obtener el dirname de un fichero que está en raíz siempre vas a obtener como resultado '\'. Si vas a redireccionar a un archivo en la raiz no uses dirname($_SERVER['PHP_SELF'])