Chyba nastavovania header()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
luboo222
Člen | 1
+
0
-

Zdravím, narazil som na problém s nastavovaním headeru.

Error:
Cannot send header after HTTP headers have been sent (output started at C:\xampp\htdocs\storage\libs\Nette\Diagnostics\Debugger.php:630).

Zdrojový kód:

public function fileDownload($id, $httpResponse)
{
    $file = $this->connection->fetch("SELECT * FROM files WHERE id=?", $id);

    dump(BASE_DIR ."/". $file['path'] ."/". $file['name']);

    if (file_exists(BASE_DIR ."/". $file['path'] ."/". $file['name'])) {
        $httpResponse->setHeader('Content-Description', 'File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.basename($file['path'] . $file['name']));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file['path'] . $file['name']));
        ob_clean();
        flush();
        readfile($file['path'] . $file['name']);
        exit;
    }
}

Vopred ďakujem za pomoc.

JHadamcik
Člen | 47
+
0
-

Koukni se jak se používá header() funkce , konkrétně na část

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

Problém bude předpokládám tady a ne v Nette.

besanek
Člen | 128
+
0
-

Pokud nic předtím, tak minimálně ten dump ti udělá výstup.
Nejprve si přečti jak funguje http, pak manuál k header. :)

A na takovéto případy je v Nette. IResponse https://api.nette.org/…esponse.html :)

jiri.pudil
Nette Blogger | 1032
+
0
-

Dokonce můžeš použít už hotovou FileResponse, která zapouzdřuje právě stažení souboru.