unrelenting Posted October 12, 2008 Share Posted October 12, 2008 I have a script that works fine for this using a http://site.com/file.php?file=filname.wmv type of deal. The problem is, I want to save some bandwidth on that server and use another server for larger files. How would I go about hiding the direct link to another servers folder? Quote Link to comment Share on other sites More sharing options...
fanfavorite Posted October 12, 2008 Share Posted October 12, 2008 Take a look around at scripts out there. There are many different ways to do this. http://www.stevedawson.com/article0006.php is one script I quickly did a search for. Quote Link to comment Share on other sites More sharing options...
taith Posted October 12, 2008 Share Posted October 12, 2008 also can consider tinyurl.com... its not secure... but it does mask where its coming... the average user wont understand... Quote Link to comment Share on other sites More sharing options...
unrelenting Posted October 13, 2008 Author Share Posted October 13, 2008 The problem with those methods is it doesn't hide the folder that the file is in. I want to stream a video but I don't want any users to be able to find the direct link to the file and post it on other sites. They usually end up posting the link and saying "just right click on the file and choose save as". I need to be able to avoid this altogether. I am doing it currently with this script but it seems to only work if the download folder is on my own server. Maybe someone can tweak it to work for a folder on another server but I can't figure out how myself. If not, I am looking for a viable option. <?php ############################################################### # File Download 1.3 ############################################################### # 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/user/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 ( // 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-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); } ?> Quote Link to comment Share on other sites More sharing options...
fanfavorite Posted October 13, 2008 Share Posted October 13, 2008 The script you posted is for your own server because it hides it in a directory that cannot be accessed by any user because it is outside the web root. That is the most secure way. The script I posted, if it shows the url, try using include instead of header. What do you mean by hide the folder that the file is in? Are you talking about links within the new page? If that is the case, you need to do the same thing again. Quote Link to comment Share on other sites More sharing options...
unrelenting Posted October 13, 2008 Author Share Posted October 13, 2008 In this script I posted you can set it to not allow links to a link like this: http://site.com/file.php?file=filname.wmv If they watch the video in their player and check the source it still says http://site.com/file.php?file=filname.wmv There isn't a way for them to get the direct URL to the file so they can't post a direct link on another site. If they try to use http://site.com/file.php?file=filname.wmv then the script won't work because the link isn't on my particular site. The main thing I need is to keep people from being able to steal my bandwidth by asking their users to "right click and choose save file as...". I'll look at your script again this evening when I have more time but I don't think it handles this the way I need it to. 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.