ContexteEcrire flux binaire au navigateur en utilisant PHP
Essayer de diffuser un rapport PDF écrit en utilisant iReport par PHP au navigateur. Le problème général est: comment écrire des données binaires dans le navigateur en utilisant PHP?
Code du travail
header('Cache-Control: no-cache private');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment, filename=climate-report.pdf');
header('Content-Type: application/pdf');
header('Content-Transfer-Encoding: binary');
$path = realpath(".") . "/output.pdf";
$em = java('net.sf.jasperreports.engine.JasperExportManager');
$result = $em->exportReportToPdf($pm);
header('Content-Length: ' . strlen($result));
$fh = fopen($path, 'w');
fwrite($fh, $result);
fclose($fh);
readfile($path);
Code de non-travail
header('Cache-Control: no-cache private');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment, filename=climate-report.pdf');
header('Content-Type: application/pdf');
header('Content-Transfer-Encoding: binary');
$path = realpath(".") . "/output.pdf";
$em = java('net.sf.jasperreports.engine.JasperExportManager');
$result = $em->exportReportToPdf($pm);
header('Content-Length: ' . strlen($result));
echo $result;
Question
Comment puis-je prendre l'étape intermédiaire de l'écriture du fichier et écrire directement au navigateur pour que le PDF soit pas corrompu?
Mise à jour
taille des fichiers PDF:
- travail: 594778 bytes
- non-travail: 1059365 octets
Merci!
Est-ce que l'ajout de tous les en-têtes que vous avez découpés à partir du premier travail? –
@Casey: Les en-têtes ont toujours été les mêmes dans les deux cas. Voir le problème révisé. –
Ahh, c'est le climat! Pas d'inquiétude, c'est normal. Ils sont toujours * bogués *;) –