2
Contributors
1
Reply
3
Views
8 Years
Discussion Span
Last Post by guru12
0

Hi USe the below code and try it

        define('BASE_DIR','songs');

        // log downloads?  true/false
        define('LOG_DOWNLOADS',false);

        // 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',

         // executables
         'exe' => 'application/octet-stream',*/

        // flash
  'swf' => 'application/x-shockwave-flash',
        // audio
  'mp3' => 'songs/mpeg',
  'wav' => 'songs/x-wav',
  'aif' => 'songs/aif',
  'aiff' => 'songs/aiff'
        );



        ####################################################################
        ###  DO NOT CHANGE BELOW
        ####################################################################

        // 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['cid']) || empty($_GET['Cid'])) {
         die("Direct Initialization is not Allowed");
         }*/

        // Get real file name.
        // Remove any path info to avoid hacking by adding relative path, etc.
        $fname = $file_names;

        $dirname=JURI::base()."songs";

        // 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)) {

        }

        // 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 {
            $asfname = $_GET['fc'];
        }

        // set headers
        @ob_end_clean();
        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);
        exit;

Edited by Nick Evan: Fixed formatting

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.