Kohana PHP içinde bir dosya indirmek için Content-Length nasıl hesaplanır?

2 Cevap php

Ben tarayıcıya bir Kohana modeli içinde bir dosya göndermek için çalışıyorum, ama en kısa sürede bir içerik-uzunluk başlığı eklemek gibi, dosya hemen indirmeye başlayın değildir.

Now the problem seems to be that Kohana is already outputting buffers. An ob_clean at the begin of the script doesn't help this though. Also adding ob_get_length() to the Content-Length isn't helping since this just returns 0. The getFileSize() function returns the right number: if I run the script outside of Kohana, it works.

Ben exit () hala tüm yıkıcı çağırır ve bir şey sonradan Kohana tarafından çıkarılan olduğunu olabilir, okumak ama ne tam olarak bulamıyorum.

Burada birisi bana yardımcı olabilir umuyoruz ...

Bu ben kullanıyorum kod parçasıdır:

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();
}

2 Cevap

Kohana ile bir dosya göndermek için çok daha basit bir yolu yoktur. Eğer kullanıyorsanız Kohana 2.x böyle bitti ...

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

Documentation

Eğer Kohana 3.x kullanıyorsanız, böyle yapılır ...

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

Documentation

3.1 ve ileri, kullanımı

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

Bazı kazı yüzden umarım birine yardımcı olur götürdü

Documentation