<?

function mfunGetPerms($in_Perms) 
  { 
    if($in_Perms&0x1000)     // FIFO pipe
      $sP = 'p'; 
    elseif($in_Perms&0x2000) // Character special
      $sP = 'c'; 
    elseif($in_Perms&0x4000) // Directory
      $sP = 'd'; 
    elseif($in_Perms&0x6000) // Block special
      $sP = 'b';
    elseif($in_Perms&0x8000) // Regular file
      $sP = '-';
    elseif($in_Perms&0xA000) // Symbolic Link
      $sP = 'l';
    elseif($in_Perms&0xC000) // Socket
      $sP = 's';
    else                     // UNKNOWN
      $sP = 'u'; 
    $sP .= (($in_Perms&0x0100)?'r':'-').(($in_Perms&0x0080)?'w':'-').(($in_Perms&0x0040)?(($in_Perms&0x0800)?'s':'x' ):(($in_Perms&0x0800)?'S':'-')); // owner
    $sP .= (($in_Perms&0x0020)?'r':'-').(($in_Perms&0x0010)?'w':'-').(($in_Perms&0x0008)?(($in_Perms&0x0400)?'s':'x' ):(($in_Perms&0x0400)?'S':'-')); // group
    $sP .= (($in_Perms&0x0004)?'r':'-').(($in_Perms&0x0002)?'w':'-').(($in_Perms&0x0001)?(($in_Perms&0x0200)?'t':'x' ):(($in_Perms&0x0200)?'T':'-')); // world
    return $sP;
 };

// Функция getFilesList
//  $dir	директория файлы которой необходимы
//  $mask	маска требуемых файлов (регексп, например: "1.php?mask=^f.*\.gif")
//
function getFilesList($dir,$mask)
  {
    if (empty($mask) or $mask=="*" or $mask=="*.*")
      $mask = ".*";
    $result = "<?xml version='1.0' encoding='windows-1251'?>".
      "<files><dir>".$dir."</dir>";
    if (is_dir($dir)) 
      if ($dh=opendir($dir)) 
        { 
          while ($file=readdir($dh)) 
            {
              $cur_file = $dir."/".$file;
              $type = filetype($cur_file);
              $ext = ereg_replace("^.*\.","",$file);
              if ($file!="." and ($type=="dir" or ereg($mask,$file)))
                $result .= "<item>".
                  "<id>".++$i."</id>".
                  "<filetype>".$type."</filetype>".
                  "<filename>".$file."</filename>".
                  "<name>".($type=="file"?preg_replace("/\.".$ext."$/U","",$file):$file)."</name>".
                  "<ext>".($type=="file"?$ext:"")."</ext>".
                  "<size>".filesize($cur_file)."</size>".
                  "<ctime>".date("r",filectime($cur_file))."</ctime>".
                  "<mtime>".date("r",filemtime($cur_file))."</mtime>".
                  "<perms>".mfunGetPerms(fileperms($cur_file))."</perms>".
                  "</item>";
            }
          closedir($dh); 
        } 
    $result .= "</files>";
    return $result;
  }

header ("Content-type: text/xml");
echo getFilesList($dir,$mask); 

?>
