<?php
 
/**
 
 * file_utils is a class designed to bring you basic commands to work over an fs.
 
 * <br>Last update: October 24, 2006.
 
 * <br>Author: Marcelo Entraigas <m_entraigas at yahoo dot com>.
 
 * <br>Licence: BSD License.
 
 */
 
define('_linux', strpos(_path,':')? false : true);
 
define('_slash', _linux? '/' : chr(92));
 
 
class file_utils {
 
  var $files    = array();
 
  var $folders  = array();
 
  var $chroot   = '/var/www/';
 
  
 
  /**
 
   * class constructor.
 
   * here is defined the default working path.
 
   *
 
   * @param string $path
 
   */
 
  function file_utils ($path='') {
 
      //check for '/../', '/./' and '//'
 
      $pattern = (_linux == true) ? '([/+\.{0,2}/?]+)' : '([\\+\.{0,2}\\?]+)';
 
    if($path===''){
 
      $path = dirname(__FILE__) . _slash;
 
    }else{
 
      $path = ereg_replace($pattern, '/', $path);
 
    }
 
    //default chroot
 
    if ($this->chroot != ''){
 
     $pattern = sprintf("%s",str_replace('/','\/',$this->chroot));
 
     if (!ereg ("^{$pattern}",$path))
 
            $path = $this->chroot;
 
    }
 
    define('_path' , $path);
 
  }
 
 
 
  /**
 
   * List a folder content and put it on $this->folders or $this->files.
 
   *
 
   * @param string $path
 
   */
 
  function ls($path=''){
 
    clearstatcache();
 
    $handle = @opendir($path);
 
    if($handle==false){
 
      $path = _path;
 
    }
 
    $handle = @opendir($path);
 
    if($handle != false){
 
        while(false!==($filename=@readdir($handle))){
 
            if ($filename == '..'){
 
                $pattern = (_linux == true) ? '(\/+[^/]+\/?)$' : ''; //msdos repace missing!
 
                $filepath = ereg_replace($pattern, '', $path);                
 
            }else{
 
                $filepath           = $path . $filename;
 
            }
 
           $flag               = 'folders';
 
            $tmp['filepath']    = $filepath;
 
            $tmp['description'] = htmlentities($filename);
 
            $tmp['perms']       = sprintf("%o",@fileperms($filepath));
 
            $tmp['time']        = date("H:i m-d-y",@filemtime($filepath));
 
            if(@is_file($filepath)){
 
          $flag  = 'files';
 
          $tmp['size'] = filesize($filepath);
 
        }
 
            $eval = sprintf("\$this->%s['%s'] = \$tmp;", $flag, $filename);
 
            eval($eval);
 
        }
 
    }
 
    @closedir($handle);
 
    @ksort($this->files);
 
    @ksort($this->folders);
 
  }
 
  
 
  /**
 
   * Get a human redable size
 
   *
 
   * @param integer $size
 
   * @return string
 
   */
 
  function get_size($size){
 
    $size = (int) $size;
 
    if($size<1000)
 
      $size = sprintf("%0.0f Bytes",$size);
 
    elseif ($size<(1024*1000))
 
      $size = sprintf("%0.2f KB",$size/1024);
 
    elseif ($size<(1024*1024*1000))
 
      $size = sprintf("%0.2f MB",$size/(1024*1024));//1048576
 
    else
 
      $size = sprintf("%0.2f GB",$size/(1024*1024*1024));//1073741824
 
    return $size;
 
  }
 
  
 
  /**
 
   * Dowload a file from server
 
   *
 
   * @param string $file
 
   */
 
  function download($file){
 
    if(is_file($file) && @fopen($file,'r')){
 
        header("Content-type: application/force-download");
 
        header(sprintf("Content-Disposition: attachment; filename=%s",basename($file)));
 
        @readfile($file);
 
    }else{
 
      header('HTTP/1.0 401 Unauthorized');
 
    }
 
      exit;
 
  }
 
  
 
  /**
 
   * Make a folder on the server
 
   *
 
   * @param string $dir
 
   * @param string $perm
 
   */
 
  function mkdir ($dir, $perm='0777'){
 
    $tmp  = explode(_slash, $dir);
 
    $path = '';
 
    foreach ($tmp as $local) {
 
        $path .= $local . _slash; 
 
      $mkdir = "if(@mkdir('$dir',$perm)==false) return false;";
 
      eval($mkdir);
 
    }
 
  }
 
 
  /**
 
   * Cahnge file perms
 
   *
 
   * @param string $file
 
   * @param string $perm
 
   */
 
  function chmod ($file, $perm) {
 
    $perm  = ereg('[1-7]{1,3}',$perm)? sprintf("0%d",$perm) : "'$perm'";
 
      $chmod = "@chmod('$file', $perm);";
 
      eval($chmod);
 
  }
 
  
 
  /**
 
   * Upload a file/s to the server
 
   *
 
   * @param string $to
 
   */
 
  function upload ($to) {
 
    foreach ($_FILES as $file) {
 
      if(is_uploaded_file($file['tmp_name'])){
 
        @move_uploaded_file($file['tmp_name'], $to . basename($file['name']));
 
        @chmod($to . basename($file['name']), 0755);
 
      }
 
    }
 
  }
 
  
 
  /**
 
   * Delete a file from the server
 
   *
 
   * @param string $filename
 
   */
 
  function rm ($filename) {
 
    @unlink($filename);
 
  }
 
  
 
  /**
 
   * Generate/overwrite a file with content
 
   *
 
   * @param string $content
 
   * @param string $to
 
   * @return true|false
 
   */
 
  function save ($content, $to){
 
    if(!empty($content) and $fp = @fopen($to, 'w')) {
 
      @fwrite($fp, $content);
 
      return @fclose($fp);
 
    }
 
    return false;
 
  }
 
 
  /**
 
   * Generate/append a file with content
 
   *
 
   * @param string $content
 
   * @param string $to
 
   * @return true|false
 
   */
 
  function append ($string, $to){
 
    if(!empty($string) and $fp = @fopen($to, 'a')) {
 
      @fwrite($fp, $string);
 
      return @fclose($fp);
 
    }
 
    return false;
 
  }
 
}
 
?>
 
 |