LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2229|回复: 4

proftpd+mysql+quota+vbb完善实现根据金钱购买的流量来下载FTP资源

[复制链接]
发表于 2003-12-21 19:05:04 | 显示全部楼层 |阅读模式
这里是我学习xNix的好地方,把自己这些天搞的东东奉献给大家,当然,还有很多东东要完善和改进。希望朋友们共同努力。
 楼主| 发表于 2003-12-21 19:05:58 | 显示全部楼层

具体内容:

proftpd+mysql+quota+vbb完善实现根据金钱购买的流量来下载FTP资源

1 引用材料:
A 现在网上流行的proftpd+mysql+quota教程。
B www.plusxp.net提供的vbb结合的HACK。

2 proftpd+mysql+quota可以参考:
http://www.avfox.com/forumdisplay.php?s=&forumid=11

3 和VBB结合的HACK,可以参考:
http://www.plusxp.net/cgi-bin/download1.cgi

4 我的proftpd.conf的配置文档,当然可能以后会改进:
ServerName "www.avfox.com"
ServerType standalone
DefaultServer on
ServerIdent off
Port 21
Umask 022
MaxLoginAttempts 3
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600
RootLogin on
MaxClients 500
MaxClientsPerHost 1
MaxClientsPerUser 20
AllowOverwrite on
AllowStoreRestart on
AllowRetrieveRestart on
UseReverseDNS off
RequireValidShell off
DefaultRoot ~ FTPUSR
DefaultRoot ~ FTPGRP
MaxInstances 30
User FTPUSR
Group FTPGRP

SQLConnectInfo FTP@localhost root ********
SQLAuthTypes Backend Plaintext
SQLUserInfo FTPUSERS userid passwd uid gid homedir shell
SQLGroupInfo FTPGRPS groupname gid members
SQLAuthenticate users groups usersetfast groupsetfast
SQLHomedirOnDemand on
QuotaDirectoryTally on
QuotaDisplayUnits "Kb"
QuotaEngine on
QuotaLog "/var/log"
QuotaShowQuotas on
SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail,files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally


