Help: problem with Headers to download PDF file

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
rfeio
Forum Newbie
Posts: 15
Joined: Fri Aug 22, 2008 4:23 am

Help: problem with Headers to download PDF file

Post by rfeio »

Hi,

I'm trying to implement a script where when a user clicks a link he gets a PDF file to open or save.

In my index.php page I have the following link:

Code: Select all

<a href="http://localhost/example/get_file.php">Click here to get the file</a>
And the script is in get_file.php:

Code: Select all

 
<?php
$path = '/docs/document.pdf';
$mm_type="application/pdf"; 
 
 
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");
header("Content-Type: " . $mm_type);
header("Content-Length: " . filesize($path) );
header('Content-Disposition: attachment; filename="'.basename($path).'"');
header("Content-Transfer-Encoding: binary");
 
readfile($path); 
 
exit();
?>
 
Unfortunately it's not working properly. When clicking on the link and either selecting 'open' or 'save' from the dialog box, the end result is always the same; the end file is about 1KB in size when originally it was 456KB and therefore it's damaged.

Any ideas on why this is happening?

Thanks!
rfeio
Forum Newbie
Posts: 15
Joined: Fri Aug 22, 2008 4:23 am

Re: Help: problem with Headers to download PDF file

Post by rfeio »

Ok, I've identified where the problem is.

The path was incomplete. I had to add "http://localhost/..." in order to read the file.
User avatar
requinix
Spammer :|
Posts: 6617
Joined: Wed Oct 15, 2008 2:35 am
Location: WA, USA

Re: Help: problem with Headers to download PDF file

Post by requinix »

rfeio wrote:Ok, I've identified where the problem is.

The path was incomplete. I had to add "http://localhost/..." in order to read the file.
Nonono.

Use the path as it is on the filesystem, not on the server.

Code: Select all

$path = $_SERVER["DOCUMENT_ROOT"] . '/docs/document.pdf';
Using http://localhost/docs/document.pdf means you're downloading the file from yourself, which is totally pointless because you already have the file.
Post Reply