This repository has been archived on 2025-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
Files
qemudb/xinha/plugins/Linker/scan.php

163 lines
3.6 KiB
PHP
Raw Normal View History

<?php
// /home/username/foo/public_html/
$dir = dirname(__FILE__)."/../..";
$include = '/\.(php|shtml|html|htm|shtm|cgi|txt|doc|pdf|rtf|xls|csv)$/';
$exclude = '';
$dirinclude = '';
$direxclude = '/(^|\/)[._]|htmlarea/'; // Exclude the htmlarea tree by default
$hash = '';
foreach(explode(',', 'dir,include,exclude,dirinclude,direxclude') as $k)
{
if(isset($_REQUEST[$k]))
{
if(get_magic_quotes_gpc())
{
$_REQUEST[$k] = stripslashes($_REQUEST[$k]);
}
$hash .= $k . '=' . $_REQUEST[$k];
$$k = $_REQUEST[$k];
}
}
if($hash)
{
session_start();
if(!isset($_SESSION[sha1($hash)]))
{
?>
[ ];
<?php
exit;
}
}
function scan($dir, $durl = '')
{
global $include, $exclude, $dirinclude, $direxclude;
static $seen = array();
$files = array();
$dir = realpath($dir);
if(isset($seen[$dir]))
{
return $files;
}
$seen[$dir] = TRUE;
$dh = @opendir($dir);
while($dh && ($file = readdir($dh)))
{
if($file !== '.' && $file !== '..')
{
$path = realpath($dir . '/' . $file);
$url = $durl . '/' . $file;
if(($dirinclude && !preg_match($dirinclude, $url)) || ($direxclude && preg_match($direxclude, $url))) continue;
if(is_dir($path))
{
if($subdir = scan($path, $url))
{
$files[] = array('url'=>$url, 'children'=>$subdir);
}
}
elseif(is_file($path))
{
if(($include && !preg_match($include, $url)) || ($exclude && preg_match($exclude, $url))) continue;
$files[] = array('url'=>$url);
}
}
}
@closedir($dh);
return dirsort($files);
}
function dirsort($files)
{
usort($files, 'dircomp');
return $files;
}
function dircomp($a, $b)
{
if(is_array($a)) $a = $a[0];
if(is_array($b)) $b = $b[0];
return strcmp(strtolower($a), strtolower($b));
}
function to_js($var, $tabs = 0)
{
if(is_numeric($var))
{
return $var;
}
if(is_string($var))
{
return "'" . js_encode($var) . "'";
}
if(is_array($var))
{
$useObject = false;
foreach(array_keys($var) as $k) {
if(!is_numeric($k)) $useObject = true;
}
$js = array();
foreach($var as $k => $v)
{
$i = "";
if($useObject) {
if(preg_match('#[a-zA-Z]+[a-zA-Z0-9]*#', $k)) {
$i .= "$k: ";
} else {
$i .= "'$k': ";
}
}
$i .= to_js($v, $tabs + 1);
$js[] = $i;
}
if($useObject) {
$ret = "{\n" . tabify(implode(",\n", $js), $tabs) . "\n}";
} else {
$ret = "[\n" . tabify(implode(",\n", $js), $tabs) . "\n]";
}
return $ret;
}
return 'null';
}
function tabify($text, $tabs)
{
if($text)
{
return str_repeat(" ", $tabs) . preg_replace('/\n(.)/', "\n" . str_repeat(" ", $tabs) . "\$1", $text);
}
}
function js_encode($string)
{
static $strings = "\\,\",',%,&,<,>,{,},@,\n,\r";
if(!is_array($strings))
{
$tr = array();
foreach(explode(',', $strings) as $chr)
{
$tr[$chr] = sprintf('\x%02X', ord($chr));
}
$strings = $tr;
}
return strtr($string, $strings);
}
echo to_js(scan($dir));
?>