Файл Xsendfile не найден - PullRequest
       7

Файл Xsendfile не найден

4 голосов
/ 21 сентября 2011

Я использую mod_xsendfile на Dreamhost для загрузки больших zip-файлов (50 Мб +)

У меня включен mod_xsendfile и "XSendFile on" в моем .htaccess.

Когда я даю

header('X-Sendfile: "'.$fullPath.'"');
Команда

, используя полный путь к файлу, который существует на сервере, я получаю ошибку веб-страницы не найдена.

readfile () замечательно находит файл и обслуживает его, но файлы .zip стали слишком большими для php, чтобы их можно было обработать.

Буду признателен за любую помощь, которую вы можете оказать!

Ответы [ 4 ]

3 голосов
/ 04 мая 2016

Для этого существует значение конфигурации apache / xsendfile.

В вашей конфигурации хоста вы можете просто добавить:

XSendFilePath /tmp

Где /tmp - это то место, куда вы хотите, чтобы xsendfile имел доступ. Это белый список, и я верю, что вы можете добавить более одного.

Например:

<Directory /var/www/mysite/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    XSendFile On
    XSendFilePath /tmp
</Directory>
2 голосов
/ 05 сентября 2012

У меня была такая же проблема, и я смог ее решить, поэтому, возможно, это решение подойдет вам.

Первое, что нужно сделать, - проверить журналы ошибок Apache (для меня они находятся в / etc / httpd / logs). Вот что я нашел у себя:

[Wed Sep 05 14:29:02 2012] [error] [client ?.?.?.?] (20023)The given path was above the root path: xsendfile: unable to find file: /path/to/file

Проблема была в том, что файл, который я искал, находился над DocumentRoot (для меня / var / www / html), как определено в httpd.conf.

Мое решение состояло в том, чтобы создать символическую ссылку в каталоге DocumentRoot, которая указывала бы на каталог, который содержал файл, который я хочу обслуживать. Я использовал следующую команду:

ln -s /path/to/file_dir /path/to/doc_root/file_dir

Тогда все, что мне нужно было сделать - это указать PHP-ссылку xSendFile на символическую ссылку:

header("X-SendFile: /path/to/doc_root/file_dir/file_name.ext");
0 голосов
/ 04 мая 2016
header('X-Sendfile: '.$fullPath);
0 голосов
/ 03 января 2014

Я наконец-то нашел самое простое решение для этого:

header('X-Sendfile: '.realpath(dirname(__FILE__)).'/'.$the_rest_of_path);   

Таким образом, оно отлично работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...