alcune note:
- se il file è accessibile da web e non hai altra possibilità, è "sufficiente" usare un percorso non facile da individuare e non pubblicare il link da nessuna parte, fermo restando che se uno lo indovinasse potrebbe comunque scaricarlo (ma se usi un path con caratteri casuali o cose del genere diventa difficile);
- se non vuoi che neanche chi scarica il file conosca il percorso reale (potrebbe "dirlo" ad altri) devi usare un wrapper php, niente di complicato: il percorso reale - difficile da individuare - non lo dici a nessuno, agli utenti loggati dai un path tipo "/download/download.php" e nel file download.php non fai altro che mettere <?php print(file_get_contents('...percorsorealedelfile.. .')); ?>; per questa soluzione esistono anche codifiche più raffinate, comunque;
- se puoi accedere alle impostazioni del server si possono proteggere alcune cartelle da accessi esterni (file ".htaccess" in apache per esempio: se vuoi vedi forum in merito)
- se hai la possibilità di mettere il file al di fuori della web root, fallo e poi usa una soluzione con un wrapper