willpower Posted August 25, 2008 Share Posted August 25, 2008 HI OK so i have read the scripts and tried several. Each I have got to work. But I dont want to 'FORCE' a download, rather i want to suggest that thats what they do. I need the user to be able to download the document (not view it) but to chose where they should save it, possibly rename it etc. All the scrpits i have tried simple force the download without confirmation or location choice...so to a novie user, they may not even think it worked. How do i achieve this? Quote Link to comment Share on other sites More sharing options...
DarkWater Posted August 25, 2008 Share Posted August 25, 2008 Can I see one of the scripts that does what you described that you DIDN'T want to happen? >_> Quote Link to comment Share on other sites More sharing options...
trink Posted August 25, 2008 Share Posted August 25, 2008 Change the content-type in the header to a fake one that would normally prompt the user. Quote Link to comment Share on other sites More sharing options...
willpower Posted August 25, 2008 Author Share Posted August 25, 2008 here is an script...no particular reason to show this other than it was the shortest <?php // ver. 1.04 - added an example how to use this script with the filename from a query string // ver. 1.03 - moved the disposition header into the switch because the attachement attibute is sometimes needed // ver. 1.02 - use pathinfo() to get the fileinformation (extesnion) now // ver. 1.01 - Added the stringconv. to handle also extensions with caps // place this code inside a php file and call it f.e. "download.php" $path = $_SERVER['DOCUMENT_ROOT']."/assets/docs/"; // play with the path if the document root does noet exist $fullPath = $path.$_GET['f']; if ($fd = fopen ($fullPath, "r")) { $fsize = filesize($fullPath); $path_parts = pathinfo($fullPath); $ext = strtolower($path_parts["extension"]); switch ($ext) { case "pdf": header("Content-type: application/pdf"); // add here more headers for diff. extensions header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachement' to force a download break; default; header("Content-type: application/octet-stream"); header("Content-Disposition: filename=\"".$path_parts["basename"]."\""); } header("Content-length: $fsize"); header("Cache-control: private"); //use this to open files directly while(!feof($fd)) { $buffer = fread($fd, 2048); echo $buffer; } } fclose ($fd); exit; ?> Quote Link to comment Share on other sites More sharing options...
willpower Posted August 25, 2008 Author Share Posted August 25, 2008 Here is another...both 'force the download'. I need a SAVE AS option....any ideas? <?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 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", "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(); } $file='assets/docs/'.$_GET['f']; $name=$_GET['f']; output_file($file, $name, $mime_type='') ?> Quote Link to comment Share on other sites More sharing options...
The Little Guy Posted August 25, 2008 Share Posted August 25, 2008 This one works for me: http://phpsnips.com/snippet.php?id=55 Quote Link to comment Share on other sites More sharing options...
willpower Posted August 25, 2008 Author Share Posted August 25, 2008 Again this did not give me a 'SAve As option' Quote Link to comment Share on other sites More sharing options...
willpower Posted August 25, 2008 Author Share Posted August 25, 2008 Seems to work on IE but not FF...is there an issue here? Quote Link to comment Share on other sites More sharing options...
The Little Guy Posted August 25, 2008 Share Posted August 25, 2008 check your FireFox settings: Tools -> Options... -> Main -> Download Settings: Check the radio box next to: Always ask me where to save files Quote Link to comment Share on other sites More sharing options...
willpower Posted August 25, 2008 Author Share Posted August 25, 2008 superstar!!!! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.