random1 Posted June 5, 2009 Share Posted June 5, 2009 I am troubleshooting an issue with following code for an issue with the download file name. It tries to save the file as '.database_full_backup-2009-06-05-1244173623.sql.' I'm giving it the file: database_full_backup-2009-06-05-1244173623.sql It does donwload the correct data and is the correct size too but the filename is mangled. Screenshot: http://www.imagebam.com/image/321fc837980549 Where are the beginning '. and ending .' coming from? Really frustrating! Please lay down some knowledge. <?php // Source: http://w-shadow.com/blog/2007/08/12/how-to-force-file-download-with-php/ function output_file($file, $name, $mime_type = '') { /* This function takes a path to a file to output ($file), the filename that the browser will see ($name) and the MIME type of the file ($mime_type, optional). If you want to do something on download abort/finish, register_shutdown_function('function_name'); */ if(!is_readable($file)) die('File ' . $file . ' not found or inaccessible!'); $size = filesize($file); $name = rawurldecode($name); /* Figure out the MIME type (if not specified) */ $known_mime_types=array( 'pdf' => 'application/pdf', 'txt' => 'text/plain', 'vcf' => 'text/x-vcard', 'sql' => 'application/x-sql', 'html' => 'text/html', 'htm' => 'text/html', 'exe' => 'application/octet-stream', 'zip' => 'application/zip', 'doc' => 'application/msword', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', 'gif' => 'image/gif', 'png' => 'image/png', 'jpeg'=> 'image/jpg', 'jpg' => 'image/jpg', 'php' => 'text/plain'); if($mime_type==''){ $file_extension = strtolower(substr(strrchr($file,'.'),1)); if(array_key_exists($file_extension, $known_mime_types)){ $mime_type=$known_mime_types[$file_extension]; } else { $mime_type='application/force-download'; }; }; @ob_end_clean(); //turn off output buffering to decrease cpu usage // required for IE, otherwise Content-Disposition may be ignored if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off'); header('Content-Type: ' . $mime_type); header("Content-Disposition: attachment; filename='.$name.'"); header('Content-Transfer-Encoding: binary'); header('Accept-Ranges: bytes'); /* The three lines below basically make the download non-cacheable */ header('Cache-control: private'); header('Pragma: private'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // multipart-download and download resuming support if(isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); list($range) = explode(",",$range,2); list($range, $range_end) = explode("-", $range); $range=intval($range); if(!$range_end) { $range_end=$size-1; } else { $range_end=intval($range_end); } $new_length = $range_end-$range+1; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range-$range_end/$size"); } else { $new_length=$size; header("Content-Length: ".$size); } /* output the file itself */ $chunksize = 1*(1024*1024); //you may want to change this $bytes_send = 0; if ($file = fopen($file, 'r')) { if(isset($_SERVER['HTTP_RANGE'])) fseek($file, $range); while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length) ) { $buffer = fread($file, $chunksize); print($buffer); //echo($buffer); // is also possible flush(); $bytes_send += strlen($buffer); } fclose($file); } else die('Error - can not open file.'); die(); } /********************************************* Example of use **********************************************/ /* Make sure script execution doesn't time out. Set maximum execution time in seconds (0 means no limit). */ set_time_limit(0); // Require password for secure download if(isset($_REQUEST['filepassword']) && $_REQUEST['filepassword'] == 'passwordtest') { $securefolder = 'backups/database/sql/'; $securefile = 'database_full_backup-2009-06-05-1244173623.sql'; //$securefile $file_path = $securefolder . $securefile; //echo($file_path . 'test'); output_file($file_path, 'database_full_backup-2009-06-05-1244173623.sql', 'sql'); // Output secured download file } else { echo($file_path); //header('Location: https://localhost/index.php?incorrectfile=true'); } ?> Link to comment https://forums.phpfreaks.com/topic/161024-force-dowload-in-browser-issue/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.