[PHP + PDF] Openen van PDF bestanden geeft error

Pagina: 1
Acties:
  • 361 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik open met een stukje PHP een PDF bestand dat buiten de webdirectory opgeslagen is, ik gebruik daarvoor ongeveer deze code:

code:
1
2
3
4
5
6
7
<?php
session_start();
$file=proefdocument.pdf;
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=$file");
readfile("$file");
?>


Sommige gebruikers krijgen de PDF meteen in de reader te zien en werkt het goed, anderen krijgen de opties "Openen, opslaan of annuleren" te zien van IE. Geen probleem tot dusver, maar wanneer ze op openen klikken krijgen ze de melding "Kan bestand niet openen". Wanneer ze kiezen voor opslaan kunnen ze het bestand opslaan (standaard wordt de naam van het script opgegeven, ipv de bestandsnaam die ik in de header mee geef, maar het werkt wel). Doe ik iets fout in het bovenstaande stukje code?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Misschien als je een content-length header opgeeft? Trouwens, ik neem maar even aan dat het een foutje is bij het overtikken van een versimpelde versie van je script, maar regel 3 kan natuurlijk nooit werken. :P

'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

Topicstarter
dat is een tiepvaut ja, beetje dom :P

Is die content length belangrijk dan?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 22 november 2005 @ 13:14:
dat is een tiepvaut ja, beetje dom :P

Is die content length belangrijk dan?
Ehmm hebbend die mensen acrobat wel geinstalleerd? met IE en FF plugin?

Acties:
  • 0 Henk 'm!

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 21:03
Verwijderd schreef op dinsdag 22 november 2005 @ 13:16:
[...]


Ehmm hebbend die mensen acrobat wel geinstalleerd? met IE en FF plugin?
Voor het opslaan van een PDF heb je natuurlijk geen Acrobat nodig.

Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Ik weet niet meer precies wat er nou mee was .. maar er was een bug in IE - iets met mime types die niet goed door komen met dit soort dingen.

Ik gebruik in een van mijn sites Ezpdf en met de volgende code stuur ik de pdf door:
PHP:
1
2
3
4
$ins->generatePDF($document);
header('Content-type: application/pdf');
header("Content-Disposition: attachment; filename=$doc");
echo $ins->output();

(beetje uit z'n verband gerukt, maar het is wel duidelijk denk ik).

Als ik het zo even gauw bekijk (op google) heeft het met 'attachment' in plaats van 'inline' te maken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is de bedoeling dat de PDF geopend wordt, zowiezo al vreemd dat deze gebruiker niet meteen de PDF te zien krijgt maar eerst de optie "opslaan, openen" e.d. maar dit toont wel dat het openen daarna niet goed werkt..

Jij genereert een PDF, ik open alleen het bestand maar...

Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Ik begreep dat het je om de foutmelding ging en niet dat je de file per se in de browser wilde openen. Bij mij werd in ieder geval de foutmelding in kwestie verholpen door 'attachment' in plaats van 'inline' te gebruiken.

In essentie doen we hetzelfde: een PDF file naar de client streamen. Ik genereer het misschien, jij haalt het uit een file.

Als je niets dynamisch ophoest, waarom link je dan niet direct naar de file? Dan weet je in ieder geval zeker dat iedereen hem 'inline' kan openen :) Ik zou zo gauw niet weten hoe je dit kunstje anders flikt in IE.

Op IEBlog is nog wat interessante info te vinden hierover. Dan zie je direct wat voor wazige structuur IE erop na houdt en waarom je die dialog voor je kiezen krijgt.

[ Voor 18% gewijzigd door PhoeniX- op 23-11-2005 11:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

sorted.bits schreef op dinsdag 22 november 2005 @ 13:32:
[...]

Voor het opslaan van een PDF heb je natuurlijk geen Acrobat nodig.
Hij wil em toch openen?

Acties:
  • 0 Henk 'm!

  • stappel_
  • Registratie: Augustus 2000
  • Laatst online: 20:41
je moet meer headers mee gaan geven. IE heeft daar minder problemen mee.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");

session_cache_limiter("must-revalidate");

header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"" . $filename . "\"");

Ubero: #2, Euler: #1, GOT: #1, Des: #1, Zeta: #1, Eon: #3, OGR-24: #3, OGR-25: #7,
LM: #7, AP: #5, DF: #19, D2OL: #37, SOB: #50, TSC: #63, RC5: #96


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Twee keer header "Expires"? Waar is dat goed voor?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
stappel_ schreef op woensdag 23 november 2005 @ 12:58:
je moet meer headers mee gaan geven. IE heeft daar minder problemen mee.

