Вы загружаете файлы через Apache / lighttpd через схему аутентификации и авторизации PHP? - PullRequest
1 голос
/ 28 ноября 2010

Я хочу предоставить конфиденциальные файлы авторизованным и авторизованным пользователям. Часть PHP работает хорошо, и в настоящее время скрипт PHP выводит содержимое файла с соответствующими типами содержимого. Однако некоторые файлы действительно большие, поэтому мне бы хотелось, чтобы демон HTTP выполнял процесс обслуживания и просто сначала «спрашивал» PHP, может ли пользователь получить файл. Как бы я это сделал?

1 Ответ

2 голосов
/ 28 ноября 2010

Для lighttpd: http://redmine.lighttpd.net/wiki/1/X-LIGHTTPD-send-file

Для апача требуется дополнительный мод: https://tn123.org/mod_xsendfile/

Использование будет таким:

$status = authorization();

if($status){
    $file = '/tmp/bigfile.dat';
    header("X-Sendfile: $file");
    header("Content-type: application/octet-stream");
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
}

Если вы используете Apache, убедитесь, что вы также включили XSendFile в своей конфигурации Apache. В противном случае вы будете обслуживать пустые файлы. Например:

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    XSendFile on
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>
...