[PHP] PDF forceren om te downloaden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een scrippie gemaakt om een PDF te laten downloaden. Dus dat hij hem niet in de browser opent, maar vraagt of je hem wilt downloaden.

Alles werkt koel. behalve als ik hem in een keer open. Dus zonder eerst op mijn hdd op te slaan.

Dan krijg ik in Adobe de melding dat het bestand niet meer bestaat oid.

Kent iemand dit probleem? Wat kan ik fout doen? Hieronder de code:

code:
1
2
3
4
5
6
7
$len = filesize($filename);
header("Cache-control: private");
header("content-type: application/octetstream");
header("content-length: $len");
header("content-disposition: attachment; filename=".$_SESSION['id].".pdf");
$fp = fopen($filename, "r");
fpassthru($fp);

[ Voor 8% gewijzigd door Verwijderd op 08-01-2004 12:39 ]


Acties:
  • 0 Henk 'm!

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Gebruik je IIS op de server? Dan heb je waarschijnlijk binnen je vir-dir/website aanstaan dat pagina's direct moeten verlopen. Ik heb hier namelijk vaken last van gehad icm PDF documenten.

(Dit was welliswaar met ASP, maar je stuurt natuurlijk op dezelfde manier je content.)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zou dat het probleem zijn? Lijkt me sterk. Ik heb er verder nooit last van. Afbeeldingen gaan ook goed.

Acties:
  • 0 Henk 'm!

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Klopt dat ging bij mij ook goed.... alles ging goed, behalve het downloaden van pdf documenten. Nadat ik de expire op bijv. 5 minuten had gezet, werkte het ineens wel weer.....

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Waar zou ik dat in kunnen stellen dan? En kan dat ook voor een bepaalde map?
Ik draai IIS. Bedankt voor elke tip.

Acties:
  • 0 Henk 'm!

Verwijderd

Iets algemener (allerlei browsers):
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
//invoer:
// - $disp_name: suggestie bestandsnaam na downloaden
// - $filename : bestandsnaam op server

$disp_att="attachment";
if (strlen($disp_name)==0) {
   $disp_name=basename($filename);
}
$disp_name=ereg_replace('[^-a-zA-Z0-9\.]','_',$disp_name);
$cont_name=$disp_name;

$isIE=((preg_match('/compatible; MSIE (\d*)/',$_SERVER['HTTP_USER_AGENT'],$matches)) && (strpos($_SERVER['HTTP_USER_AGENT'],'Opera')===false));
$isIE6=(($isIE) && ($matches[1]>5));

if ((!$isIE) || ($isIE6)) {
   $disp_name="\"".$disp_name."\"";
}

if (($isIE) && (!$isIE6))   {
    $cont_type="application/download";
} else {
    $cont_type="application/octet-stream";
}

$len = filesize($filename);
header("Cache-control: private");
header("content-length: $len");
header("Content-Disposition: ".$disp_attach_txt."; filename=".$disp_name.";");
header("Content-Type: ".$cont_type."; name=\"".$cont_name."\";");

if(!readfile($filename)) {
    //ERROR!!!
}

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 20-09 21:53
Ik zie in ieder geval 1 foutje: octetstream zou octet-stream moeten worden.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

Verwijderd

$_SESSION['id]

Dat zou toch wel een vette parse error moeten geven, denk je ook niet?

Gebruik eens een editor met syntax highlighting, dan zie je zoiets een stuk sneller.
Pagina: 1