| 
<?php
 /**
 * Class used for file operations.
 * The class is final, meaning it can not be extended anymore.
 *
 * @author Marius Zadara <[email protected]>
 * @copyright Marius Zadara <[email protected]>
 * @final
 */
 
 final class File
 {
 // the file path
 private $path;
 
 // date and time
 private $dateTime = false;
 
 // mime type
 private $mimeType = false;
 
 
 /**
 * Constructor
 *
 * @param string $path The absolute path of the file
 */
 public function __construct($path)
 {
 $this->path = $path;
 
 // read the exif information
 $this->readExif();
 }
 
 /**
 * This function will try to read the exif data from the file
 * and update the class members with the information found.
 *
 * If the datetime field has not been found, it will be updated with the time
 * the file has been last modified.
 *
 */
 private function readExif()
 {
 // init the default values
 $fileDateTime = false;
 $mimeType = false;
 
 // try to read the exif data from the file
 $exifData = @read_exif_data($this->path);
 
 // has the date been read ?
 if ($exifData !== false)
 {
 // FileDateTime ///////////////////////////////////////////////////////////////////////
 //            if (isset($exifData['FileDateTime']))
 //            {
 //                // load directly from the record
 //                $fileDateTime = $exifData['FileDateTime'];
 //
 //                echo "FileDateTime: " . $fileDateTime . "<br />";
 //
 //            }
 //            else
 {
 // load from the DateTime record
 if (isset($exifData['DateTime']))
 {
 // get the components
 list($year, $month, $day, $hour, $min, $sec) = sscanf($exifData['DateTime'], "%d:%d:%d %d:%d:%d");
 
 // make the unix timestamp
 $mkTime = @mktime($hour, $min, $sec, $month, $day, $year);
 
 // validate the timestamp
 if (($mkTime !== false) && ($mkTime != -1))
 $fileDateTime = $mkTime;
 }
 else
 {
 // if all failed, set the last modification of the file
 $fileDateTime = filemtime($this->path);
 }
 }
 
 // Mime Type //////////////////////////////////////////////////////////////////////////
 if (isset($exifData['MimeType']))
 $mimeType = $exifData['MimeType'];
 }
 else
 {
 // if all failed, set the last modification of the file
 $fileDateTime = filemtime($this->path);
 
 $extension = pathinfo($this->path, PATHINFO_EXTENSION);
 $extension = strtolower(trim($pathinfo));
 if (($pathinfo != "") && isset(Constants::$EXTENSION_2_MIMETYPE[$extension]))
 $mimeType = Constants::$EXTENSION_2_MIMETYPE[$extension];
 }
 
 
 // update the class members
 $this->dateTime = $fileDateTime;
 $this->mimeType = $mimeType;
 }
 
 /**
 * Getter for the dateTime field
 *
 * @return Timestamp
 */
 public function getDateTime()
 {
 // return the class member
 return $this->dateTime;
 }
 
 
 /**
 * Getter for the mime type
 *
 * @return String The file mime type
 */
 public function getMimeType()
 {
 return $this->mimeType;
 }
 
 
 /**
 * Function used to copy the file to a destination directory
 *
 * @param string $destination
 * @return boolean TRUE/FALSE
 */
 public function copyTo($destination)
 {
 // return the result of copy
 return copy($this->path, $destination);
 }
 
 
 /**
 * Function used to move the file to a destination directory
 *
 * @param string $destination
 * @return boolean TRUE/FALSE
 */
 public function moveTo($destination)
 {
 // return the result of move operation
 return @move($this->path, $destionation);
 }
 }
 
 ?>
 
 
 
 |