Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[php]Download headers geen resultaat

Pagina: 1
Acties:

Onderwerpen


  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Topicstarter
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".

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


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En heb je de letterlijk ontvangen response al bekeken?

{signature}


  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Topicstarter
Ik heb even gekeken, maar ik zie niet 123 waar ik dat bij IE kan terug vinden. Net dus maar Chrome en Safari geinstalleerd en daar wordt het bestand dus wel gewoon ter download aangeboden 8)7

Het zal dus een bug zijn in IE (9), maar nu nog een oplossing/work-around

[ Voor 5% gewijzigd door telefoontoestel op 18-04-2011 12:46 ]

telefoontoestel


  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Topicstarter
Ik had dat topic idd ook al gelezen en de headers uitgeprobeerd. De enige verschillen zitten in de content-type (daar octet-stream) en de description (file transfer). Als ik die toepas, dan gebeurt er in IE nog steeds niets. Ook heb ik geprobeerd om de output buffer te starten voordat ik de headers aanroep.

Het vreemde hieraan is wel dat ondanks dat ik geen ob_end_flush oid gebruik (dus ob is nog steeds actief) dat de data wel wordt weergegeven

[edit]
Daarnet ook eens geprobeerd om het bestand eerst op te slaan en daarna de readfile methode exact over te nemen waarna ik het bestand weer verwijder (unlink). Ook nu wordt de output op het scherm weergegeven ipv ter download aan te bieden. |:(

[ Voor 22% gewijzigd door telefoontoestel op 18-04-2011 13:09 ]

telefoontoestel


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:48

MueR

Admin Devschuur® & Discord

is niet lief

Het niet aanroepen van ob_end_flush (of andere flush functies) is ook niet nodig, dat doet PHP automatisch aan het einde van z'n script. Post nou eens de echte response headers die je binnenkrijgt in IE (F12, Developer tools, net panel).

Anyone who gets in between me and my morning coffee should be insecure.


  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Topicstarter
Is het F12 menu misschien verandert in IE9? Ik kom de genoemde opties niet tegen namelijk. Verder alle opties en menus langs gegaan, maar kom geen referenties naar de headers tegen

[edit]
Gevonden, moest nog op vastleggen drukken bij netwerk.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sleutel Waarde
Antwoord    HTTP/1.1 200 OK
Date    Mon, 18 Apr 2011 11:32:18 GMT
Server  Apache
X-Powered-By    PHP/5.3.5
Content-Description File Transfer
Pragma  public
Expires 0
Cache-Control   must-revalidate, post-check=0, pre-check=0
Cache-Control   private
Content-Disposition attachment; filename="validate.sif"
Content-Transfer-Encoding   binary
Content-Length  33130
Keep-Alive  timeout=5, max=100
Connection  Keep-Alive
Content-Type    application/gzip

[ Voor 101% gewijzigd door telefoontoestel op 18-04-2011 13:32 ]

telefoontoestel


  • Patriot
  • Registratie: December 2004
  • Laatst online: 13:27

Patriot

Fulltime #whatpulsert

Die headers zijn in ieder geval de goede (althans, ze zijn gelijk aan de headers die jij in je script zet). Ik heb je voorbeeld overigens eens getest bij mij, en ik krijg gewoon het gewenste resultaat. Heb je misschien een publieke versie van je script draaien waar wij kunnen kijken? Als hij het bij ons wel doet ligt het in ieder geval niet aan je script.

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
IE wilde vroeger nog wel eens goede headers negeren als je het bestand een keertje met de foute headers aan had geboden. Je moest dan even je cache leeggooien en IE herstarten. Ik weet niet of IE9 hier ook last van heeft, maar probeer eens je bestand te downloaden met een schone IE. Probeer desnoods even de naam te veranderen als je niet weet hoe je je cache moet leeggooien.

When life gives you lemons, start a battery factory


  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Topicstarter
Het herstarten van de browser leek in eerste instantie niet te werken. Later vond ik nog een optie onder F12 om alle caches te legen en nu werkt het dus wel. Ik weet uiteindelijk dus nog niet welke header het verschil heeft uitgemaakt, maar het probleem lijkt nu wel verholpen! :)

telefoontoestel

Pagina: 1