[PHP] session_start() en file download

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HurrI
  • Registratie: Maart 2001
  • Laatst online: 08-05 13:08

HurrI

No fear... I is here

Topicstarter
Bovenstaande lijkt niet te werken in 1 script. Via onderstaande code haal ik een pdf file op van buiten de webroot.

PHP:
1
2
3
4
header( "Content-disposition: attachment; filename=$destfile" );
header( "Content-type: application/octet-stream" );
header( "Content-transfer-encoding: binary" );
readfile( $srcfile );


Dit werkt fantastisch totdat ik een session_start() geef. Deze heb ik nodig omdat ik wil valideren of de persoon de betreffende pdf wel mag downloaden.

Een oplossing die ik vond was het toevoegen van een ob_start() (output buffering). Omdat de server de header van de session_start al zou versturen voordat de rest van de headers verstuurd zou worden. Dit lijkt echter niet te werken.

Iemand een oplossing?

If it's just us, it seems like an awful waste of space


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Als je es met telnet of met een packetlogger kijkt, worden die headers dan ook in de verkeerde volgorde verstuurd?

Acties:
  • 0 Henk 'm!

  • HurrI
  • Registratie: Maart 2001
  • Laatst online: 08-05 13:08

HurrI

No fear... I is here

Topicstarter
Onderstaand reply headers krijg ik. De bovenste is met session_start() (die werkt dus niet) en de tweede is zonder (werkt wel).

code:
1
2
3
4
5
6
7
8
9
10
11
12
HTTP/1.1 200 OK
Date: Tue, 24 Dec 2002 15:00:51 GMT
Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.2.3
X-Powered-By: PHP/4.2.3
Set-Cookie: PHPSESSID=4fa6ef7c884385c318228a5cc5c743f2; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-disposition: attachment; filename=Mody - 1PTMW_algemeen.pdf
Content-transfer-encoding: binary
Transfer-Encoding: chunked
Content-Type: application/octet-stream


code:
1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Date: Tue, 24 Dec 2002 14:58:55 GMT
Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.2.3
X-Powered-By: PHP/4.2.3
Content-disposition: attachment; filename=Mody - 1PTMW_algemeen.pdf
Content-transfer-encoding: binary
Transfer-Encoding: chunked
Content-Type: application/octet-stream


Er zijn dus 4 headers meer bij session_start(). Zou acrobat niet overweg kunnen met 1 van de 4?

[ Voor 6% gewijzigd door HurrI op 24-12-2002 16:09 ]

If it's just us, it seems like an awful waste of space


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

verstuur eerst eens je eigen headers en daarna pas de session_start?


En je wilt ze laten downloaden of inline laten openen?

[ Voor 31% gewijzigd door LuCarD op 24-12-2002 16:05 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • HurrI
  • Registratie: Maart 2001
  • Laatst online: 08-05 13:08

HurrI

No fear... I is here

Topicstarter
LuCarD schreef op 24 December 2002 @ 16:04:
verstuur eerst eens je eigen headers en daarna pas de session_start?
Werkt niet. Bovendien krijgt de gebruiker dan altijd een download dialog ook als die persoon niet mag downloaden.

Download, anders had ik er wel inline neergezet he :P

[ Voor 10% gewijzigd door HurrI op 24-12-2002 16:08 ]

If it's just us, it seems like an awful waste of space


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Je hebt je Pragma en Cache Control waarschijnlijk niet nodig, tenminste daar ga ik van uit.

vervang ze eens, dit kan je doen dmv:
PHP:
1
2
header("Pragma","");
header("Cache-Control","");


Volgens mij is het probleem dit.....

http://www.w3.org/Protoco...2616-sec14.html#sec14.9.2
.... This directive applies to both non- shared and shared caches. "MUST NOT store" in this context means that the cache MUST NOT intentionally store the information in non-volatile storage, and MUST make a best-effort attempt to remove the information from volatile storage as promptly as possible after forwarding it.
Even when this directive is associated with a response, users might explicitly store such a response outside of the caching system (e.g., with a "Save As" dialog)
Welke browser gebruik je?
HurrI schreef op 24 December 2002 @ 16:08:
[...]

Download, anders had ik er wel inline neergezet he :P
Eens, maar je klaagde over acrobat en die heeft op dit moment er nog niks mee te maken... :P

[ Voor 91% gewijzigd door LuCarD op 24-12-2002 16:22 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • HurrI
  • Registratie: Maart 2001
  • Laatst online: 08-05 13:08

HurrI

No fear... I is here

Topicstarter
Hmm... ondanks jouw code blijven die headers gereplyed worden. Ook als ik ze direct na session_start zet.

Ik gebruik IE6, en nu ik het in NS6.2 test blijkt het daar wel te werken. Alleen krijg ik een generieke filename in het geval van netscape.

Het is acrobat die de foutmelding geeft als ik hem in IE open. Foutmelding: There was an error opening this document. The file does not exist.

If it's just us, it seems like an awful waste of space


Acties:
  • 0 Henk 'm!

  • HurrI
  • Registratie: Maart 2001
  • Laatst online: 08-05 13:08

HurrI

No fear... I is here

Topicstarter
euh... ik zie niet waarom die quote het probleem bevat.

If it's just us, it seems like an awful waste of space


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

HurrI schreef op 24 December 2002 @ 16:27:
Hmm... ondanks jouw code blijven die headers gereplyed worden. Ook als ik ze direct na session_start zet.

Ik gebruik IE6, en nu ik het in NS6.2 test blijkt het daar wel te werken. Alleen krijg ik een generieke filename in het geval van netscape.

Het is acrobat die de foutmelding geeft als ik hem in IE open. Foutmelding: There was an error opening this document. The file does not exist.
AaRRGH ik heb te lang geleden ge PHPt.....

maakte een tik fout in de syntax van de HEADER .... :(

PHP:
1
2
header("Pragma: ");
header("Cache-Control: ");


Try this.
HurrI schreef op 24 December 2002 @ 16:33:
[...]


euh... ik zie niet waarom die quote het probleem bevat.
Aangezien een sessie de optie no-store mee stuurt, en die kan problemen geven met opslaan van documenten.

[ Voor 21% gewijzigd door LuCarD op 24-12-2002 16:38 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • HurrI
  • Registratie: Maart 2001
  • Laatst online: 08-05 13:08

HurrI

No fear... I is here

Topicstarter
Tis je vergeven aangezien het werkt :P Ff zien welke van de 2 er nou in de weg zat...

Cache-control: op null zetten was voldoende.

Onwijs bedankt he :) Nu ga ik nog ff zoeken wrom ik met netscape niet de door mij opgegeven file naam krijg.

If it's just us, it seems like an awful waste of space


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Probeer eens een urlencode over de naam heen.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • HurrI
  • Registratie: Maart 2001
  • Laatst online: 08-05 13:08

HurrI

No fear... I is here

Topicstarter
Werkt niet. Wat ik trouwens nu pas zie is dat Content-disposition en Content-transfer-encoding NIET opgenomen zijn in het HTTP/1.1 protocol.

Er is een rfc die uitsluitend over Content-disposition gaat: http://www.ietf.org/rfc/rfc2183.txt

[ Voor 27% gewijzigd door HurrI op 24-12-2002 16:55 ]

If it's just us, it seems like an awful waste of space


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

HurrI schreef op 24 december 2002 @ 16:54:
Werkt niet. Wat ik trouwens nu pas zie is dat Content-disposition en Content-transfer-encoding NIET opgenomen zijn in het HTTP/1.1 protocol.
Officieel niet... maar ze werken meestal wel...

Programmer - an organism that turns coffee into software.

Pagina: 1