_OwNeD.YoU_ Posted October 6, 2009 Share Posted October 6, 2009 im lost i want the pdfs to open in the browser i tried messing with the headers but i know im doing something stupid. <?php // Allow direct file download (hotlinking)? // Empty - allow hotlinking // If set to nonempty value (Example: example.com) will only allow downloads when referrer contains this text define('ALLOWED_REFERRER', 'audiogeer.com'); // Download folder, i.e. folder where you keep all files for download. // MUST end with slash (i.e. "/" ) define('BASE_DIR','/home/audiogee/public_html/dealers/Infocenter'); // log downloads? true/false define('LOG_DOWNLOADS',true); // log file name define('LOG_FILE','downloads.log'); // Allowed extensions list in format 'extension' => 'mime type' // If myme type is set to empty string then script will try to detect mime type // itself, which would only work if you have Mimetype or Fileinfo extensions // installed on server. $allowed_ext = array ( // archives 'zip' => 'application/zip', // documents 'pdf' => 'application/pdf', 'doc' => 'application/msword', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', // executables 'exe' => 'application/octet-stream', // images 'gif' => 'image/gif', 'png' => 'image/png', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', // audio 'mp3' => 'audio/mpeg', 'wav' => 'audio/x-wav', // video 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', 'mpe' => 'video/mpeg', 'mov' => 'video/quicktime', 'avi' => 'video/x-msvideo' ); #################################################################### ### DO NOT CHANGE BELOW #################################################################### // If hotlinking not allowed then make hackers think there are some server problems if (ALLOWED_REFERRER !== '' && (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false) ) { die("Internal server error. Please contact system administrator."); } // Make sure program execution doesn't time out // Set maximum script execution time in seconds (0 means no limit) set_time_limit(0); if (!isset($_GET['f']) || empty($_GET['f'])) { die("Please specify file name for download."); } // Get real file name. // Remove any path info to avoid hacking by adding relative path, etc. $fname = basename($_GET['f']); // Check if the file exists // Check in subfolders too function find_file ($dirname, $fname, &$file_path) { $dir = opendir($dirname); while ($file = readdir($dir)) { if (empty($file_path) && $file != '.' && $file != '..') { if (is_dir($dirname.'/'.$file)) { find_file($dirname.'/'.$file, $fname, $file_path); } else { if (file_exists($dirname.'/'.$fname)) { $file_path = $dirname.'/'.$fname; return; } } } } } // find_file // get full file path (including subfolders) $file_path = ''; find_file(BASE_DIR, $fname, $file_path); if (!is_file($file_path)) { die("File does not exist. Make sure you specified correct file name."); } // file size in bytes $fsize = filesize($file_path); // file extension $fext = strtolower(substr(strrchr($fname,"."),1)); // check if allowed extension if (!array_key_exists($fext, $allowed_ext)) { die("Not allowed file type."); } // get mime type if ($allowed_ext[$fext] == '') { $mtype = ''; // mime type is not set, get from server settings if (function_exists('mime_content_type')) { $mtype = mime_content_type($file_path); } else if (function_exists('finfo_file')) { $finfo = finfo_open(FILEINFO_MIME); // return mime type $mtype = finfo_file($finfo, $file_path); finfo_close($finfo); } if ($mtype == '') { $mtype = "application/force-download"; } } else { // get mime type defined by admin $mtype = $allowed_ext[$fext]; } // Browser will try to save file with this filename, regardless original filename. // You can override it if needed. if (!isset($_GET['fc']) || empty($_GET['fc'])) { $asfname = $fname; } else { // remove some bad chars $asfname = str_replace(array('"',"'",'\\','/'), '', $_GET['fc']); if ($asfname === '') $asfname = 'NoName'; } // set headers header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=\"$asfname\""); header("Content-Type: $mtype"); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . $fsize); // download // @readfile($file_path); $file = @fopen($file_path,"rb"); if ($file) { while(!feof($file)) { print(fread($file, 1024*); flush(); if (connection_status()!=0) { @fclose($file); die(); } } @fclose($file); } // log downloads if (!LOG_DOWNLOADS) die(); $f = @fopen(LOG_FILE, 'a+'); if ($f) { @fputs($f, date("m.d.Y g:ia")." ".$_SERVER['REMOTE_ADDR']." ".$fname."\n"); @fclose($f); } ?> Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/ Share on other sites More sharing options...
MadTechie Posted October 6, 2009 Share Posted October 6, 2009 you may want to remove header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=\"$asfname\""); Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-931843 Share on other sites More sharing options...
_OwNeD.YoU_ Posted October 6, 2009 Author Share Posted October 6, 2009 still makes it download Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-931978 Share on other sites More sharing options...
MadTechie Posted October 6, 2009 Share Posted October 6, 2009 is this JUST for pdfs ? Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-931983 Share on other sites More sharing options...
_OwNeD.YoU_ Posted October 6, 2009 Author Share Posted October 6, 2009 pretty much but i do throw some other documents in there // documents 'pdf' => 'application/pdf', 'doc' => 'application/msword', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-931988 Share on other sites More sharing options...
PFMaBiSmAd Posted October 6, 2009 Share Posted October 6, 2009 And is your browser configured to open pdf's? Does the browser you are using for testing open .pdf documents on other sites? Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-931989 Share on other sites More sharing options...
_OwNeD.YoU_ Posted October 6, 2009 Author Share Posted October 6, 2009 yup just tested it out to make sure it does open pdf's in the browser on other websites Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-931994 Share on other sites More sharing options...
_OwNeD.YoU_ Posted October 6, 2009 Author Share Posted October 6, 2009 header("Content-disposition: attachment; filename=$file"); i got it to open in the browser by removing this but then i cant set the name of the file any way around that Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-932014 Share on other sites More sharing options...
PFMaBiSmAd Posted October 7, 2009 Share Posted October 7, 2009 Setting the Content-Disposition to inline instead of attachment should work - 2.1 The Inline Disposition Type A bodypart should be marked `inline' if it is intended to be displayed automatically upon display of the message. Inline bodyparts should be presented in the order in which they occur, subject to the normal semantics of multipart messages. Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-932032 Share on other sites More sharing options...
PFMaBiSmAd Posted October 7, 2009 Share Posted October 7, 2009 In playing with this and in searching for solutions, you will find that using inline for the content disposition will cause the file to be displayed inline but that the browser/pdf reader won't use the filename. Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-932042 Share on other sites More sharing options...
_OwNeD.YoU_ Posted October 7, 2009 Author Share Posted October 7, 2009 strange this ones giving my lots of trouble, pdfs arent fun :-/ Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-932071 Share on other sites More sharing options...
PFMaBiSmAd Posted October 7, 2009 Share Posted October 7, 2009 Here is a mod_rewrite solution that will work (tested) - # rewrite /inline/file.ext to /inline.php?file=file.ext RewriteEngine On RewriteRule ^inline/(.*) /inline.php?file=$1 [QSA,L] The URL would be http://yourdomain.com/inline/file.ext I used 'inline' in this example because you are trying to get the inline disposition to work, but you could use a different name in the path in the URL and in the actual .php file that gets called. Because the filename is on the end of the URL, the pdf reader uses it when you save the file in the reader. This should work for all your files. Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-932073 Share on other sites More sharing options...
_OwNeD.YoU_ Posted October 7, 2009 Author Share Posted October 7, 2009 thanks perfect!!! Quote Link to comment https://forums.phpfreaks.com/topic/176749-solved-php-dont-force-download/#findComment-932144 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.