[php] Content-type headers, PDF en Safari

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer PDF's te creeeren dmv mySQL blobs. Op XP loopt dat allemaal goed, maar een op Safari gaat het mis. Ipv. een .PDF download mogelijkheid wordt er geprobeerd een .PHP te safen. Ik heb verschillende mogelijkheden gebruikt, maar niets lijkt te werken. Dmv de PHP CHM help comments heb ik de volgende mogelijkheden in elkaar 'geramt':

code:
1
2
3
4
5
6
7
8
9
10
session_cache_limiter("");
session_write_close();
header("Cache-Control: public");
header("Content-Disposition: attachment; filename=". $fileMeta['dNaam'] .";");
header("Accept-Ranges: bytes");
header('Connection: close');
header("Pragma: public");
header("Content-length:". $fileMeta['dSize']);
echo $data;
exit;


code:
1
2
3
4
5
6
7
8
9
10
header("Cache-control: private");
header("Content-type: application/x-download");
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE"))
 header("Content-Disposition: filename=". $fileMeta['dNaam'] ."%20;"); // For IE
else
 header("Content-Disposition: attachment; filename=". $fileMeta['dNaam'] .";");

header("Accept-Ranges: bytes");
header("Content-length:". $fileMeta['dSize']);
echo $data;


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
session_cache_limiter("");
session_write_close();
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
header("Cache-control: private");
header("Content-Type: application/octet-stream"); 

if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE"))
 header("Content-Disposition: filename=". $fileMeta['dNaam'] ."%20;"); // For IE
else
 header("Content-Disposition: attachment; filename=". $fileMeta['dNaam'] .";");

header("Accept-Ranges: bytes");
header('Connection: close');
header("Pragma: public");
header("Content-length:". $fileMeta['dSize']);
echo $data;
exit;

$data bevat dus de binaire inhoud van de PDF. Ik heb even geen idee hoe het wel moet, dus vandaar maar even alle 3 de probeersels online. Iemand een idee hoe ik dit het beste aanpak? Danke.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

PHP heeft weinig met webdesign noch graphics te maken :)

Move W&G -> P&W

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

Het is een leuke verzameling maar volgens probeer je maar wat.

In principe heb je maar 1 header nodig:
PHP:
1
header("Content-Disposition: attachment; filename=". urlencode($fileMeta['dNaam']) ."");

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Die header voldoet inderdaad niet altijd. Ik heb ook niet kunnen traceren waaraan dat ligt (weinig tijd in gestoken, ook, trouwens ;)), maar ik omzeil dit probleem altijd door rewrites te gebruiken:

code:
1
2
RewriteEngine On
RewriteRule ^/download/([0-9]+)/([^/]+)$  download.php?file_id=$1&file_name=$2

Op die manier kun je naar bestanden verwijzen door een volgende url te gebruiken:
code:
1
<a href="download/169/some_file_with_a_cool_extension.cool_extension">download the file</a>
en zullen de browsers die niets doen met de 'filename' parameter alsnog "denken" dat het de downloaden bestand "some_file_with_a_cool_extension.cool_extension" heet.

edit:
Vergeet ook niet om de juiste Content-type header mee te geven. application/octet-stream is je laatste redmiddel. PDF moet (uit mijn hoofd) application/pdf zijn. Sommige browsers doen namelijk de extensie aan de hand van de Mime-type.

[ Voor 16% gewijzigd door drm op 14-07-2004 14:13 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
drm schreef op 14 juli 2004 @ 14:11:
Die header voldoet inderdaad niet altijd. Ik heb ook niet kunnen traceren waaraan dat ligt (weinig tijd in gestoken, ook, trouwens ;)), maar ik omzeil dit probleem altijd door rewrites te gebruiken:

code:
1
2
RewriteEngine On
RewriteRule ^/download/([0-9]+)/([^/]+)$  download.php?file_id=$1&file_name=$2

Op die manier kun je naar bestanden verwijzen door een volgende url te gebruiken:
code:
1
<a href="download/169/some_file_with_a_cool_extension.cool_extension">download the file</a>
en zullen de browsers die niets doen met de 'filename' parameter alsnog "denken" dat het de downloaden bestand "some_file_with_a_cool_extension.cool_extension" heet.

edit:
Vergeet ook niet om de juiste Content-type header mee te geven. application/octet-stream is je laatste redmiddel. PDF moet (uit mijn hoofd) application/pdf zijn. Sommige browsers doen namelijk de extensie aan de hand van de Mime-type.
Dank, met welke OS-browsers heb je dat allemaal getest?