Revision: 38596
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 5, 2011 16:45 by asdasDan
Initial Code
<?php class fileManipulation { protected $__workingFile = NULL; protected $_workingHandle = NULL; protected $_workingMode = NULL; protected $_handleExists = FALSE; function __construct($fileName) { // Error out if the file is a directory, or doesn't exist if ((!@file_exists($fileName)) || (@is_dir($fileName))) { exit("File does not exist, or is a directory."); } else { $this->_workingFile = $fileName; } } /* ####################### FILE INFORMATION ####################### */ /** * * @return string Name of file that the user is working with. */ function getFile() { return $this->_workingFile; } /** * Allows the end user to retrieve specific information about the working file. * * @return array Associative array of specific file information. */ function information() { // Raw filesize followed by MB (Hundreths placement) $fileSize = @filesize($this->_workingFile); $fileSizeMB = @round($fileSize/1048576, 2); // Use stat() to retrieve basic access info $statInfo = @stat($this->_workingFile); $lastAccess = $statInfo['atime']; $lastModified = $statInfo['mtime']; // Retrieve complex permission values $complexPermissions = @fileperms($this->_workingFile); // Retrieve last 3 complex file permission values (ie 777 or 644) $simplePermissions = @substr(decoct($complexPermissions), 3); // Convert complex permissions to rw-r.. format $ufPermissions = $this->_advancedPerms($complexPermissions); // Simple file permissions $isReadable = @is_readable($this->_workingFile); ## -- Note: is_writable() handles errors with an E_WARNING, so set value to 0(False) upon failure $isWritable = (@is_writable($this->_workingFile)!=1) ? 0 : 1; // Return associative array to obtain singled out information return array( "fileSize" => $fileSizeMB, "lastAccess" => $lastAccess, "lastModified" => $lastModified, "complexPerms" => $complexPermissions, "simplePerms" => $simplePermissions, "ufPerms" => $ufPermissions, "isReadable" => $isReadable, "isWritable" => $isWritable); } /** * Takes a complex permission string and turns it into a symbolic * notation, protected since it's only available to the information() function. * * @param int $permString A string of permissions in the format of: 33206 * @return string A string in the format of -rw-r--r-- */ protected function _advancedPerms($permString) { if (($permString & 0xC000) == 0xC000) { $notation = "s"; // Socket } elseif (($permString & 0xA000) == 0xA000) { $notation = "l"; // Symbolic Link } elseif (($permString & 0x8000) == 0x8000) { $notation = "-"; // Regular } elseif (($permString & 0x6000) == 0x6000) { $notation = "b"; // Block special } elseif (($permString & 0x4000) == 0x4000) { $notation = "d"; // Directory } elseif (($permString & 0x2000) == 0x2000) { $notation = "c"; // Character special } elseif (($permString & 0x1000) == 0x1000) { $notation = "p"; // FIFO pipe } else { $notation = "u"; // Unknown } // Owner $notation .= (($permString & 0x0100) ? 'r' : '-'); $notation .= (($permString & 0x0080) ? 'w' : '-'); $notation .= (($permString & 0x0040) ? (($permString & 0x0800) ? 's' : 'x' ) : (($permString & 0x0800) ? 'S' : '-')); // Group $notation .= (($permString & 0x0020) ? 'r' : '-'); $notation .= (($permString & 0x0010) ? 'w' : '-'); $notation .= (($permString & 0x0008) ? (($permString & 0x0400) ? 's' : 'x' ) : (($permString & 0x0400) ? 'S' : '-')); // World $notation .= (($permString & 0x0004) ? 'r' : '-'); $notation .= (($permString & 0x0002) ? 'w' : '-'); $notation .= (($permString & 0x0001) ? (($permString & 0x0200) ? 't' : 'x' ) : (($permString & 0x0200) ? 'T' : '-')); return $notation; } /* ####################### FILE INFORMATION ####################### */ /* ####################### FILE MODIFICATIONS ####################### */ function newMode($newMode) { // decoct makes 0777, 777, etc return (@chmod($this->_workingFile, decoct($newMode))); } function hardCopy($newName) // hardCopy overwrites files that exist { return @copy($this->_workingFile, $newName); } function softCopy($newName) // if file exists dont copy, otherwise copy { return (@file_exists($newName)) ? FALSE : (@copy($this->_workingFile, $newName)); } function newName($newName) { return @rename($this->_workingFile, $newName); } function remove() { return unlink($this->_workingFile); } /* ####################### FILE MODIFICATIONS ####################### */ /** * Allows for a manual method of setting the fopen handle, with an optional * parameter of setting the write mode to something other than a+. * * @param string $writeMode What mode the user wants to open the file with. * @return NONE */ function setHandle($writeMode="a+") { $this->_workingHandle = @fopen($this->_workingFile, $writeMode); $this->_workingMode = $writeMode; $this->_handleExists = ($this->_workingHandle) ? TRUE : FALSE; return; } /** * * @param string $preText Text to display before the reading of the file. * @return string Contents of file being read with fread() */ function read($preText=NULL) { if (!$this->_handleExists) { $this->setHandle(); } return $preText."<br />".fread($this->_workingHandle, filesize($this->_workingFile)); } /** * * @param string/array $data Whatever information desired to be written to the working file. * @return NONE */ function write($data) { if ($this->_workingMode=="r") { die("Invalid mode for writing. <br /><strong>Mode Specified: \"".$this->_workingMode."\"</strong>"); } if (!$this->_handleExists) { $this->setHandle(); } @fwrite($this->_workingHandle, $data); return; } /** * Read a file out into an array without requiring a handle such as fopen, * it uses the file function. * * @param int $limit Limit the amount of lines you want to be returned in the array * @return array An array of elements including each individual line */ function lineByLine($limit=0) { // Setup the array of each line, and a count of total lines $arrayOfLines = file($this->_workingFile); $lineCount = count($arrayOfLines); // If the user set a limit on how many lines they want returned if ($limit!=0) { // Loop through and unset the last element of the array // until it is to the desired line limit for ($i=$lineCount; $i>$limit; $i--) { unset($arrayOfLines[$i]); } } return $arrayOfLines; } function __destruct() { // If any handles exist, ie - a file was opened // and not closed, we close it now if ($this->_handleExists) { fclose($this->_workingHandle); } } }
Initial URL
Initial Description
This was more of a go at learning the basics of OOP, however I decided to document it well in case anyone had any comments. Note: It only works with single files, no directory usage.
Initial Title
File Manipulation/Information
Initial Tags
file, copy
Initial Language
PHP