Current location: Hot Scripts Forums » Programming Languages » PHP » Downloading problem


Downloading problem

Reply
  #1 (permalink)  
Old 12-23-09, 08:11 AM
rsmahaa rsmahaa is offline
Newbie Coder
 
Join Date: Nov 2009
Posts: 25
Thanks: 0
Thanked 0 Times in 0 Posts
Downloading problem

I am using below code for downloading tracks from server.


PHP Code:
PHP Code:

<?php

session_start
();
$track=$_SESSION['track'];
$ship=$_SESSION['ship'];
 
###############################################################
# File Download 1.3
###############################################################
# Visit [url=http://www.zubrag.com/scripts/]:: Free PHP Scripts[/url] 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','sample/');
 
// 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 (
 
  
// documents
 
 
  // audio
  
'mp3' => 'audio/mp3',
  
'wma' => 'audio/wma'
);
 
 
 
####################################################################
###  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(
$_POST['f']) || empty($_POST['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($_POST['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(
"Album you have selected is currently unavailable.."); 
}
 
// 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($_POST['fc']) || empty($_POST['fc'])) {
  
$asfname $fname;
}
else {
  
// remove some bad chars
  
$asfname str_replace(array('"',"'",'\\','/'), ''$_POST['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($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($f$ship."#".$track."#".$fname."#".date("Y-m-d")."#".date("g:ia")."#".$_SERVER['REMOTE_ADDR']."\r\n");
  @
fclose($f);
}
?>
During downloading i cant do anything in my website (navigation of web site not possible). Can any one Explain me why ? And any way to rectify? plz
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
  #2 (permalink)  
Old 12-27-09, 12:17 PM
dgreenhouse's Avatar
dgreenhouse dgreenhouse is offline
Aspiring Coder
 
Join Date: Mar 2009
Location: San Francisco
Posts: 457
Thanks: 0
Thanked 3 Times in 3 Posts
At first sight; other than some spaghetti in the code, I'd imagine the recursive call to: find_file() might be the culprit. The recursion depth of PHP is very shallow and I don't recommend doing recursion on directories. It's ineffiecient and a resource gorilla. A deeply descending & dying recursive loop will bring a server to its knees exhibiting the symptoms you've described.

Darrell

modified: On another note, I'll review it more before giving the thumbs down - maybe there's something else not so obvious. But my general "rule of thumb" regarding recursive directory scans still stands.

Also, if the files are quite large; and I have to assume they are, you'd probably want to use another browser to do other stuff. Also again, if you're pulling the file in while trying to do something else, that might be saturating your local system resources and internet bandwidth. You are trying to move mp3's and/or wma's after all...

Last edited by dgreenhouse; 12-27-09 at 12:24 PM.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
  #3 (permalink)  
Old 12-28-09, 06:14 PM
wirehopper's Avatar
wirehopper wirehopper is offline
-
 
Join Date: Feb 2006
Posts: 2,516
Thanks: 20
Thanked 109 Times in 106 Posts
Try putting some echo/exit statements in.

For example:

PHP Code:

echo 'Reached the point where the file names are read';

var_dump($aVariables);
exit(); 
The echo lets you know what is happening, the var_dump can be used to view the contents of some variables (aVariables is an example), and exit stops the script - so you can assume everything is okay, until you find a point that isn't reached. Then, backtrack until you can see what is wrong.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
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
login, roles problem dbrook007 ASP.NET 10 11-10-06 04:42 PM
Form Display Problem neevrap02 Visual Basic 1 09-05-06 06:18 AM
problem with downloading zip-files from webserver ;-) vincentmultimedia ASP 1 03-22-06 06:16 AM
Asp and Microsoft Access 2002 problem gop373 ASP 2 10-06-04 10:13 AM
Problem in downloading the file Narang ASP 0 02-19-04 12:27 PM


All times are GMT -5. The time now is 08:54 AM.
vBulletin® Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.