Jump to content

PHP Download Counter Help


Memor-X
 Share

Recommended Posts

a while ago i got myself a few download php script, i was looking for one that would count the number of downloads, ofcause all the ones that did that either worked like MegaUploads or made either own list (which is useless cause the links in my downloads list leads to a page about the download which contains the actually download link).one however hide the file path, so i figured i edit it for my use by adding an SQL query which increment the no of downloads (ofcause each file is in a table in a database with a field that has how many downloadsanyway, this is the code in the file

<?phpinclude "php_library.php";################################################################ File Download 1.31################################################################ 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 textdefine('ALLOWED_REFERRER', '');// Download folder, i.e. folder where you keep all files for download.// MUST end with slash (i.e. "/" )define('BASE_DIR','downloads/');// log downloads?  true/falsedefine('LOG_DOWNLOADS',true);// log file namedefine('LOG_FILE','downloads.log');$id = $_GET['id'];// 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 problemsif (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.");}// Nullbyte hack fixif (strpos($_GET['f'], "\0") !== FALSE) die('');// 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 toofunction find_file ($dirname, $fname, &$file_path) {  $dir = opendir($dirname . getfolder($id));  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 extensionif (!array_key_exists($fext, $allowed_ext)) {  die("Not allowed file type."); }// get mime typeif ($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 headersheader("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);}$query = "SELECT nodownloads FROM downloads\n";$query .= "WHERE id = $id;";$result = mysql_query($query, $db_conn);while($row = mysql_fetch_assoc($result)){	$no = $row["nodownloads"] + 1;}$query = "UPDATE `forum`.`downloads`\n";$query .= "SET `nodownloads` = nodownloads + 1\n";$query .= "WHERE `downloads`.`id` = $id;";mysql_query($query, $db_conn);// log downloadsif (!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);}?>

php_library.php contains $db_conn which is the database connection variable which runs every time the library is loaded, it also contains getfolder() which depending on $id, adds another folder to the file path as i don't just stick all the files in one folder, games go in one folder, programs in another, patches in another.now it all works, so my download links send up being download.php?f=ID&fc=NAME where ID is the integer id of the download in the database and name is the name of that download.the problem i'm having is that the PHP/SQL code near the bottom isn't working, it should add 1 to the nodownloads field in the table but it doesn't, i've checked both the database data and my downloads listdoes anyone know what i've might have done wrong (apart from the obvious, editing a script i didn't make) or even have a better script than this one i could use?

Link to comment
Share on other sites

Why are you using \n at the end of query.Use just this:

$query = "UPDATE `forum`.`downloads` SET `nodownloads` = nodownloads + 1 WHERE `downloads`.`id` =" . $id;

And I guess you want use

WHERE `id` =" . $id;

id is just a column, downloads is a table.Am I correct?You are trying to update table where something is like other thing in other table?

Edited by Haris S
Link to comment
Share on other sites

Why are you using \n at the end of query.Use just this:
$query = "UPDATE `forum`.`downloads` SET `nodownloads` = nodownloads + 1 WHERE `downloads`.`id` =" . $id;

And I guess you want use

WHERE `id` =" . $id;

id is just a column, downloads is a table.Am I correct?You are trying to update table where something is like other thing in other table?

the \n is a force of habit, when i type up a quesy, how i have it set up in the code is how i type it so the \n is the line break i put in, it has came in handy for debugging but i won't go into thatyeh i know i could just use "WHERE id =" . $id but i copied that from PHPMyAdmin when i did the same thing in the gui just to double check the code, at the moment i'm trying to get it to work, small things like that i'll fix afterhow the query should work is it should update nodownloads column by adding 1 to it's original value, there WHERE makes sure i'm updating only one record as id is the primary key, but like i said above, it's not doing that when it should
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...