Login   Register  
PHP Classes
elePHPant
Icontem

File: index.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  >  index.php  >  Download  
File: index.php
Role: Example script
Content type: text/plain
Description: Application entry point
Class: ExifSort
Read EXIF information from picture files
Author: By
Last change:
Date: 6 years ago
Size: 5,440 bytes
 

Contents

Class file image Download
<?php

/**
 * Script used to sort the images from a directory by EXIF data.
 *  
 * @category Sorting, File Manipulation
 * @package Sorting
 * @author Marius Zadara <marius@zadara.org>
 * @copyright (C) Marius Zadara <marius@zadara.org>
 * @version 2.0
 * @since File available since version 2.0
 */

///////////////////////////////////////////////////////////////////////////////////////////////////
// PREREQUISITES //////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

// LOAD THE EXCEPTIONS 
include_once 'exceptions/_addExceptions.php';

// LOAD THE UTILITY CLASSES
include_once 'classes/_addClasses.php';


///////////////////////////////////////////////////////////////////////////////////////////////////
// RUN ////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////


// unlimited time executinon granted to script?
if (Constants::$UNLIMITED_TIME !== false)
{
    
// assume unlimited time execution
    
$seconds 0;
    
    
// numeric time execution seconds
    
if (Constants::$UNLIMITED_TIME !== true)
        
$seconds Constants::$UNLIMITED_TIME;
    
    
// set the time limit
    
set_time_limit($seconds);
    
    
// clear the memory being used
    
unset($seconds);
}


// SET-UP /////////////////////////////////////////////////////////////////////////////////////////
// include the script responsible for the source and destination directories setup
require_once("setup.php");

// LOADING ////////////////////////////////////////////////////////////////////////////////////////
// load the content of the source directory into the local array
// use the $srcDirectory from the "setup.php" file
try
{
    
// get the source directory content
    
$srcDirContent $srcDirectory->getContent();

    
// the list with the source directory files
    
$srcDirFiles = array();    
    
    
// the list with the files from the source direcoty
    // for which the exif data could not be read 
    
$badSrcDirFiles = array();

    
// maximum datetime
    
$max 0;
    
    
    
// parse the list with files from the source directory
    
foreach ($srcDirContent as $index => $filename)
    {
        
$file = new File($filename);
        
$dateTime $file->getDateTime();
        
$mimeType $file->getMimeType();

        
// if no information found,
        // add the filename to the bad list
        // these files will also be added in the list
        
if (($dateTime === false) || ($mimeType === false))
            
$badSrcDirFiles[] = $filename;            
        
        
// get the maximum timestamp
        
$max = ($dateTime $max) ? $dateTime $max;
                
        
// add to the list
        
$srcDirFiles[$filename] = $dateTime;
        
        
// clear the memory used
        
unset($file$dateTime$mimeType);
    }
    
    
// sort the source directory files by the datetime
    // using the configuration flag
    
if (Constants::$OUTPUT_ORDER == "ASC")    
        
asort($srcDirFilesSORT_NUMERIC);
    else
        
arsort($srcDirFilesSORT_NUMERIC);
    
    
    
// after the files have been sorted,
    // add the "bad files" to the list as the last ones
    
if (sizeof($badSrcDirFiles) > 0)
    {
        foreach (
$badSrcDirFiles as $index => $filename)
            
$srcDirFiles[$filename] = ++$max;
    }
    
    
// init the counter using the config value
    
$counter Constants::$START_COUNTER;
    
    
// after all the files have been added to the list and sorted,
    // is time to update the destination directory
    
foreach ($srcDirFiles as $filename  => $dateTime)
    {        
        
// reinstanciate the class
        
$file = new File($filename);

        
// get the filename pathinfo
        
$pathinfo pathinfo($filename);
        
        
// save the current counter into a temporary variable
        
$finalCounter $counter;
        
        
// format the counter
        
$finalCounter str_pad($finalCounterConstants::$COUNTER_LENGTHConstants::$PAD_CHARConstants::$PAD_TYPE);
                        
        
// make the destination filename format
        
$destinationFormat str_replace(
            array(
"%counter%""%basename%""%extension%""%filename%"),
            array(
$finalCounter$pathinfo['basename'], $pathinfo['extension'], $pathinfo['filename']),
            
Constants::$DESTINATION_FORMAT
        
);
                                    
        
// make the destionation full path
        
$destPath sprintf("%s%s%s"Constants::$DESTINATION_DIRECTORYDIRECTORY_SEPARATOR$destinationFormat);
                        
        
// default function to apply
        
$function "copyTo";
        
        
// move or copy function ?
        
if (Constants::$ACTION != "COPY")
            
$function "moveTo";
        
        
// call the function on the file object, setting the destination path
        
if (!call_user_func(array($file$function), $destPath))
            throw new 
FileException(sprintf("Error occured while output the file '%s' to '%s'."$filename$destPath));
            
        
// verify the breakpoint - if reached, terminate the loop
        
if ((Constants::$OUTPUT_BREAKPOINT !== false) && ($counter == Constants::$OUTPUT_BREAKPOINT))
            break;        
                            
        
// increment the counter
        
$counter ++;            
    }
    
    
// clear the memory used
    
unset($counter$srcDirFiles$filename$dateTime$file$destPath$finalCounter);
        
    
// display a message
    
echo sprintf("Completed to ouput files to directory '%s'."Constants::$DESTINATION_DIRECTORY);    
}
catch (
DirectoryException $dirEx)
{
    echo 
$dirEx;
}
catch (
FileException $fileEx)
{
    echo 
$fileEx;
}


?>