Ik wil data uit mijn database ter download aanbieden welke met gzip compressed wordt. Nu heb ik via allerlei informatie van internet een serie headers verzameld die naar verluid in alle browsers zouden moeten werken, maar op de een of andere manier wordt de informatie gewoon op het scherm gezet en niet als bestand aangeboden. Als ik de headers gewoon naar het scherm print, dan krijg ik keurig de informatie te zien die ik verwacht. Als ik naar de eigenschappen kijk staat er ook "Type : SIF-bestand" en bij grootte staat er ook "Grootte: 33130 bytes".
Bij het outputten van de headers komt er te staan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| if(headers_sent()) die($data); elseif(strpos($_SERVER["HTTP_ACCEPT_ENCODING"], "x-gzip") !== false) $MIME = "application/x-gzip"; elseif(strpos($_SERVER["HTTP_ACCEPT_ENCODING"], "gzip") !== false) $MIME = "application/gzip"; else $MIME = "application/force-download"; header("Pragma: public"); // required header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); // required for certain browsers header('Content-Type: '.$MIME); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . strlen($data)); print($data); exit; |
Bij het outputten van de headers komt er te staan:
code:
1
2
3
4
5
6
7
8
| header(Pragma: public); header(Expires: 0); header(Cache-Control: must-revalidate, post-check=0, pre-check=0); header(Cache-Control: private, false); header(Content-Type: application/gzip); header(Content-Disposition: attachment; filename="validate.sif"); header(Content-Transfer-Encoding: binary); header(Content-Length: 33130); |
telefoontoestel