I need to deliver a file
example.com/realpathofthe/file.zip
to customers but I don't want to communicate the same URL to all customers (they could easily share URL to non-customers, and it would be difficult to track if the product is delivered or not). Instead, I'm generating a random string in PHP and want to share such URL:
example.com/download/djbf6xu83/file.zip
which will be different for each customer.
Question: should I generate symlinks for each customer to link the random string path to the path of the actual file on server?
Or use a RewriteRule in .htaccess for this? But then if done this way (ie rewrite /download/*/file.zip
to the actual file), all random strings would link to the same file. This is not good because a non customer could generate a download link himself.
How to handle this correctly?
Note: I'd like to avoid if possible that PHP has to process the gigabytes of files data (through file_get_contents()
) before delivering it. I thought (please correct me if I'm wrong) that it would be lighter for the server to let Apache distribute the file.
There can be many ways to approach this problem. Here's what I suggest.
Make a file, say /download.php
and pass in a download code as an HTTP GET variable. So it'd say something like /download.php?code=abcdef
, meanwhile generate and store codes for each customer in a database, and check if the code exists when someone opens download.php
. Easy to track, and not creating a complex directory structure.