Te dice "Array" por qué esto:
$HTTP_POST_FILES['userfile'];
entrega un array con unos valores determinados:
$HTTP_POST_FILES['userfile']['tmp_name'] --> El nombre del archivo temporal que crea PHP al subir el archivo.
$HTTP_POST_FILES['userfile']['name'] ---> el nombre del archivo original (sin ruta alguna del "cliente")
Y otras más como 'size' y 'type' que definen tamaño del archivo y formato MIME del archivo.
De hecho ya lo estás usando ....
Por lo demás es recomendable que NO uses $HTTP_POST_FILES .. usa: $_FILES (como array superglobal que es .. te evitará problemas en configuraciónes de PHP con register_globals a OFF y además ganaras en seguridad).
Los otros problemas:
Código PHP:
$sql="INSERT INTO rutas (fecha,nombre,tamaño)";
$sql.="VALUES (NOW(),'$nombre_archivo','$tamano_archivo')";
eso así sólo no funciona .. por qué no usas la función para ejecutar esa consulta SQL que ahí haces. Te falta:
Código PHP:
mysql_query($sql) or die(mysql_error());
También te falta mover el archivo desde el directorio temporal que PHP lo deja al subir el archivo a su destino definitivo .. NO sé si omitistes esa párte de código o no .. pero en algún sitio debes hacer:
Código PHP:
move_uploaded_file($_FILES['userfile']['tmp_name'],".archivos/".$_FILES['userfile]['name]);
(suponiendo que tengas creado bajo el directorio que ejecutas ese script un directorio "archivos" y que tenga permisos de escritura suficientes (0766 o simlar)
Cuando tengas tu dato ya en tu BD .. para recuperar el archivo tan sólo debes hacer tu consulta SQL a tu BD -> obtener el registro que busques bajo el criterio de tu consulta SQL que uses y de ahí montar mínimo un link tipo:
Código PHP:
<a href="archivos/<? echo $row['archivo']; ?>">bajar $row['archivo']</a>
Un saludo,