Как рассчитать Content-Length для загрузки файла в Kohana PHP? - PullRequest
2 голосов
/ 05 апреля 2010

Я пытаюсь отправить файл из модели Kohana в браузер, но как только я добавляю заголовок Content-Length, файл не начинает загружаться сразу.

Теперь проблема в том, что Kohana уже выводит буферы. Ob_clean в начале скрипта не помогает, хотя. Также добавление ob_get_length () к Content-Length не помогает, так как это просто возвращает 0. Функция getFileSize () возвращает правильное число: если я запускаю скрипт за пределами Kohana, он работает.

Я читал, что exit () по-прежнему вызывает все деструкторы, и, возможно, что-то после этого выводится Kohana, но я не могу выяснить, что именно.

Надеюсь, кто-нибудь может помочь мне здесь ...

Это фрагмент кода, который я использую:

public function download() {
        header("Expires: ".gmdate("D, d M Y H:i:s",time()+(3600*7))." GMT\n");
        header("Content-Type: ".$this->getFileType()."\n");
        header("Content-Transfer-Encoding: binary\n");
        header("Last-Modified: " . gmdate("D, d M Y H:i:s",$this->getCreateTime()) . " GMT\n");
        header("Content-Length: ".($this->getFileSize()+ob_get_length()).";\n");
        header('Content-Disposition: attachment; filename="'.basename($this->getFileName())."\"\n\n");
        ob_end_flush();

        readfile($this->getFilePath());
        exit();
}

Ответы [ 3 ]

4 голосов
/ 27 мая 2010

Существует гораздо более простой способ отправить файл с помощью Kohana. Если вы используете Kohana 2.x , это делается так ...

download::force('./application/downloads/file.txt');

Документация

Если вы используете Kohana 3.x , это делается так ...

$this->request->send_file('./application/downloads/file.txt');

Документация

0 голосов
/ 04 мая 2012

В версии 3.1 и вперед используйте

Request::current()->response()->send_file(FILENAME);

Мне потребовалось немного копать, так что, надеюсь, это поможет кому-то

Документация

0 голосов
/ 05 апреля 2010

Обнаружил, что мне нужно вызвать Kohana :: close_buffers (FALSE) для очистки буфера вывода Kohana. Это был долгий поиск, но теперь это работает.

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