Yo intentaría algo así:
Código PHP:
$valor = str_replace(array('á','é','í','ó','ú','ñ','Á','É','Í','Ó','Ú','Ñ',' '),array('a','e','i','o','u','n','A','E','I','O','U','N','_'),$valor);
$valor = strtolower($valor);
$nombreArchivo = '';
for($i=0, $t=strlen($valor);$i<$t;$i++)
{
$c = $valor[$i];
if(($c<'a'||$c>'z')&&$c!='_')
{
$nombreArchivo.='-';
}
else
$nombreArchivo.=$valor[$i];
}
}
Pero ten cuidado porque puede ser que el nombre del archivo ser repita.