Ошибка X-Sendfile

Я пытаюсь отправить файлы с помощью директивы X-Sendfile в lighttpd.

Мой php-код;

header("Content-Type: application/force-download"); header( "Content-Disposition: attachment; filename=" . 's.php'); header("Content-Length: ". filesize("/home/web/domain/htdocs/download.php")); header( "X-Sendfile: /home/web/domain/htdocs/download.php"); 

(Я отправляю файл download.php только для целей тестирования)

Тем не менее, я получаю пустой файл независимо от того, что я пытаюсь. Если я изменю имя файла, я получу;

2010-08-30 18:01:14: (mod_fastcgi.c.2587) ошибка отправки файла: не удалось получить запись stat_cache для: /home/web/domain/htdocs/downloa1d.php

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

Что может быть неправильным? Что мне делать?

    Вероятно, у вас нет нужной строки в файле lighttpd.conf. Добавьте это в свой файл fastcgi.server между параметрами с помощью => стрелки:

    "allow-x-send-file" => "enable",

    Все, кроме последнего варианта, заканчиваются запятыми. Я предполагаю, что у вас уже настроен ваш fastcgi. Если вы используете другую инфраструктуру для подключения PHP к вашему серверу, я не могу вам помочь. Если у вас более одного рабочего процесса PHP, вы должны добавить этот параметр ко всем из них.

    Я должен добавить, что .php-файлы небольшие по размеру, и вывод их с помощью readfile () не приведет к вмятине. И, как я вижу, вы неправильно используете некоторые некритические заголовки. Нет такой вещи, как force-download, она будет вести себя как неизвестный тип файла. Используйте application/octet-stream . И ваш Content-Disposition также шаткий. Не только в этой странной строке. Клиент должен получить: Content-Disposition: attachment; filename="My file ♥.txt" Content-Disposition: attachment; filename="My file ♥.txt" Имя файла окружено двойными кавычками, и оно не экранировано; вместо этого это либо в UTF-8, либо в кодировке вызывающей страницы (это грязная серая область, где каждый браузер действует по-разному). Вам даже не нужно включать имя файла в безопасное место, если вас устраивает путь загрузки. Затем это будет выглядеть так: Content-Disposition: attachment Затем вы можете использовать трюк псевдокаталога, чтобы предоставить менее ошибочное имя файла: http://www.example.com/download.php/Custom%20Name.txt. Это будет работать более надежно чем этот параметр filename =, но требует больше планирования в системе ссылок. Это может потребовать от вас перенаправления.

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

    Да, я отредактировал lighttpd.conf и добавил

     fastcgi.server += ( ".php" => (( "allow-x-send-file" => "enable" )) ) 

    и использовали

     Header("X-LIGHTTPD-send-file: /path/filename"); 

    на странице проверки php. Но это не сработало. Мне потребовалось некоторое время, чтобы понять, что у меня также было определение php в

     etc/lighttpd/conf-enabled/15-fastcgi-php.conf 

    После того, как я добавил вариант там, он работал 🙂