[PHP] Forcing download of MS Word doc

Pagina: 1
Acties:

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Hoi,
Ik heb een php functie waarmee ik downloads forceer van allerlei files. De functie ziet er als volgt uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function Download( $inPath)
{
    $FilePath = basename( $inPath);
    $FileSize = filesize( $inPath);
        
    $IsIE = strstr( $_SERVER["HTTP_USER_AGENT"], "MSIE") != false;
        
    if( $IsIE)
    {
        $Parts = explode( ".", $FilePath);
        $PartCount = count( $Parts);
    }
        
    // Send headers
    $AddStr = ($IsIE) ? "" : "attachment; ";
    $AddStr2 = "";

    if( $IsIE && (($PartCount > 1) && isset( $Parts[$PartCount - 1])))
    {
        $Extention = $Parts[$PartCount - 1];
        if( $Extention == "doc" ||
            $Extention == "xls")
        {
            $AddStr2 = "%20";
        }
    }
        
    header( "Cache-Control: must-revalidate, post-check=0, pre-check=0\n");
    header( "Content-Disposition: ".$AddStr."filename=\"".$FilePath."\"".$AddStr2."\n");
    header( "Content-Length: ".$FileSize."\n");
    header( "Content-Transfer-Encoding: binary\n");
    header( "Content-Type: application/octet-stream\n");
    header( "Content-Type: application/force-download\n");
    //header( "Content-Type: application/save\n");
    header( "Pragma: public\n");

    $fh = fopen( $inPath, "rb");
    fpassthru( $fh);
}

Nu werkt dit goed met allerlei files, text, php, gif, jpeg, het werkt allemaal in zowel IE als mozilla... nu werkt het ten eerste niet met Opera kom ik net achter |:( Maargoed, dat was niet de reden voor deze topic.
IE heeft de nare neiging word documenten te openen in de browser, en ik heb al de hele avond zitten zoeken op google, maar welke headers ik ook stuur, een word doc blijft worden geopened in IE :( Het moet toch wel kunnen.. :? 'k hoop dat iemand me kan helpen, want ik wordt er een beetje 8)7 van :/

edit:

Mime types eruit gehaald... werkte niet goed :(
PS. robgee, ik mijn redenen, het nut van jou reactie zie ik niet helemaal :?

[ Voor 0% gewijzigd door ^Mo^ op 30-08-2002 01:59 . Reden: Functie weer geupdate ]

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

waarom wil je dit :?

ik wil helemaal niks automatisch downloaden! :r

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:09
_Mo_ schreef op 30 augustus 2002 @ 00:40:
IE heeft de nare neiging word documenten te openen in de browser, en ik heb al de hele avond zitten zoeken op google, maar welke headers ik ook stuur, een word doc blijft worden geopened in IE :( Het moet toch wel kunnen.. :? 'k hoop dat iemand me kan helpen, want ik wordt er een beetje 8)7 van :/
Nee, dat kan niet. Heel misschien kan het client-side (door de Word OLE (?) registratie te verwijderen) maar server-side gaat het zeker niet.

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Ik heb een tijdelijke workaround, en eigenlijk zou ik daar enorm snel weer vanaf willen. In het geval van word documenten en excel sheets stuur ik een header als deze, waar $AddStr2 "%20" is:
PHP:
1
header( "Content-Disposition: ".$AddStr."filename=\"".$FilePath."\"".$AddStr2."\n");

Nu download 'ie de doc file wel, maar dan krijg je filenamen als CAFI1OHD. om een voorbeeld te noemen. En dat is iets waar ik gewoon vanaf wil. Maar ik heb eerlijk gezegd nog geen werkende oplossing gevonden... :/
Maar als het niet mogelijk is om een word document te downloaden, hoe werkt dat dan met "save file as..."? Wordt dat dan weer client sided afgehandeld?

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
De eerste link zie ik de oplossing niet echt. Moet ik dan dit stukje:
PHP:
1
header("Content-Disposition: attachment;  filename=iamalittlehtmlfile."."html");
gaan versturen ofzo? Dan krijg ik gewoon een bestandsnaam als imalittlehtmlfile.html en dat is nou eigenlijk hetzelfde als wat ik nu heb, alleen het naampje is wat zinniger...
De tweede link werkt ook niks...
En bij PHP.net ben ik vanavond al tig keer geweest, elke keer wat nieuws toegevoegd aan de code daar gevonden...

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

_Mo_ schreef op 30 augustus 2002 @ 02:19:
[...]

De eerste link zie ik de oplossing niet echt. De tweede link werkt ook niks...
En bij PHP.net ben ik vanavond al tig keer geweest, elke keer wat nieuws toegevoegd aan de code daar gevonden...
Je moet ook je hele code weggooien, en het precies zo doen als het bij de 2e link staat.

Voorbeeld:
http://www.nvlf.nl/index....e+stoornissen%2FSpraak%2F
(klik op een van de diskettetjes)

Stop uploading passwords to Github!


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Papa Eend schreef op 30 augustus 2002 @ 02:20:
[...]


Je moet ook je hele code weggooien, en het precies zo doen als het bij de 2e link staat.

Voorbeeld:
http://www.nvlf.nl/index....e+stoornissen%2FSpraak%2F
(klik op een van de diskettetjes)
Maar wat is $filenaam dan? Is dat bijvoorbeeld alleen Nasaliteitsstoornissen of Nasaliteitsstoornissen.doc waar dus nog eens .doc achter wordt geplakt :?

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

_Mo_ schreef op 30 augustus 2002 @ 02:25:
[...]

Maar wat is $filenaam dan? Is dat bijvoorbeeld alleen Nasaliteitsstoornissen of Nasaliteitsstoornissen.doc waar dus nog eens .doc achter wordt geplakt :?
da's bij mij de bestandsnaam zonder extentie. zonder .doc dus.

Stop uploading passwords to Github!


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Papa Eend schreef op 30 augustus 2002 @ 02:27:
[...]


da's bij mij de bestandsnaam zonder extentie. zonder .doc dus.
Ik ga morgen nog wel wat proberen. Ik hb nu dat ik er %20 achter plak, dat werkt goed op zich .. de naam is nu alleen blaat[1].doc ofzo... in ieder geval bedankt :)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Probeer dit eens :

PHP:
1
2
3
4
header( "Content-type: bad/type\r\nContent-Disposition: attachment; filename=test.doc\r\n\r\n");

$filename = "d:\\web\\htdocs\\test.doc";
readfile( $filename );


Probleem bij IE 4.01 is dat er standaard geen naam voorgesteld wordt omdat de Content-Disposition tag niet ondersteund wordt.
Pagina: 1