source: trunk/plugins/Linker/scan.php @ 21

Last change on this file since 21 was 21, checked in by gogo, 14 years ago

Setting more properties.

  • Property svn:eol-style set to native
  • Property svn:keywords set to LastChangedDate LastChangedRevision LastChangedBy HeadURL Id
File size: 3.1 KB
Line 
1<?php
2
3    // /home/username/foo/public_html/
4    $dir          = $_SERVER['DOCUMENT_ROOT'];
5    $include      = '/\.(php|shtml|html|htm|shtm|cgi|txt|doc|pdf|rtf|xls|csv)$/';
6    $exclude      = '';
7    $dirinclude   = '';
8    $direxclude   = '/(^|\/)[._]|htmlarea/'; // Exclude the htmlarea tree by default
9
10    $hash = '';
11    foreach(explode(',', 'dir,include,exclude,dirinclude,direxclude') as $k)
12    {
13      if(isset($_REQUEST[$k]))
14      {
15        if(get_magic_quotes_gpc())
16        {
17          $_REQUEST[$k] = stripslashes($_REQUEST[$k]);
18        }
19        $hash .= $k . '=' . $_REQUEST[$k];
20        $$k = $_REQUEST[$k];
21      }
22    }
23
24    if($hash)
25    {
26      session_start();
27      if(!isset($_SESSION[sha1($hash)]))
28      {
29        ?>
30        [ ];
31        <?php
32        exit;
33      }
34    }
35
36    function scan($dir, $durl = '')
37    {
38      global $include, $exclude, $dirinclude, $direxclude;
39      static $seen = array();
40
41      $files = array();
42
43      $dir = realpath($dir);
44      if(isset($seen[$dir]))
45      {
46        return $files;
47      }
48      $seen[$dir] = TRUE;
49      $dh = @opendir($dir);
50
51
52      while($dh && ($file = readdir($dh)))
53      {
54        if($file !== '.' && $file !== '..')
55        {
56          $path = realpath($dir . '/' . $file);
57          $url  = $durl . '/' . $file;
58
59          if(($dirinclude && !preg_match($dirinclude, $url)) || ($direxclude && preg_match($direxclude, $url))) continue;
60          if(is_dir($path))
61          {
62            if($subdir = scan($path, $url))
63            {
64              $files[] = array($url, $subdir);
65            }
66          }
67          elseif(is_file($path))
68          {
69            if(($include && !preg_match($include, $url)) || ($exclude && preg_match($exclude, $url))) continue;
70            $files[] = $url;
71          }
72
73        }
74      }
75      @closedir($dh);
76      return dirsort($files);
77    }
78
79    function dirsort($files)
80    {
81      usort($files, 'dircomp');
82      return $files;
83    }
84
85    function dircomp($a, $b)
86    {
87      if(is_array($a)) $a = $a[0];
88      if(is_array($b)) $b = $b[0];
89      return strcmp(strtolower($a), strtolower($b));
90    }
91
92    function to_js($var, $tabs = 0)
93    {
94      if(is_numeric($var))
95      {
96        return $var;
97      }
98
99      if(is_string($var))
100      {
101        return "'" . js_encode($var) . "'";
102      }
103
104      if(is_array($var))
105      {
106        $js = array();
107        foreach($var as $k => $v)
108        {
109          $js[] = to_js($v, $tabs + 1);
110        }
111        return "[\n" . tabify(implode(",\n", $js), $tabs) . "\n]";
112      }
113
114      return 'null';
115    }
116
117    function tabify($text, $tabs)
118    {
119      if($text)
120      {
121        return str_repeat("  ", $tabs) . preg_replace('/\n(.)/', "\n" . str_repeat("  ", $tabs) . "\$1", $text);
122      }
123    }
124
125    function js_encode($string)
126    {
127      static $strings = "\\,\",',%,&,<,>,{,},@,\n,\r";
128
129      if(!is_array($strings))
130      {
131        $tr = array();
132        foreach(explode(',', $strings) as $chr)
133        {
134          $tr[$chr] = sprintf('\x%02X', ord($chr));
135        }
136        $strings = $tr;
137      }
138
139      return strtr($string, $strings);
140    }
141
142
143    echo to_js(scan($dir));
144?>
Note: See TracBrowser for help on using the repository browser.