El tema es que le deberias de agregar a esta funcion la carpeta ya que no contempla eso , aca : function dl_file($file), podrias agregar function dl_file($carpeta,$file)
en la comprobacion si existe el archivo seria:
if (!is_file($carpeta."/".$file)) { die("<b>404 File not found!</b>"); }
//Gather relevent info about file
$len = filesize($carpeta."/".$file);
$filename = basename($carpeta."/".$file); (esto definiria el nombre solamente del archivo)
$file_extension = strtolower(substr(strrchr($filename,"."),1));
y al descargar :
@readfile($carpeta."/".$file);
con eso podrias tener el asi:
www.sitio.com/descarga.php www.sitio.com/carpeta/archivo.zip (archivo a descargar)
y en carpeta un .htaccess con este contenido:
Action validacion /descarga.php
SetHandler validacion
Obiamente el acceso se debe hacer con sesiones.
Saludos y espero que te sea util.
Suerte LEO