Login   Register  
PHP Classes
elePHPant
Icontem

File: classes/MyDirectory.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Marius Zadara  >  ExifSort  >  classes/MyDirectory.class.php  >  Download  
File: classes/MyDirectory.class.php
Role: Class source
Content type: text/plain
Description: directory utilities
Class: ExifSort
Read EXIF information from picture files
Author: By
Last change:
Date: 6 years ago
Size: 5,325 bytes
 

Contents

Class file image Download
<?php

/**
 * Class used to simulate basic directory operations.
 * 
 * @author Marius Zadara <marius@zadara.org>
 * @copyright (C) Marius Zadara <marius@zadara.org>
 * @final 
 */
final class MyDirectory
{
    
/**
     * Absolute path to directory
     * @var string 
     */
    
private $path;
    
    
    
/**
     * Constructor of the class - used to set the path of the directory
     * If the path (absolute) is not specified, then the default path (current) is used
     *
     * @param string $path The absolute path of the directory
     * @return Directory
     */
    
public function MyDirectory($path ".")
    {
        
// set the class member
        
$this->path $path;                
    }

    
/**
     * This function is used to validate the current directory
     * 
     * @throws DirectoryException
     * @return TRUE In case the path is valid
     * @return FALSE in case the path is not valid
     */
    
public function validate($validEmpty false)
    {
        
// the resource must exists
        
if (!file_exists($this->path))
            throw new 
DirectoryException(sprintf("The resource '%s' does not exists."$this->path));
            
        
// the resource must be a directory
        
if (!is_dir($this->path))
            throw new 
DirectoryException(sprintf("The resource '%s' is not a directory."$this->path));
            
        
// the resource must be readable
        
if (!is_readable($this->path))
            throw new 
DirectoryException(sprintf("The directory '%s' is not readable."$this->path));
            
        
// try to access the directory
        
$dirHandle = @opendir($this->path);

        if (!
$dirHandle)
            throw new 
DirectoryException(sprintf("The directory '%s' could not be accessed"$this->path));
                        
        
// at this point, the directory is valid
        // according to the parameter, check the content
        
        // files count
        
$filesCount 0;
        
        
// read each record from the directory
        
while (($file readdir($dirHandle)) !== false)
        {
            
// skip the current directory and parent directory
            
if (($file == ".") || ($file == ".."))
                continue;
            
            
// make the file full path
            
$fileFullPath $this->path DIRECTORY_SEPARATOR $file;    
                                
            
// skip all the non-files
            
if (filetype($fileFullPath) != "file")
                continue;
                
            
// skip all the empty files
            
if (filesize($fileFullPath) == 0)
                continue;                                
                
            
// if reached this point, a file has been found
            // continue the loop until we have at least 2 files for comparison
            
$filesCount ++;
            
            
// break the loop when more than 2 files
            
if ($filesCount >= 2)
                break;
        }                
        
        
// check the files count
        
if ($filesCount == 0)
        {
            @
closedir($dirHandle);
            throw new 
DirectoryException(sprintf("The directory '%s' does not contain any valid files."$this->path));
        }
            
        
// need at least 2 files for comparison
        
if ($filesCount 2)
        {
            @
closedir($dirHandle);
            throw new 
DirectoryException(sprintf("The directory '%s' must have at least 2 files for comparison."$this->path));
        }
            
        
// at this point, everything seems ok
        // close the directory handle and return true
        
        
@closedir($dirHandle);
        return 
true;            
    }


    
/**
     * Function used to create a directory using the given path
     * 
     * @return boolean TRUE if the directory has been created
     * @throws DirectoryException If error occured during creation
     *
     */
    
public function create()
    {
        
// try to create the destination directory
        // if not already exists
        
if (!file_exists($this->path))
        {
            if (!
mkdir($this->path))
                throw new 
DirectoryException(sprintf("The path '%s' could not be created"$this->path));
        }
        
        
// make sure that the directory has the persmissions 
        // to write and execute data (everything for the owner, read and execute for the others)
        
if (!@chmod($this->path0777))
            throw new 
DirectoryException(sprintf("Could not set the attributes on the path '%s'."$this->path));
        
        
// everything is ok at this point
        
return true;
    }

    
/*
     * This function is used in order to read the content of the directory
     * @throws DirectoryException If the directory could not be opened to read the content
     */
    
public function getContent()
    {
        
// try to access the directory
        
$dirHandle = @opendir($this->path);

        if (!
$dirHandle)
            throw new 
DirectoryException(sprintf("The directory '%s' could not be accessed"$this->path));
        
        
// init the files list
        
$dirFiles = array();    
            
        
// read each record from the directory
        
while (($file readdir($dirHandle)) !== false)
        {
            
// skip the current directory and parent directory
            
if (($file == ".") || ($file == ".."))
                continue;

            
// make the file fullpath
            
$fileFullPath $this->path DIRECTORY_SEPARATOR $file;    
                                
            
// skip all the non-files
            
if (filetype($fileFullPath) != "file")
                continue;
                
            
// skip all the empty files
            
if (filesize($fileFullPath) == 0)
                continue;                                
                                
            
// add the curent file to the list as the full path using the directory path
            
$dirFiles[] = $this->path DIRECTORY_SEPARATOR $file;     
        }
        
        
// check the files list
        
if (sizeof($dirFiles) == 0)
            throw new 
DirectoryException(sprintf("Could not find any files to add from the directory '%s'."$this->path));
            
        
// return the built list
        
return $dirFiles;
    }
}


?>