Reputation: 10214
so i have a bunch of files, some can be up to 30-40mb and i want to use php to handle security of the files, so i can control who has access to them
that means i have a script sort of like this rough example
$has_permission = check_database_for_permission($user, filename);
if ($has_permission) {
header('Content-Type: image/jpeg');
readfile ($filename);
exit;
} else {
// return 401 error
}
i would hate for every request to load the full file into memory, as it would soon chew up all the memory on my server with a few simultaneous requests
so a couple of questions
server: apache/php5
thanks
Upvotes: 2
Views: 399
Reputation: 15989
The fastest way is when you can relay this to the webserver. The webserver can use the sendfile() call to ask the operating system kernel to directly copy from a file to the network stream. for instance when using lighttpd there is a way that PHP can signal the server to take over and do the sendfile trick:
http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file
Upvotes: 3
Reputation: 41388
readfile
is the correct way to do this. By all means don't try to read the file yourself and print it to output--that will consume excessive memory. With the readfile
function the contents of the file are buffered directly to output, taking up a trivial amount of transitory memory.
Upvotes: 6