Login   Register  
PHP Classes
elePHPant
Icontem

File: DirOperator.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Richard Hayes  >  DirOperator  >  DirOperator.php  >  Download  
File: DirOperator.php
Role: Class source
Content type: text/plain
Description: Class
Class: DirOperator
Create, read and delete directories.
Author: By
Last change: Improved API and functionality. PHPdocumentor compliant comments added.
Date: 11 years ago
Size: 4,786 bytes
 

Contents

Class file image Download
<?php
/**
* @author Richard Hayes <richard_c_hayes@yahoo.co.uk> (and special thanks to Igor Storozhev)
* @version    1.5
*
* Class DirOperator used to read, write and delete directories.
*
* <b>Current functionality</b> includes reading, writing, creating and deleting of directories.
* Regular expressions can be used for file/directory inclusion and exclusion.
*/
class DirOperator
{
    
/**
    * @var array contents of directories
    * @access private
    */
    
var $contents = array();

    
/**
    * @var string error messages
    * @access private
    */
    
var $error;

    
/**
    * @var boolean Whether to display directories with output
    * @access private
    */
    
var $showDir false;

    
/**
    * @var boolean Whether to scan subdirectories
    * @access private
    */
    
var $sub false;

    
/**
    * @access public
    * @returns void
    */
    
function DirOperator()
    {
    }

    
/**
    * Resets object to default values
    * @access public
    * @returns void
    */
    
function reset()
    {
        
$this -> contents = array();
        
$this -> error       '';
        
$this -> sub      false;
        
$this -> showDir  false;
    }

    
/**
    * Returns directory contents
    * @access public
    * @returns array
    */
    
function getContents()
    {
        return  
$this -> contents;
    }

    
/**
    * Scan directories for files.
    * @param string $path location of directory
    * @param string $inc reg-ex used for types of files to display.
    * @param string $exc reg-ex used for files and directories not to include with output
    * @access private
    * @returns boolean
    */
    
function scan($path$inc ''$exc '')
    {
        
$dp dir($path);
        if(!
$dp)
        {
            
$this -> error .= "Couldn't open directory $path"
            return 
false;
        }

        while((
$file $dp -> read()) !== false)
        {
            if ((!
is_dir($dp -> path.'/'.$file) && !empty($inc) && !ereg($inc$file)) ||
            (!empty(
$exc) && ereg($exc$file)) || 
            
$file == '.' || $file == '..')
            {
                continue;
            }
            if (
is_dir($dp -> path.'/'.$file))
            {
                if(
$this -> sub)
                {
                    
$dir[] = $file;
                }
                elseif(
$this -> showDir)
                {
                    
$this -> contents[] = array( $file
                    
filesize($dp -> path.'/'.$file),
                    
filemtime($dp -> path.'/'.$file),
                    
true);
                }
            }
            else
            {
                
$this -> contents[] = array( $file
                
filesize($dp -> path.'/'.$file),
                
filemtime($dp -> path.'/'.$file),
                
false);
            }
        }

        
$dp -> close();

        for (
$i 0$i sizeof($dir); $i ++)
        {
            
clearstatcache();

            
$this -> scan($dp -> path.'/'.$dir[$i], $inc$exc);
        }

        return 
true;
    }

    
/**
    * Return files from directories.
    *
    * If variables: $inc or $exc are set they need to be enclosed in "double" quotes.
    * When $inc or $exc are not set All files/directories will be included  with output.
    * Example - 
    * <code>
    * $dir = new DirOperator();
    * $dir -> output('./', "(htm|html|gif)\$", "(.htaccess|phpMyAdmin|nude.jpeg)"));
    * </code>
    * The above code would only output .htm, .html and .gif files and .htaccess, nude.jpeg (files)
    * and phpMyAdmin directory would be ignored. If you are not familiar with regular-expressions, please take 
    * note of the syntax (|\$)
    * @param string $path location of directory
    * @param string $inc reg-ex used for types of files to display.
    * @param string $exc reg-ex used for files and directories not to include with output
    * @access public
    * @returns mixed
    */
    
function output($path$inc ''$exc '')
    {
        if (
$this -> scan($path$inc$exc))
        {
            return 
$this -> contents;
        }
        else
        {
            return 
'';
        }
    }

    
/**
    * Include subdirectories to scan
    * @access public
    * @returns void 
    */
    
function setSubDir()
    {
        
$this -> sub true;
    }

    
/**
    * Exclude subdirectories to scan
    * @access public
    * @returns void 
    */
    
function unsetSubDir()
    {
        
$this -> sub false;
    }

    
/**
    * Display directories with output
    * @access public
    * @returns void 
    */
    
function showDir()
    {
        
$this -> showDir true;
    }

    
/**
    * Hide directories from output
    * @access public
    * @returns void 
    */
    
function hideDir()
    {
        
$this -> showDir false;
    }

    
/**
    * Create a directory
    * @param string $path directory/path/name
    * @param int $perm directory permissions 
    * @access public
    * @returns boolean
    */
    
function create($path$perm 0777)
    {
        if(!
mkdir($path$perm)) 
        {
            
$this->error .= "Couldn\'t create directory $path perm=$perm ";
            return 
false;
        }
        return 
true;
    }

    
/**
    * Deletes a directory
    * @param string $path directory/path/name
    * @access public
    * @returns boolean
    */
    
function delete($path)
    {
        if(!
rmdir($path))
        {
            
$this -> error .= "Couldn\'t delete directory $path ";
            return 
false;
        }
        return 
true;
    }
}
?>