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