[PHP] pdf outputen naar (IE) browser

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

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
ik word helemaal wappie van die browsers,

ik heb nu echt alles geprobeerd!

ik heb op een win2000 server in de htmlroot een pdf filetje staan en een php pagina met php4.2.1(cgi).
code:
1
2
3
4
5
6
7
8
9
10
<?
$file_name="my.pdf";
$fp=fopen($file_name, "r");
header( "Content-type:application/pdf\n
Content-Disposition: inline;filename=\"mypdf.pdf\"\n
Content-length:".(string)(filesize($file_name)));
fpassthru($fp);
fclose($fp);
exit;
?>

dit werkt prima in bv netscape maar in IE krijg ik een vette berg garbage.

ook al fopen met rb gedaan en ook al die pdf file aangeroepen met include() en ook al gewoon ge-echo'd en ook al met/zonder of gedeeltelijke headers geprobeerd maar het wil niet netjes "inline" openen,
saven als attachement is me wel al gelukt maar dat wil ik niet.

wat de hell is going on,
op php.net had ene zack@php.net geschreven dat je passthru moet gebruiken maar dan gaat browser een uur nix doen.

weer iemand anders zij dat het ook fout ging als je sessies in je page gebruik maar die gebruik ik dus hier niet.

i'm lost :'( boohoo

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:34
Je moet sowieso voor elke header een aparte header-call doen (in verband met het scheiden van header lines; het zou nu stiekum goed kunnen gaan, maar het kan ook best dat die header lines gescheiden moeten worden door \r\n ipv \n).

Met een beetje mazzel worden alle headers dan wél goed door alle browsers herkend.

Verder zou passthru en fpassthru weinig verschil moeten maken.

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
don't mind the headers, die had ik tot nu toe ook gescheiden maar op een gegeven moment alles proberen.

ik weet al iets meer,

ik had in mijn orginele code een formpje zitten die je eerst moet invullen voordat je de pdf krijgt en het gaat eigenlijk fout NA de submit.

kijk, dit werkt als een zonnetje:
code:
1
2
3
4
5
6
7
8
<?
$file_name="my.pdf";
header("Content-type:application/pdf");
header("Content-Disposition: inline;filename=\"mypdf.pdf\"");
header("Content-length:".(string)(filesize($file_name)));
header("location: $file_name");
exit;
?>

en hier gaat het fout:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
if($_POST["submit"]){
    $file_name="my.pdf";
    header("Content-type:application/pdf");
    header("Content-Disposition: inline;filename=\"mypdf.pdf\"");
    header("Content-length:".(string)(filesize($file_name)));
    header("location: $file_name");
exit;
}
?>
<form method=post>
<INPUT TYPE="submit" name=submit value=bbb>
</form>

how about that?

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Die headers zijn wel degelijke relevant, want zoals Soultaker al vermoedde is het scheidingsteken voor HTTP headers geen \n, maar CRLF (\r\n dus).

Het is niet de oorzaak van je probleem, maar wel iets wat je moet aanpassen. Om dergelijke details niet zelf af te moeten handelen moet je gewoon de standaard functionaliteit gebruiken (vervang dus niet de \n door de \r\n :P ).

edit: hum, volgens mij had je daar net nog geen losse headers staan ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
Op vrijdag 12 juli 2002 20:00 schreef mbravenboer het volgende:
...
edit: hum, volgens mij had je daar net nog geen losse headers staan ;) .
klopt,
omdat ik anders 10 replies ga krijgen over hoe lelijk die header wel niet is terwijl het daar nix mee te maken heeft ;)

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
update:

bij de submit versie:

in IE 6 gebeurd er nix,
in IE5.5 krijg ik de melding:
could not display file, file is damaged or corrupt,
in NS 4.7x werkt het gewoon.

bij de niet_submit versie in alle browsers wel ok.

:?

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:34
PHP genereert niet stiekum een of andere warning/error die de content verneukt?

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
Op vrijdag 12 juli 2002 20:09 schreef Soultaker het volgende:
PHP genereert niet stiekum een of andere warning/error die de content verneukt?
ja en nee,
als ik error op E_ALL zet krijg ik een notice vanwege die $submit maar als ik daar isset voorzet hou ik geen errors over maar nog wel steeds het probleem.

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • HGM
  • Registratie: April 2000
  • Niet online

