I found the solution, I ended up instead of using readfile, use fopen and fpassthru. Here is the code that solved the problem
<?php $pathtofile = '/abs/path/to/file'.urldecode( $_GET['link'] ); $download = 'url/path/to/fille'.urldecode( $_GET['link'] ); $type = urldecode( $_GET['type'] ); $size = filesize( $pathtofile ); header("Pragma: private"); header("Expires: 0"); // set expiration time header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); // browser must download file from server instead of cache // force download dialog header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Type: $type"); // use the Content-Disposition header to supply a recommended filename and // force the browser to display the save dialog. header("Content-Disposition: attachment; filename=".basename($download).";"); /* The Content-transfer-encoding header should be binary, since the file will be read directly from the disk and the raw bytes passed to the downloading computer. The Content-length header is useful to set for downloads. The browser will be able to show a progress meter as a file downloads. The content-lenght can be determines by filesize function returns the size of a file. */ header("Content-Transfer-Encoding: binary"); header("Accept-Ranges: bytes"); header("Content-Length: $size"); $fh = fopen( $pathtofile , "r"); fpassthru($fh); ?> > Okay, I found a solution to part one of my questions by changing my headers, > but for some reason I am still getting a fractional download of the file. > Most commonly it's about 16.6KB of a 4MB file. The kicker is it says that it > completed successfully. > > Here is the modified code: > <?php > $download = 'url/path/to/file'.urldecode( $_GET['link'] ); > $type = urldecode( $_GET['type'] ); > $size = filesize( '/abs/path/to/file'.urldecode( $_GET['link'] ) ); > header("Pragma: public"); > header("Expires: 0"); // set expiration time > header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); > // browser must download file from server instead of cache > // force download dialog > header("Content-Type: application/force-download"); > header("Content-Type: application/octet-stream"); > header("Content-Type: application/download"); > // use the Content-Disposition header to supply a recommended filename > and > // force the browser to display the save dialog. > header("Content-Disposition: attachment; > filename=".basename($download).";"); > /* > The Content-transfer-encoding header should be binary, since the file > will be read > directly from the disk and the raw bytes passed to the downloading > computer. > The Content-length header is useful to set for downloads. The browser > will be able to > show a progress meter as a file downloads. The content-lenght can be > determines by > filesize function returns the size of a file. > */ > header("Content-Transfer-Encoding: binary"); > header("Content-Length: ".(string)($size)); > readfile("$download"); > ?> > > > I am having some trouble making it possible to download a file using the > > header function. The problems are: (1) I get the dialog box to download > the > > file, but for some reason the type of file isn't getting passed to the > box, > > and (2) when I download a 4MB file it only seems to be getting 16.6KB. > > > > I haven't used header for this purpose before this, so maybe I am missing > > something. I Googled around and found the content-disposition type I > > thought I needed, I actually tried 3 different types (the file is a > > compressed zip file). I Googled around for tutorials on downloading files > > and still haven't found the answer to correcting my problem. Here is the > > code I am using, maybe a couple more trained eyes looking at this could > help > > me out. > > > > <?php > > $download = 'http://www.usa-financial.com'.urldecode( $_GET['link'] ); > > $type = urldecode( $_GET['type'] ); > > $size = filesize( '/home2/www/usa-financial'.urldecode( > > $_GET['link'] ) ); > > header("Content-type: $type"); > > header("Content-Disposition: attachment; filename=$download;"); > > header("Accept-Ranges: bytes"); > > header("Content-Length: $size"); > > > > echo "<!-- $type \n $size \n $download \n -->\n"; > > ?> > > > > Josh -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php