3 我的buy_byte.php文档:

  1. <?php

  2. $myver = "v1.00";
  3. $version = "返回论坛";
  4. $PlusName = "FTP中心";
  5. $MaxAllowIP = 2;  # 最多允许的IP
  6. $PerGBSize = 1024 * 1024 * 1000; # 每GB文件的大小(Bytes)
  7. $BuyMaxGB = 1000; # 允许购买下载量的最多GB数
  8. $NameAddStr = "avfox_";

  9. mt_srand ((double) microtime() * 1000000);
  10. $newpass = mt_rand(11111111,99999999);

  11. error_reporting(7);

  12. require("./global.php");

  13.   $postinfo=getpostinfo($postid);
  14.   $threadinfo=getthreadinfo($postinfo[threadid]);
  15.   $foruminfo=getthreadinfo($threadinfo[forumid]);

  16.   // check moderator permissions for getting ip
  17. if ($bbuserinfo[userid]==0) {
  18.   show_nopermission();
  19. }
  20. $postinfo[hostaddress]=gethostbyaddr($ipaddress);
  21. // ############################### list FTP   ###############################

  22. if ($action=="") {
  23. //  $postid=verifyid("post",$postid);
  24. //  updateftpforum($threadinfo['forumid']);

  25. //查FTP数据
  26.   $ftplistbits = "";
  27.   $perpage = 20;
  28.   $limitlower=($pagenumber-1)*$perpage+1;
  29.   $limitupper=($pagenumber)*$perpage;
  30.   $counter=0;

  31.   $ftpcount=$DB_site->query_first("SELECT COUNT(*) AS ftps FROM FTP_info");
  32.   $ftptotal=$ftpscount[ftps];

  33.   if ($limitupper>$totalftps) {
  34.     $limitupper=$totalftps;
  35.     if ($limitlower>$totalftps) {
  36.       $limitlower=$totalftps-$perpage;
  37.     }
  38.   }
  39.   if ($limitlower<=0) {
  40.     $limitlower=1;
  41.   }

  42.   $ftps=$DB_site->query("SELECT * FROM FTP_info ORDER BY FTP_ItemName");

  43.   $counter=0;

  44.   while ($ftpinfo=$DB_site->fetch_array($ftps) and $counter++<$perpage) {
  45.       eval("\$ftp_listbits .= "".gettemplate("ftp_listbits")."";");
  46.   }  // end while

  47.   eval("dooutput("".gettemplate("ftp_list")."");");
  48. }

  49. // ############################### 修改密码 ###############################
  50. if ($action=="buy_pass") {
  51.   $ftps=$DB_site->query("SELECT * FROM FTP_info where FTP_ID=$ftpid");
  52.   $ftpinfo=$DB_site->fetch_array($ftps);

  53. $f_server=Trim($ftpinfo[FTP_SQLIP]).":".Trim($ftpinfo[FTP_SQLPort]);
  54. //$f_server=Trim($ftpinfo[FTP_SQLIP]);

  55. $DB_ftp=new DB_Sql_vb;
  56. $DB_ftp->appname='vbb_ftp';
  57. $DB_ftp->appshortname='vbb_ftp (forum)';
  58. $DB_ftp->database=Trim($ftpinfo[FTP_SQLDatabase]);
  59. $DB_ftp->server=$f_server;
  60. $DB_ftp->user=Trim($ftpinfo[FTP_SQLUser]);
  61. $DB_ftp->password=Trim($ftpinfo[FTP_SQLPass]);

  62. $DB_ftp->connect();

  63. $ftpuser=$NameAddStr.$bbuserinfo[username];

  64.   $ftps2=$DB_ftp->query("SELECT * FROM quotalimits where name='$ftpuser'");
  65.   $DB_ftp->query("UPDATE FTPUSERS SET passwd=$newpass WHERE userid='$ftpuser'");

  66.   $buyerror="$ftpinfo[FTP_ItemName]上的密码已经改为【<normalfont color='blue'>".$newpass."</normalfont>】,请牢记! (注:密码是【】内8位蓝色数字,密码一分钟后生效)";
  67.   eval("dooutput("".gettemplate("buy_error")."");");


  68. }

  69. // ############################### start 购买流量 ###############################
  70. if ($action=="buy_byte") {

  71. //  $postid=verifyid("post",$postid);

  72.   $ftps=$DB_site->query("SELECT * FROM FTP_info where FTP_ID=$ftpid");
  73.   $ftpinfo=$DB_site->fetch_array($ftps);

  74. if($ftpinfo[FTP_Enable]==0) {
  75.   $buyerror=$ftpinfo[FTP_ItemName]."目前关闭,无法购买流量!";
  76.   eval("dooutput("".gettemplate("buy_error")."");");
  77.   exit();
  78. }

  79. $f_server=Trim($ftpinfo[FTP_SQLIP]).":".Trim($ftpinfo[FTP_SQLPort]);
  80. //$f_server=Trim($ftpinfo[FTP_SQLIP]);

  81. $DB_ftp=new DB_Sql_vb;
  82. $DB_ftp->appname='vbb_ftp';
  83. $DB_ftp->appshortname='vbb_ftp (forum)';
  84. $DB_ftp->database=Trim($ftpinfo[FTP_SQLDatabase]);
  85. $DB_ftp->server=$f_server;
  86. $DB_ftp->user=Trim($ftpinfo[FTP_SQLUser]);
  87. $DB_ftp->password=Trim($ftpinfo[FTP_SQLPass]);

  88. $DB_ftp->connect();

  89. $ftpuser=$NameAddStr.$bbuserinfo[username];

  90.   $ftps2=$DB_ftp->query("SELECT * FROM quotalimits where name='$ftpuser'");
  91.   $ftpinfo2=$DB_ftp->fetch_array($ftps2);
  92.   $ftps3=$DB_ftp->query("SELECT * FROM quotatallies where name='$ftpuser'");
  93.   $ftpinfo3=$DB_ftp->fetch_array($ftps3);  

  94. $GB_downover = intval($ftpinfo3[bytes_out_used] / $PerGBSize);
  95. $GB_down = intval($ftpinfo2[bytes_out_avail] / $PerGBSize);

  96. $GB_moneycheck = $DB_site->query_first("SELECT money FROM user WHERE userid=$bbuserinfo[userid]");
  97. $GB_money = $GB_moneycheck[money];
  98. $GB_buy = intval($GB_money / $ftpinfo[FTP_BuyPrice]);

  99. if($GB_buy>($BuyMaxGB-$GB_down)){$GB_buy=($BuyMaxGB-$GB_down);}

  100. $ipaddress=getenv("REMOTE_ADDR");
  101. $ipadd=explode(".",trim($ipaddress));
  102.   
  103. //  updateftpforum($threadinfo['forumid']);
  104.   eval("dooutput("".gettemplate("buy_byte")."");");
  105. }

  106. // ###################### 购买确认 #######################

  107. if ($action=="buy_bytechanged") {

  108.   $ftps=$DB_site->query("SELECT * FROM FTP_info where FTP_ID=$ftpid");
  109.   $ftpinfo=$DB_site->fetch_array($ftps);

  110. $f_server=Trim($ftpinfo[FTP_SQLIP]).":".Trim($ftpinfo[FTP_SQLPort]);

  111. $DB_ftp=new DB_Sql_vb;
  112. $DB_ftp->appname='vbb_ftp';
  113. $DB_ftp->appshortname='vbb_ftp (forum)';
  114. $DB_ftp->database=Trim($ftpinfo[FTP_SQLDatabase]);
  115. $DB_ftp->server=$f_server;
  116. $DB_ftp->user=Trim($ftpinfo[FTP_SQLUser]);
  117. $DB_ftp->password=Trim($ftpinfo[FTP_SQLPass]);
  118. $DB_ftp->connect();

  119. $ftpuser=$NameAddStr.$bbuserinfo[username];

  120.   $ftps2=$DB_ftp->query("SELECT * FROM quotalimits where name='$ftpuser'");
  121.   $ftpinfo2=$DB_ftp->fetch_array($ftps2);
  122.   $ftps3=$DB_ftp->query("SELECT * FROM quotatallies where name='$ftpuser'");
  123.   $ftpinfo3=$DB_ftp->fetch_array($ftps3);

  124. $GB_downover = intval($ftpinfo3[bytes_out_used] / $PerGBSize);
  125. $GB_down = intval($ftpinfo2[bytes_out_avail] / $PerGBSize);

  126. $GB_moneycheck = $DB_site->query_first("SELECT money,usergroupid FROM user WHERE userid=$bbuserinfo[userid]");
  127. //$GB_moneycheck=$DB_site->fetch_array($GB_moneychecks);
  128. $GB_money = $GB_moneycheck[money];
  129. $GB_buy = intval($GB_money / $ftpinfo[FTP_BuyPrice]);

  130. if($GB_buy>($BuyMaxGB-$GB_down)){$GB_buy=($BuyMaxGB-$GB_down);}
  131. $donate=$donate+0;

  132. if($donate=='' or $donate<=0) {
  133.   $buyerror="你没有输入任何数字!";
  134.   eval("dooutput("".gettemplate("buy_error")."");");
  135.   exit();
  136. }

  137. if(!is_int($donate)) {
  138.   $buyerror="你输入的不是整数!";
  139.   eval("dooutput("".gettemplate("buy_error")."");");
  140.   exit();
  141. }

  142. if($donate > $GB_buy) {
  143.   $buyerror="资金不足,或你已超过购买量,无法购买!";
  144.   eval("dooutput("".gettemplate("buy_error")."");");
  145.   exit();
  146. }

  147. if($donate > $BuyMaxGB) {
  148.   $buyerror="对不起,FTP最多只允许购买 $BuyMaxGB GB的流量!";
  149.   eval("dooutput("".gettemplate("buy_error")."");");
  150.   exit();
  151. }

  152. $f_server=Trim($ftpinfo[FTP_SQLIP]).":".Trim($ftpinfo[FTP_SQLPort]);
  153. //$f_server=Trim($ftpinfo[FTP_SQLIP]);

  154. $ftpuser=$NameAddStr.$bbuserinfo[username];

  155. //  $ftpcount=$DB_ftp->query_first("SELECT COUNT(*) AS usercc,bytes_out_avail FROM quotalimits where name='$ftpuser'");
  156. //  $usercount=$ftpcount[usercc];
  157.   $ftpcount=$DB_ftp->query_first("SELECT name,bytes_out_avail FROM quotalimits where name='$ftpuser'");
  158.   $username=$ftpcount[name];
  159.   $userdown=$ftpcount[bytes_out_avail];

  160. $ftpgroups=$DB_site->query_first("SELECT Group_ftpname FROM FTP_group WHERE Group_vbbid='$GB_moneycheck[usergroupid]' and Group_ftpid='$ftpid' ");
  161. $ftpgroup=$ftpgroups[Group_ftpname];

  162. if($ftpgroup==''){
  163.   $buyerror="你没有权利购买密码!可能是你的帐号还没有被激活!";
  164.   eval("dooutput("".gettemplate("buy_error")."");");
  165.   exit();
  166. }

  167. //$DB_sice->query("UPDATE FTP_info SET FTP_Click='$ftpinfo[FTP_Click]+1',FTP_BuyTotal='$ftpinfo[FTP_BuyTotal]+$donate' WHERE FTP_ID='$ftpid'");
  168. $DB_site->query("UPDATE FTP_info SET FTP_Click=FTP_Click+1,FTP_BuyTotal=FTP_BuyTotal+$donate WHERE FTP_ID='$ftpid'");

  169. if($username==''){
  170. $ipaddress=getenv("REMOTE_ADDR");
  171. $ipadd=explode(".",trim($ipaddress));

  172.   $DB_ftp->query("INSERT INTO FTPUSERS (userid,passwd,uid, gid, homedir, shell) VALUES ('$ftpuser', '$newpass','2001','2001','/home/FTP/film','')");
  173.   $DB_ftp->query("INSERT INTO quotalimits (`name` , `quota_type` , `per_session` , `limit_type` , `bytes_in_avail` , `bytes_out_avail` , `bytes_xfer_avail` , `files_in_avail` , `files_out_avail` , `files_xfer_avail`) VALUES ('$ftpuser', 'user', 'false', 'soft', '0', $donate*$PerGBSize, '0', '0', '0', '0')");
  174.   $eventid = $DB_ftp->insert_id();
  175.   $passmessage="<b>【<normalfont%20color=blue>".$newpass."</normalfont>】</b>请牢记此密码,此密码只能在本FTP上使用,为确保您的FTP密码不被盗用,此密码今后将只能修改不能查询!(注:密码是【】内8位蓝色数字)";
  176.   $DB_site->query("UPDATE user SET money=(money-$donate*$ftpinfo[FTP_BuyPrice]) WHERE userid=$bbuserinfo[userid]");


  177. }else{

  178.   $DB_ftp->query("UPDATE quotalimits SET bytes_out_avail=($userdown+$donate*$PerGBSize) WHERE name='$ftpuser'");
  179.   $passmessage="<normalfont%20color=blue>您的FTP密码为您以前使用的密码,如您忘记该密码,请在前一窗口修改!";
  180.   $DB_site->query("UPDATE user SET money=(money-$donate*$ftpinfo[FTP_BuyPrice]) WHERE userid=$bbuserinfo[userid]");

  181. }

  182. $GB_money=$GB_money-$donate*$ftpinfo[FTP_BuyPrice];

  183.   $ftps2=$DB_ftp->query("SELECT * FROM quotalimits where name='$ftpuser'");
  184.   $ftpinfo2=$DB_ftp->fetch_array($ftps2);
  185.   $ftps3=$DB_ftp->query("SELECT * FROM quotatallies where name='$ftpuser'");
  186.   $ftpinfo3=$DB_ftp->fetch_array($ftps3);
  187.   
  188. $GB_downover = intval($ftpinfo3[bytes_out_used] / $PerGBSize);
  189. $GB_down = intval($ftpinfo2[bytes_out_avail] / $PerGBSize);

  190. Header("Location: buy_byte.php?action=buy_bytemessage&s=$session[sessionhash]&ftpid=$ftpinfo[FTP_ID]&donate2=$donate&GB_money=$GB_money&passmessage=$passmessage");
  191. }
  192. // ############################### 显示购买成功! ###############################
  193. if ($action=="buy_bytemessage") {
  194.   $ftps=$DB_site->query("SELECT * FROM FTP_info where FTP_ID=$ftpid");
  195.   $ftpinfo=$DB_site->fetch_array($ftps);

  196. $f_server=Trim($ftpinfo[FTP_SQLIP]).":".Trim($ftpinfo[FTP_SQLPort]);

  197. $DB_ftp=new DB_Sql_vb;
  198. $DB_ftp->appname='vbb_ftp';
  199. $DB_ftp->appshortname='vbb_ftp (forum)';
  200. $DB_ftp->database=Trim($ftpinfo[FTP_SQLDatabase]);
  201. $DB_ftp->server=$f_server;
  202. $DB_ftp->user=Trim($ftpinfo[FTP_SQLUser]);
  203. $DB_ftp->password=Trim($ftpinfo[FTP_SQLPass]);
  204. $DB_ftp->connect();

  205. $ftpuser=$NameAddStr.$bbuserinfo[username];

  206.   $ftps2=$DB_ftp->query("SELECT * FROM quotalimits where name='$ftpuser'");
  207.   $ftpinfo2=$DB_ftp->fetch_array($ftps2);
  208.   $ftps3=$DB_ftp->query("SELECT * FROM quotatallies where name='$ftpuser'");
  209.   $ftpinfo3=$DB_ftp->fetch_array($ftps3);
  210.   
  211. $GB_downover = intval($ftpinfo3[bytes_out_used] / $PerGBSize);
  212. $GB_down = intval($ftpinfo2[bytes_out_avail] / $PerGBSize);

  213.        
  214.   eval("dooutput("".gettemplate("buy_message")."");");       
  215.        
  216.        
  217. }

  218. // ############################### 修改IP地址 ###############################
  219. if ($action=="buy_ipchanged") {

  220. if($allowip==''){
  221.   $buyerror="你没有输入任何IP地址!";
  222.   eval("dooutput("".gettemplate("buy_error")."");");
  223.   exit();
  224. }


  225. $allowip2=explode("\n",$allowip);
  226. $counter=-1;
  227.   while (++$counter < $MaxAllowIP){
  228.       $allowip3=explode(".",trim($allowip2[$counter]));
  229.                   $allowip4=$allowip4.trim($allowip2[$counter])."\n";

  230.       if (!($allowip3[0]>=0 and $allowip3[0]<=255) or !($allowip3[1]>=0 and $allowip3[1]<=255) or $allowip3[0]=='*' or $allowip3[1]=='*'){
  231.       $buyerror="你输入的IP地址不正确或范围有误!";
  232.       eval("dooutput("".gettemplate("buy_error")."");");
  233.                   exit();
  234.              }
  235.   }
  236.   $ftps=$DB_site->query("SELECT * FROM FTP_info where FTP_ID=$ftpid");
  237.   $ftpinfo=$DB_site->fetch_array($ftps);

  238. $f_server=Trim($ftpinfo[FTP_SQLIP]).":".Trim($ftpinfo[FTP_SQLPort]);

  239. $DB_ftp=new DB_Sql_vb;
  240. $DB_ftp->appname='vbb_ftp';
  241. $DB_ftp->appshortname='vbb_ftp (forum)';
  242. $DB_ftp->database=Trim($ftpinfo[FTP_SQLDatabase]);
  243. $DB_ftp->server=$f_server;
  244. $DB_ftp->user=Trim($ftpinfo[FTP_SQLUser]);
  245. $DB_ftp->password=Trim($ftpinfo[FTP_SQLPass]);

  246. $DB_ftp->connect();

  247. $ftpuser=$NameAddStr.$bbuserinfo[username];

  248.   $ftps2=$DB_ftp->query("SELECT * FROM quotalimits where name='$ftpuser'");
  249.   $DB_ftp->query("UPDATE FTPUSERS SET FAllow_IP='$allowip4' WHERE userid='$ftpuser'");

  250.   $buyerror="$ftpinfo[FTP_ItemName]上允许的 IP 段已改为:<textarea cols=60 rows=$MaxAllowIP  name='allowip'>$allowip4</textarea>";
  251.   eval("dooutput("".gettemplate("buy_error")."");");


  252. }

  253. ?>

复制代码

4 相关改变的模板请自选修改

5 演示站点
http://www.avfox.com

6 还有很多功能需要更多的人来完善。
 楼主| 发表于 2003-12-27 22:00:47 | 显示全部楼层
看样子没有人支持。
发表于 2003-12-28 12:53:15 | 显示全部楼层
能不能给兄弟一点金子呀,嘻嘻!
不过在此论坛有兄弟如此实力的人着实不多,所以回的人也就少了,很正常的。
看了兄弟的论坛,感觉管理有点混乱,希望贵坛越办越好。
发表于 2003-12-28 21:58:25 | 显示全部楼层
好帖子,看来做论坛的兄弟不多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表