HGM

Krijg je dit altijd. Dus ook als je IE afsluit en in een nieuw venster de URL direct aanroept?

Edit:
PHP:
1
<?header("Content-type: application/pdf");header("Content-Length: $len");header("Content-Disposition: inline; filename=XXX.pdf");print $buf;?>

Zo gaat het hier iig altijd wel goed.

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
Op vrijdag 12 juli 2002 20:19 schreef HGM het volgende:
Krijg je dit altijd. Dus ook als je IE afsluit en in een nieuw venster de URL direct aanroept?
ja, het lijkt me geen cache probleem.

nogmaals,
het gaat alleen fout na een submit,
als ik die if(submit) regel weghaal werkt het als een zonnetje.

echt wieurd

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


Verwijderd

if($_POST["submit"]){
$file_name="my.pdf";

Zit er voor deze $file_name niet stiekem een tekentje wat de browser output?
maw dat netscape op basis van de content zelf de juiste beslissing neemt en IE afhankelijk is van die headers die hij krijgt na een/de spatie en dus overslaat...

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
ben al weer wat verder,
onderstaande code werkt NIET,

maar zodra je POST overall door GET vervangt werkt het WEL!!

is dit logisch?? :?:?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
error_reporting(E_ALL);

session_start();
if (!isset($_SESSION['download'])) {
    @$_SESSION['download'] = $_POST['download'];
} 

if(isset($_POST["download"])){
    $file_name=$_SESSION['download'];
    header("Content-type:application/pdf");
    header("Content-Disposition: inline;filename=\"mypdf.pdf\"");
    header("Content-length:".(string)(filesize($file_name)));
    header("location: $file_name");
exit;
}
?>
<form method=post>
<INPUT TYPE="submit" name=download value="mypdf.pdf">
</form>

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


Verwijderd

IE verwacht het op een iets andere manier als netschaap
PHP:
1
<? $browser = BrowserInfo(); // nettere output van get_browser()    if (eregi("ie", $browser["browser"]))    {      $mime = "application/octetstream";      $disp = 'inline';    }    else if (eregi("opera",$browser["browser"]))    {      $mime = "application/octetstream";      $disp = 'inline';    }    else    {      $mime = "application/octet-stream";      $disp = 'attachment';    }     $fp = @fopen($file,"rb");    if ($fp!=NULL)    {      header('Content-Type: '. $mime);      header('Content-Disposition:  '.$disp.'; filename="'.$filename.'"');      if(eregi("ie", $browser["browser"])) header('Cache-Control: must-revalidate, post-check=0, pre-check=0');      header('Pragma: no-cache');      header('Expires: 0');          fpassthru($fp);      return true;    }?>

Eventueel kun je de $mime replacen met het juiste mime type, als je die weet voor het filetype wat je probeert te dumpen.

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
en hier gaat het fout:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
if($_POST["submit"]){
    $file_name="my.pdf";
    header("Content-type:application/pdf");
    header("Content-Disposition: inline;filename=\"mypdf.pdf\"");
    header("Content-length:".(string)(filesize($file_name)));
    header("location: $file_name");
exit;
}
?>
<form method=post>
<INPUT TYPE="submit" name=submit value=bbb>
</form>

how about that?
Ik denk dat het komt doordat je een pdf wilt laten zien EN een formulier eronder. Dit gaat geloof ik niet. Want hij laat een pdf viewer in en daar kan je volgens mij geen gewoon html meer onder zetten. Dit verklaart ook waaron het zonder dat form wel werkt...
Dan krijg je inderdaad een corrupte pagina.

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Op dinsdag 16 juli 2002 12:48 schreef NTGiant het volgende:

[..]

Ik denk dat het komt doordat je een pdf wilt laten zien EN een formulier eronder. Dit gaat geloof ik niet. Want hij laat een pdf viewer in en daar kan je volgens mij geen gewoon html meer onder zetten. Dit verklaart ook waaron het zonder dat form wel werkt...
Dan krijg je inderdaad een corrupte pagina.
Nee dus, want als er submitted is, exit(); ie (moet er bij de topicstarter niet ook nog een () bij?) en daardoor wordt er geen verdere output gegeven (die HTML dus)..
Pagina: 1