Reputation: 152
i using the following code to force download files in php
<?PHP
$id =$_GET['id'];
$query = mysql_query("SELECT * FROM `blog` WHERE id = '" . $id . "' LIMIT 1")or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
$file_name = $row[url]; // "wwyypyv6.pdf"
$file_type = $row[type]; // "application/pdf"
$file_url = 'http://emfhal.hostech.co.il/upload/' . $file_name;
}
header("Content-Type: " . $file_type);
header("Content-Disposition: attachment; filename=\"$file_name");
readfile($file_url);
exit();
?>
When I use this code to download this pdf file (only used for testing purposes), I open the downloaded , and all it gives me is an file empty. i tried it in chrome. opening it with windows and google chrome, it says that it can't display the pdf file because it is empty???
Upvotes: 1
Views: 2424
Reputation: 2289
Use relative or absolute path for the local file being read, or if using http then enable the fopen wrapper for it:
http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen
This option enables the URL-aware fopen wrappers that enable accessing URL object like files. Default wrappers are provided for the access of remote files using the ftp or http protocol, some extensions like zlib may register additional wrappers.
Add/modify this line in your php.ini file:
allow_url_fopen = On
Upvotes: 0
Reputation: 3350
Correct solution:
// grab the requested file's name
$file_name = $_GET['file'];
// make sure it's a file before doing anything!
if(is_file($file_name)) {
/*
Do any processing you'd like here:
1. Increment a counter
2. Do something with the DB
3. Check user permissions
4. Anything you want!
*/
// required for IE
if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); }
// get the file mime type using the file extension
switch(strtolower(substr(strrchr($file_name, '.'), 1))) {
case 'pdf': $mime = 'application/pdf'; break;
case 'zip': $mime = 'application/zip'; break;
case 'jpeg':
case 'jpg': $mime = 'image/jpg'; break;
default: $mime = 'application/force-download';
}
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_name)).' GMT');
header('Cache-Control: private',false);
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($file_name)); // provide file size
header('Connection: close');
readfile($file_name); // push it out
exit();
}
Upvotes: 1