You could have a 'download manager' type script, which updates a database, or writes to a file everytime it hands out an item. The script would have to take in a POSTed or GEted variable to tell it which file to download, update the record, then output the file with header(), fopen(), etc ...