Вы раздаете файлы с помощью Apache? Тогда мы идем к вам!
Есть такой замечательный вебсервер, который гораздо лучше справляется с отдачей статики — nginx. И он понимает заголовок X-Accel-Redirect. Сценарий такой — при попытке пользователя скачать файл — вызавается файш php скрипт, который опеределяет, имеет ли право пользователь этот файл качать, если имеет — отдает этот заголовок с путем к файлу, получив такой заголовок nginx успешно отдает этот файл пользователю как результат его запроса. Подробнее — wiki.nginx.org/NginxXSendfile
Такой функционал поддерживает и lighthttpd и даже для Apache вроде есть модуль.
Оно то конечно полезная, например на shared хостинге, где нельзя поставить nginx, но я слабо представляю шаред, где не стоит safemode (можно использовать exec) и стоят mod_auth_mysql или mod_auth_cookie_mysql. А если уж ставить модули — то даже на апаче использовать mod_xsendfile проще.
А вообще — надо конечно по возможности использовать правильные инструменты, которые для этого предназначены. Например очень слабо представляю сколько нибудь серьезный файловый хостинг, где файлы отдаются apache.
Способы разграничения доступов к файлам при помощи php+mysql+apache