I was working on a script that was supposed to generate PDF files on the fly and ran into the same problem as you described. MS IE has always been and will always be (?) a P.I.T.A. when it comes to following standards (I am not really sure if the header application/x- octet-steam is a standrad in order to force a download). I came up with this little helper:

<?php
$filename = "example.pdf";
$len = filesize ($filename );

if ( ( preg_match('|MSIE ([0-9.]+)|', $agent, $version ) ) || ( preg_match( '|Internet Explorer/([0-9.]+)|', $agent, $version ) ) )
{
        header( 'Content-Type: application/x-msdownload' );
        header( 'Content-Length: ' . $len );
        if ( $version == '5.5' )
        {
                header( 'Content-Disposition: filename="' . $filename . '"' );
        } else {
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
        }
} else {
        header( 'Content-Type: application/pdf' );
        header( 'Content-Length: ' . $len );
        header( 'Content-disposition: attachment; filename=' . $filename );
}
echo file_get_contents($filename);
?>

All browsers I have tested with do show the download frame (Opera, Safari, IE, Firefox, Mozilla browsers). But, as Richard already mentioned, I had to "fake" the download URL, like "http:// www.site.com/downloads/example.pdf". In the folder "downloads" I put a .htaccess file with the line "ErrorDocument 404 /link/to/my/php/ script.php".

/frank

14 jun 2006 kl. 02.19 skrev Peter Lauri:

I will try that after golf...

-----Original Message-----
From: Rafael [mailto:[EMAIL PROTECTED]
Sent: Wednesday, June 14, 2006 6:28 AM
To: php-general@lists.php.net
Subject: [PHP] Re: Setting headers for file download

        I use something like this...
   $file_len = filesize($file_name);
   $file_ts  = filemtime($file_name);
   header('Content-Type: application/x-octet-stream'); // none known
header('Cache-Control: must-revalidate, post-check=0, pre- check=0'); header('Last-Modified: '. gmdate('D, d M Y H:i:s', $file_ts) .' GMT');
   header('Content-Disposition: attachment; filename="'.
basename($file_name) .'"');
   header("Content-Length: $file_len");
   readfile($file_name);


Peter Lauri wrote:
Best group member,

This is how I try to push files to download using headers:

header("Content-type: $file_type");
header("Content-Disposition: attachment; filename=$filename");
print $file;

It works fine in FireFox, but not that good in IE. I have been googled to
find the fix for IE, but I can not find it. Anyone with experience of
this?

Best regards,
Peter Lauri

--
Atentamente / Sincerely,
J. Rafael Salazar MagaƱa

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to