Current location: Hot Scripts Forums » Programming Languages » PHP » Download script not sending file size to header & corrupt files since using remote file server

Download script not sending file size to header & corrupt files since using remote file server

Reply
  #1 (permalink)  
Old
Newbie Coder
 
Join Date: Jan 2008
Posts: 69
Thanks: 0
Thanked 0 Times in 0 Posts
Download script not sending file size to header & corrupt files since using remote file server

Hey folks,

This download script has been working wonders in the past, but since I aquired a new server for my files as memory usage was too high for the site AND file download, when downloading a file it is:

'unknown file size' (esitimated time unknown) [WHILE DOWNLOADING]
and soemtimes the files are corrupt

This only happens with soem users, it works okay for others.

the download script is now on the remote server NOT the same server has the website, and it is called like this:

site.com/dl.php?f=file.rar

I have no idea why this is, Perhaps I could put the download script on the same server as the site? (I do not know how this would be done - the files on the file server are off the 'DOCUMENT_ROOT'

any help would be excellent, also If I could get some advice on using the download script on the same server as the site I'd be even more greatful!

Many thanks

Here is the code for dl.php:

PHP Code:

<?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''******.com');

// Download folder, i.e. folder where you keep all files for download.
// MUST end with slash (i.e. "/" )
define('BASE_DIR','/************/');

// 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',
    
'7z' => 'application/x-compress',
      
'rar' => 'encoding/x-compress'

);



####################################################################
###  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);

      
//check for user logged in
        
check_userLoggedin($file_path);
      
//user check ends here
// download
// @readfile($file_path);
$file = @fopen($file_path,"rb");
if (
$file) {
  while(!
feof($file)) {
    print(
fread($file1024*8));
    
flush();
    if (
connection_status()!=0) {
      @
fclose($file);
      die();
    }
  }
  @
fclose($file);
}

// log downloads
if (!LOG_DOWNLOADS) die();

$f = @fopen(LOG_FILE'a+');
if (
$f) {
  @
fputs($fdate("m.d.Y g:ia")."  ".$_SERVER['REMOTE_ADDR']."  ".$fname."\n");
  @
fclose($f);
}

?>
Cheers =)
Reply With Quote

Featured Marketplace Scripts (view more)

Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Help with my largest perl script. Grabbing data from a file. Sunnmann Perl 2 04-23-08 03:27 AM
Download files from another server using script! benweston Script Requests 5 01-17-06 09:29 AM
Upload Script Problem!!! seanknighton Perl 0 03-21-04 09:54 PM
Upload file to table so ONLY files tied to primary key are displayed in record? grafixDummy PHP 4 12-20-03 04:28 PM
Upload file type and size limiter! Arctic ASP 1 08-02-03 07:06 PM


All times are GMT -5. The time now is 09:56 AM.
vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.