PHP:
1
header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
Content-Disposition: attachment zal altijd eerst een dialog tonen met de vraag wat je met de file wilt doen, meer headers of niet.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
stappel_ schreef op woensdag 23 november 2005 @ 12:58:
je moet meer headers mee gaan geven. IE heeft daar minder problemen mee.
Dat moet hij helemaal niet. Die caching headers hebben niks te maken met het al dan niet opslaan van die file. Als je een PDF wilt laten openen in de browser hoef je in princiepe alleen de mime type mee te geven, als je het wil laten opslaan geef je de Content-Disposition attachment header mee.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • stappel_
  • Registratie: Augustus 2000
  • Laatst online: 20:41
Hydra schreef op woensdag 23 november 2005 @ 15:33:
[...]


Dat moet hij helemaal niet. Die caching headers hebben niks te maken met het al dan niet opslaan van die file. Als je een PDF wilt laten openen in de browser hoef je in princiepe alleen de mime type mee te geven, als je het wil laten opslaan geef je de Content-Disposition attachment header mee.
het probleem is dat IE niet normaal is en dat `in princiepe` zoals je zegt niet bij IE werkt. de TS zeg
Geen probleem tot dusver, maar wanneer ze op openen klikken krijgen ze de melding "Kan bestand niet openen".
dat is dus wel degelijk een caching probleem met IE. ok misschien is mijn voorbeeld niet goed met attachment en had het inline moeten zijn, maar om zo te gaan bashen bedank ik voor de volgende keer dat iemand om hulp vraagt.

Ubero: #2, Euler: #1, GOT: #1, Des: #1, Zeta: #1, Eon: #3, OGR-24: #3, OGR-25: #7,
LM: #7, AP: #5, DF: #19, D2OL: #37, SOB: #50, TSC: #63, RC5: #96


Verwijderd

Topicstarter
Bedankt voor de tips, het is helaas nog niet opgelost :(

Het blijkt nu om een Windows 98SE te gaan met Adobe versie 6.0.1 (iig de laatste die voor 98 beschikbaar is). Zou dat er wat mee te maken kunnen hebben?

Trouwens, het rechtstreeks linken naar de PDF's doe ik ivm veiligheid niet, want dat zou betekenen dat iedereen toegang heeft tot de PDF's. Nu kan ik via PHP bepalen wie wel en wie niet de bestanden mogen openen aangezien ze buiten de webdir staan.

Verwijderd

Vreemd! Ik heb dit probleem een tijdje geleden gehad. Het probleem werd toen veroorzaak doordat ik session_start() aanriep. Ben toen eigenlijk nooit achter de oorzaak gekomen maar heb er workaround bedacht zodat ik de sessie niet hoefde te gebruiken.

Verwijderd

Topicstarter
Wat voor work around? want ik gebruik ook Session_start(); namelijk...

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 20:03
Toevallig zie ik net ook een vraag van iemand in mijn mailbox verschijnen over dit probleem. Als ik de session_start() eruit laat, doet hij het wel.

Zou het ermee te maken kunnen hebben dat er met de session_start() cookie-headers meegestuurd worden waarin IE zich verslikt?

Acties:
  • 0 Henk 'm!

Verwijderd

sjroorda schreef op zaterdag 26 november 2005 @ 11:25:
Toevallig zie ik net ook een vraag van iemand in mijn mailbox verschijnen over dit probleem. Als ik de session_start() eruit laat, doet hij het wel.

Zou het ermee te maken kunnen hebben dat er met de session_start() cookie-headers meegestuurd worden waarin IE zich verslikt?
Ik heb het niet tot zover onderzocht dat ik weet of het een header-probleem is. Het is in ieder geval wel een IE-gerelateerd probleem.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het lijkt erop dat zolang de extensie voor het openen van PDF's in de browser goed werkt, er niks aan de hand is. Zodra deze niet (goed) werkt, en men de vraag "openen, opslaan, anuleren" krijgt gaat het mis wanneer ze openen kiezen. De browser slaat het bestand niet goed op, waarop de PDF reader meld dat het bestand beschadigd is. Dit terwijl opslaan en vervolgens openen wel weer goed gaat.. Heel vaag allemaal..

Acties:
  • 0 Henk 'm!

  • Priet
  • Registratie: Januari 2001
  • Laatst online: 21:17

Priet

To boldly do what no one has..

Deze gaat even in m'n bookmarks, zit namelijk met exact hetzelfde probleem :)

Ik gebruik session_start() om te controleren of de gebruiker is ingelogd. Maar dat heeft als gevolg dat IE een blanco pagina weergeeft :(

Ik ben nu aan het werken aan een oplossing, die hopelijk wel bestaat :X

"If you see a light at the end of a wormhole, it's probably a photon torpedo!"


Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Ik kwam toevallig nog wat (wellicht) interessants tegen hierover:

"IE6 Error downloading PDFs over SSL"
en die linkt door naar:
"Internet Explorer file downloads over SSL do not work with the cache control headers"
Pagina: 1