infernodeep 0 Newbie Poster

Hi guys

I need some help from you guys...
im facing a new problem with php download script
when im downloading a application file, it suddenly stops and showing completed but application is not installing.
the actual size is 9Mb....but it downloads sometimes 5.2Mb,6Mb,6.8,7.4Mb....it's not constantly downloading at certain size

could anyone plz tell what mistake i did

Link to download

http://www.something.com/trialdownload.php?code=QURSZXBvcnRlcjIuMF90cmlhbC5tc2k=&user=7&pcode=adr

Code

define('ALLOWED_REFERRER', '');

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

// 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',
  'msi' => 'application/x-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['code']) || empty($_GET['code'])) {
  die("Please specify file name for download.");
}

$pcode = $_REQUEST['pcode'];
$userid = $_REQUEST['user'];
/*$sql_prd = "select * from product_details where trial_file_path = '".$pcode."'";
$res_prd = @mysql_query($sql_prd);
$row_prd = @mysql_fetch_assoc($res_prd);
$pro_code = $row_prd['product_code'];*/

$sql = "SELECT * FROM user_downloads WHERE user_id = '".$id."' and product_code = '".$pcodeid."'";
	//	select sample_download from user_downloads where user_id = '".$_SESSION[id]."' and product_code = '".$row_prd[product_id]."'";
		$res = @mysql_query($sql)or die(mysql_error());
		$row = @mysql_fetch_assoc($res);
		$cnt = $row[sample_download];
		if(@mysql_num_rows($res)>0)
		{
		$in = "UPDATE users SET last_login = now() WHERE id = {$row[id]}";
		$result = @mysql_query($in);
			$cnt = $cnt+1;
			$sql_up = "update user_downloads set sample_download = '".$cnt."',sample_download_date = now() where user_id = '".$id."' and product_code = '".$pcodeid."'";
			$res_up = @mysql_query($sql_up);
		}
		else
		{
			$sql_ins = "insert into user_downloads(user_id,product_code,sample_download,sample_download_date)values('".$userid."','".$pcode."','1',now())";
			$res_ins = @mysql_query($sql_ins) or die(mysql_error());
		}


// Get real file name.
// Remove any path info to avoid hacking by adding relative path, etc.
$fname = base64_decode($_GET['code']);

// 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*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($f, date("m.d.Y g:ia")."  ".$_SERVER['REMOTE_ADDR']."  ".$fname."\n");
  @fclose($f);
}

?>
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.