PHP Classes

File: index.php

Recommend this page to a friend!
  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: 16 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($srcDirFiles, SORT_NUMERIC);
    else
       
arsort($srcDirFiles, SORT_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($finalCounter, Constants::$COUNTER_LENGTH, Constants::$PAD_CHAR, Constants::$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_DIRECTORY, DIRECTORY_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;
}


?>