Deberías usar url_encode() para tu $ruta que propagas en tu link .. sino, tendrás problemas con esos nombres de archivos que contienen espacios (o caracteres acentuados, etc ..)
Código PHP:
echo "<a href=\"descarga.php?archivo=".url_encode($ruta)."\" onMouseOver=\"window.status='$archivo';return true\"><font face=\"Berlin Sans FB\" size=4 color=\"black\">$archivo $tama</font></a>";
A su vez en el script PHP que recibe el dato (descargar.php) no sé si tendrás que usar la función inversa: url_decode() ..
Otro detalle . .No sé para que haces ese "While(1=1)" .. Si quieres tomar la "extensión" de un archivo que viene en un string, puedes usar explode() (eso genera un array) .. usando funciones de array puedes tomar el últimio elemento con un "end()".
Código PHP:
$var= explode(".",$arch);
$ext=end($var);
if($ext=="PDF"){
// compones tus cabeceras HTTP y envias el archivo al buffer de salida.
}
Sobre las cabceras HTTP usadas .. no usaría.
header ("Content-type: application/force-download");
Ya lo defines con:
header ("Content-type: application/pdf");
Y si quieres que el documento se vea en línea .. usa:
header ("Content-Disposition: inline; filename=" . basename ($arch));
Un saludo,