slpctrl Posted October 10, 2008 Share Posted October 10, 2008 Alright, I've got this download.php code, to secure some premium files on my website. Here is the code: <?php ############################################################### # ############################################################### # Visit http://www.zubrag.com/scripts/ for updates ############################################################### # Sample call: # download.php?f=phptutorial.zip # # Sample call (browser will try to save with new file name): # download.php?f=phptutorial.zip&fc=php123tutorial.zip ############################################################### // 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', ''); // Download folder, i.e. folder where you keep all files for download. // MUST end with slash (i.e. "/" ) define('BASE_DIR','/home/stretchm/downloads/'); // 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 ( 'zip' => 'application/zip', 'rar' => 'application/rar' ); #################################################################### ### 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-Type: $mtype"); header("Content-Disposition: attachment; filename=\"$asfname\""); 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); } ?> And here would be the generic HTML page let's say (nothing in it special really) <html><head> <meta http-equiv="Content-Language" content="en-us"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Help, Prevention and Treatment</title> </head><body bgcolor="#000080"> <center> <table bordercolorlight="#B9CFFF" bordercolordark="#115FFF" border="3" cellpadding="5" cellspacing="0" width="700"> <tbody><tr> <td bgcolor="#0000ff"> <p style="word-spacing: 0pt; margin-top: 0pt; margin-bottom: 0pt;" align="center"><font color="#ffff00"><b><font size="3" face="Verdana,Arial,Helvetica">Not as hard as you think</font></b></font></p> </td> </tr> <tr> <td style="padding: 5px 15px 5px 25px;" align="center" bgcolor="#ffffff" valign="top" width="100%"> <p style="word-spacing: 0pt; margin-top: 0pt; margin-bottom: 0pt;" align="center">Thank you for downloading.</p> <center> <hr size="1"> <p style="margin-top: 0px; margin-bottom: 0px; word-spacing: 0px;" align="center"><font size="1" face="Verdana, Arial">Contact: Rillis Enterprise LLC,</font></p> <p style="margin-top: 0px; margin-bottom: 0px; word-spacing: 0px;" align="center"><font size="1" face="Verdana, Arial">PO Box 115, Franklin, OH. USA - 45005</font></p> <p style="margin-top: 0px; margin-bottom: 0px; word-spacing: 0px;" align="center"><font size="1" face="Verdana, Arial">Email: <a href="mailto:[email protected]">[email protected]</a></font></p> <p style="word-spacing: 0pt; margin-top: 0pt; margin-bottom: 0pt;"> </p></center> </td> </tr> <tr> <td align="center" bgcolor="#000080" valign="top" width="100%"> <p align="center"><font color="#ffffff" size="1" face="Verdana,Arial,Helvetica"><b>© Copyright 2008, Rillis Enterprise LLC All rights reserved.</b></font></p></td> </tr> </tbody></table> </center> </body></html> Whenever I add the HTML to the top of the page or include the HTML file, I get flooded with header errors and I don't know why. Can anyone help me out here? Thanks Link to comment https://forums.phpfreaks.com/topic/127928-html-with-my-php/ Share on other sites More sharing options...
DarkWater Posted October 10, 2008 Share Posted October 10, 2008 Umm, what's the question...? Link to comment https://forums.phpfreaks.com/topic/127928-html-with-my-php/#findComment-662360 Share on other sites More sharing options...
slpctrl Posted October 10, 2008 Author Share Posted October 10, 2008 Umm, what's the question...? Why I'm getting the header errors and how to prevent them Link to comment https://forums.phpfreaks.com/topic/127928-html-with-my-php/#findComment-662362 Share on other sites More sharing options...
DarkWater Posted October 10, 2008 Share Posted October 10, 2008 You edited that in after I posted. Read the sticky on header errors and read the PHP manual on the header() function. You cannot have ANY output before header() is called. Link to comment https://forums.phpfreaks.com/topic/127928-html-with-my-php/#findComment-662365 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.