Using X-Sendfile with Apache/PHP
Asked Answered
H

2

21

I can't seem to find much documentation on X-Sendfile or example code for PHP (there is some rails code).

Anyone used it before and would mind giving a quick snippet of code and a brief description?

Hygrometer answered 17/9, 2008 at 5:7 Comment(0)
D
31

X-Sendfile is an HTTP header, so you want something like this:

header("X-Sendfile: $filename");

Your web server picks it up if correctly configured. Here's some more details:

http://www.jasny.net/articles/how-i-php-x-sendfile/

Darwen answered 17/9, 2008 at 5:11 Comment(2)
I followed the tutorial on the link, but when I download file with mod-xsend I get file size Binary File (0 bytes)... What am I doing wrong? UPDATE: have figured it out myself. I needed to add #enable sending files from parent dirs -> XSendFileAllowAbove On into my .htaccess file, sice my downloads are out of the webroot folder.Flemming
For future readers: XSendFileAllowAbove has been deprecated; use XSendFilePathMotoneuron
A
3

If tweaking the web server configuration is not an option, consider PHP's standard readfile() function. It won't be quite as fast as sendfiling, but it will be more widely compatible. Also note that when doing this, you should also send a Content-Type header at the very least.

Atterbury answered 17/9, 2008 at 6:2 Comment(1)
Please note that if you use readfile(), you will have no support for resuming or partial downloads (Request-Range) or client caching (i.e., returning a 304 Not modified when needed) (or you will need to handle all this yourself with PHP code -- there should be some code snippets around that exactly do that).Smallish

© 2022 - 2024 — McMap. All rights reserved.