[php] file download

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 21-09 19:29
Ik heb een scriptje geschreven die een file zoekt op de server hd en die aan de client aanbied, met de juiste bestandsnaam. Dit omdat ik bestanden op een andere manier opsla.

Als ik de download naar de HD save en dan open, dan gaat alles prima. Doe ik echter meteen bij de popup in de browser OPEN, dan opent hij het juiste programma, bijvoorbeeld ADOBE READER, maar kan vervolgens het bestand niet lezen / vinden.

Het lijkt erop dat er iets fout zit in de headers, maar ik kan hier via google niets over vinden. Weet iemand waar het aan ligt?

PHP:
1
2
3
4
5
6
7
8
9
10
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=" 
             . $value['bestandsNaam'] . "." . $value['extentie']);
header("Cache-Control: ");
header("Pragma: ");
header('Expires: 0'); 
readfile($_SETTINGS['document_root'] . "menu/bestanden/upload/" . 
            get_mappenstructuur($USER_INPUT['int_id']));
header ("Connection: close");

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Moet je bij Content-Disposition niet ook een bestandsgrootte opgeven? :o

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

hehe, vind je het gek.. je add na alle date nog een header
dus waarschijnlijk krijg je onderaan je file een error van php waardoor de file corrupt is

Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 21-09 19:29
Nee, dat is het niet, als ik die connection close weghaal, dan werkt het nog steeds niet.

Daarbij komt dat als ik het bestand naar de HD save, dat ik het vervolgens wel kan openen.

Als ik de headers weglaat, dan kan een image bijv wel door IE gelezen en weergegeven worden. Een PDF daarentegen moet door een extern programma (adobe acrobat reader) geopend worden, en die kan het vervolgens niet meer lezen??

[ Voor 39% gewijzigd door maartenvdv737 op 10-09-2004 17:34 ]

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik heb daar zelf ook wel problemen mee gehad. Dat een bestand gewoon niet direct te openen is via een php download.

Nooit kunnen oplossen dus ik wens je veel succes in je zoektocht :)

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Op deze pagina die ik een tijdje geleden gemaakt heb maak ik ook gebruik van Content-Disposition: attachment om een file via een prompt beschikbaar te maken, en bij mij werkt het gewoon goed.

Je zou eens kunnen proberen of deze bij jou wel werkt. In dat geval is dit de code die er achter zit:

PHP:
1
2
3
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: attachment; filename=netinstall.vbs;");
  echo $script;


Waarbij $script de body bevat van het bestand dat opgestuurd wordt.

Als dit nog niet werkt dan denk ik dat het aan je browserinstellingen ligt.

Overigens kloppen je headers niet echt: misschien dat dat het probleem vormt. Namelijk:
1) Je gebruikt 2 keer Content-Type. Ik weet niet wat Apache daarmee doet, maar waarschijnlijk overschrijft de tweede de eerste. Of de client krijgt ze allebei.
2) Cache-Control en Pragma zijn allebei leeg (?).
En weet je zeker dat die caching directives wel echt nodig zijn?

Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Zou ik die codes eens mogen hebben van jou? ik vind dit namelijk wel een interessant scriptje >:)

[ Voor 65% gewijzigd door spone op 10-09-2004 22:30 ]

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Verwijderd

Als je wil mag je gewoon deze gebruiken. Al het werk wordt in principe door de client gedaan dus de serverload is miniem.

En als je het ding wilt verbeteren of uitbreiden, ik ben één en al oor B).

Edit: In dit topic heb ik al eens geprobeerd 'm te pluggen hier op GoT :p.

[ Voor 32% gewijzigd door Verwijderd op 11-09-2004 00:53 ]


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 21-09 19:29
Als ik jouw headers gebruik, werkt het inderdaad prima met een .vbs bestand, maar nog steeds niet met een jpg of pdf...

Ik blijf er iig vrij nuchter onder....


  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 19-09 11:55
http://www.onaje.com/php/article.php4/40

Probeer deze eens, ik heb hier namelijk nooit problemen mee gehad :)

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

maartenvdv schreef op 11 september 2004 @ 12:02:
Als ik jouw headers gebruik, werkt het inderdaad prima met een .vbs bestand, maar nog steeds niet met een jpg of pdf...
dit klinkt een beetje als een probleem met binary bestanden
vbs is ascii, jpg en pdf zijn binary

misschien met fopen lezen?

Blog [Stackoverflow] [LinkedIn]


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 21-09 19:29
Fopen helpt ook niets.

Het rare is dat ik hetzelfde script, met dezelfde te downloaden files op 2 servers heb gezet. Op de ene werkt het wel, op de andere niet. Met firefox werkt het trouwens altijd, met IE dus op 1 server niet.

Het komt er op neer dat het niet echt een IE bug kan zijn, aangezien beide servers anders reageren. Het zit ook niet in de code, want die is ook identiek...

Het enige verschil in de headers op beide servers is dat 1 server een set-cookie header heeft, maar die kan ik niet weghalen...

Ik blijf er iig vrij nuchter onder....


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 21-09 19:29
Het probleem zit hem trouwens absoluut in het cachen van de files.

Als ik een txt (ascii) file toevoeg, dan krijg ik namelijk de foutmelding bij het openen van notepad dat de file niet bestaat in Temporary Internet Files map.

Ik heb gelezen dat IE 2 verbindingen maakt bij een file-download. 1e verbinding om de file naar de cache te schrijven en de tweede om hem aan de client aan te bieden. Het schijnt dat als de cache headers niet goed zijn, de browser na de 1e verbinding de temp file verwijdert. Op het moment dat notepad zich dan opent is de file er niet meer.

Ik heb veel verschillende headers geprobeerd met content-cache en Pragma, van Private tot 0.

Haalt allemaal niets uit...

Ik blijf er iig vrij nuchter onder....


  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 19-09 11:55
Heb je dat voorbeeld scriptje van m'n vorige post al gezien? Daar staat hoe die 'caching bug' opgelost krijgt:

PHP:
1
2
3
4
5
6
7
8
9
10
// fix for IE catching or PHP bug issue
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
// browser must download file from server instead of cache

// force download dialog
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Wel met fopen(....., 'rb'); geopend?

Blog [Stackoverflow] [LinkedIn]

Pagina: 1