Blame | Last modification | View Log | RSS feed
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');/*** CodeIgniter** An open source application development framework for PHP 4.3.2 or newer** @package CodeIgniter* @author ExpressionEngine Dev Team* @copyright Copyright (c) 2008, EllisLab, Inc.* @license http://codeigniter.com/user_guide/license.html* @link http://codeigniter.com* @since Version 1.0* @filesource*/// ------------------------------------------------------------------------/*** CodeIgniter File Helpers** @package CodeIgniter* @subpackage Helpers* @category Helpers* @author ExpressionEngine Dev Team* @link http://codeigniter.com/user_guide/helpers/file_helper.html*/// ------------------------------------------------------------------------/*** Read File** Opens the file specfied in the path and returns it as a string.** @access public* @param string path to file* @return string*/if ( ! function_exists('read_file')){function read_file($file){if ( ! file_exists($file)){return FALSE;}if (function_exists('file_get_contents')){return file_get_contents($file);}if ( ! $fp = @fopen($file, FOPEN_READ)){return FALSE;}flock($fp, LOCK_SH);$data = '';if (filesize($file) > 0){$data =& fread($fp, filesize($file));}flock($fp, LOCK_UN);fclose($fp);return $data;}}// ------------------------------------------------------------------------/*** Write File** Writes data to the file specified in the path.* Creates a new file if non-existent.** @access public* @param string path to file* @param string file data* @return bool*/if ( ! function_exists('write_file')){function write_file($path, $data, $mode = FOPEN_WRITE_CREATE_DESTRUCTIVE){if ( ! $fp = @fopen($path, $mode)){return FALSE;}flock($fp, LOCK_EX);fwrite($fp, $data);flock($fp, LOCK_UN);fclose($fp);return TRUE;}}// ------------------------------------------------------------------------/*** Delete Files** Deletes all files contained in the supplied directory path.* Files must be writable or owned by the system in order to be deleted.* If the second parameter is set to TRUE, any directories contained* within the supplied base directory will be nuked as well.** @access public* @param string path to file* @param bool whether to delete any directories found in the path* @return bool*/if ( ! function_exists('delete_files')){function delete_files($path, $del_dir = FALSE, $level = 0){// Trim the trailing slash$path = preg_replace("|^(.+?)/*$|", "\\1", $path);if ( ! $current_dir = @opendir($path))return;while(FALSE !== ($filename = @readdir($current_dir))){if ($filename != "." and $filename != ".."){if (is_dir($path.'/'.$filename)){// Ignore empty foldersif (substr($filename, 0, 1) != '.'){delete_files($path.'/'.$filename, $del_dir, $level + 1);}}else{unlink($path.'/'.$filename);}}}@closedir($current_dir);if ($del_dir == TRUE AND $level > 0){@rmdir($path);}}}// ------------------------------------------------------------------------/*** Get Filenames** Reads the specified directory and builds an array containing the filenames.* Any sub-folders contained within the specified path are read as well.** @access public* @param string path to source* @param bool whether to include the path as part of the filename* @param bool internal variable to determine recursion status - do not use in calls* @return array*/if ( ! function_exists('get_filenames')){function get_filenames($source_dir, $include_path = FALSE, $_recursion = FALSE){static $_filedata = array();if ($fp = @opendir($source_dir)){// reset the array and make sure $source_dir has a trailing slash on the initial callif ($_recursion === FALSE){$_filedata = array();$source_dir = rtrim(realpath($source_dir), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;}while (FALSE !== ($file = readdir($fp))){if (@is_dir($source_dir.$file) && strncmp($file, '.', 1) !== 0){get_filenames($source_dir.$file.DIRECTORY_SEPARATOR, $include_path, TRUE);}elseif (strncmp($file, '.', 1) !== 0){$_filedata[] = ($include_path == TRUE) ? $source_dir.$file : $file;}}return $_filedata;}else{return FALSE;}}}// --------------------------------------------------------------------/*** Get Directory File Information** Reads the specified directory and builds an array containing the filenames,* filesize, dates, and permissions** Any sub-folders contained within the specified path are read as well.** @access public* @param string path to source* @param bool whether to include the path as part of the filename* @param bool internal variable to determine recursion status - do not use in calls* @return array*/if ( ! function_exists('get_dir_file_info')){function get_dir_file_info($source_dir, $include_path = FALSE, $_recursion = FALSE){$_filedata = array();$relative_path = $source_dir;if ($fp = @opendir($source_dir)){// reset the array and make sure $source_dir has a trailing slash on the initial callif ($_recursion === FALSE){$_filedata = array();$source_dir = rtrim(realpath($source_dir), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;}while (FALSE !== ($file = readdir($fp))){if (@is_dir($source_dir.$file) && strncmp($file, '.', 1) !== 0){get_dir_file_info($source_dir.$file.DIRECTORY_SEPARATOR, $include_path, TRUE);}elseif (strncmp($file, '.', 1) !== 0){$_filedata[$file] = get_file_info($source_dir.$file);$_filedata[$file]['relative_path'] = $relative_path;}}return $_filedata;}else{return FALSE;}}}// --------------------------------------------------------------------/*** Get File Info** Given a file and path, returns the name, path, size, date modified* Second parameter allows you to explicitly declare what information you want returned* Options are: name, server_path, size, date, readable, writable, executable, fileperms* Returns FALSE if the file cannot be found.** @access public* @param string path to file* @param mixed array or comma separated string of information returned* @return array*/if ( ! function_exists('get_file_info')){function get_file_info($file, $returned_values = array('name', 'server_path', 'size', 'date')){if ( ! file_exists($file)){return FALSE;}if (is_string($returned_values)){$returned_values = explode(',', $returned_values);}foreach ($returned_values as $key){switch ($key){case 'name':$fileinfo['name'] = substr(strrchr($file, '/'), 1);break;case 'server_path':$fileinfo['server_path'] = $file;break;case 'size':$fileinfo['size'] = filesize($file);break;case 'date':$fileinfo['date'] = filectime($file);break;case 'readable':$fileinfo['readable'] = is_readable($file);break;case 'writable':// There are known problems using is_weritable on IIS. It may not be reliable - consider fileperms()$fileinfo['writable'] = is_writable($file);break;case 'executable':$fileinfo['executable'] = is_executable($file);break;case 'fileperms':$fileinfo['fileperms'] = fileperms($file);break;}}return $fileinfo;}}// --------------------------------------------------------------------/*** Get Mime by Extension** Translates a file extension into a mime type based on config/mimes.php.* Returns FALSE if it can't determine the type, or open the mime config file** Note: this is NOT an accurate way of determining file mime types, and is here strictly as a convenience* It should NOT be trusted, and should certainly NOT be used for security** @access public* @param string path to file* @return mixed*/if ( ! function_exists('get_mime_by_extension')){function get_mime_by_extension($file){$extension = substr(strrchr($file, '.'), 1);global $mimes;if ( ! is_array($mimes)){if ( ! require_once(APPPATH.'config/mimes.php')){return FALSE;}}if (array_key_exists($extension, $mimes)){if (is_array($mimes[$extension])){// Multiple mime types, just give the first onereturn current($mimes[$extension]);}else{return $mimes[$extension];}}else{return FALSE;}}}// --------------------------------------------------------------------/*** Symbolic Permissions** Takes a numeric value representing a file's permissions and returns* standard symbolic notation representing that value** @access public* @param int* @return string*/if ( ! function_exists('symbolic_permissions')){function symbolic_permissions($perms){if (($perms & 0xC000) == 0xC000){$symbolic = 's'; // Socket}elseif (($perms & 0xA000) == 0xA000){$symbolic = 'l'; // Symbolic Link}elseif (($perms & 0x8000) == 0x8000){$symbolic = '-'; // Regular}elseif (($perms & 0x6000) == 0x6000){$symbolic = 'b'; // Block special}elseif (($perms & 0x4000) == 0x4000){$symbolic = 'd'; // Directory}elseif (($perms & 0x2000) == 0x2000){$symbolic = 'c'; // Character special}elseif (($perms & 0x1000) == 0x1000){$symbolic = 'p'; // FIFO pipe}else{$symbolic = 'u'; // Unknown}// Owner$symbolic .= (($perms & 0x0100) ? 'r' : '-');$symbolic .= (($perms & 0x0080) ? 'w' : '-');$symbolic .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-'));// Group$symbolic .= (($perms & 0x0020) ? 'r' : '-');$symbolic .= (($perms & 0x0010) ? 'w' : '-');$symbolic .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-'));// World$symbolic .= (($perms & 0x0004) ? 'r' : '-');$symbolic .= (($perms & 0x0002) ? 'w' : '-');$symbolic .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-'));return $symbolic;}}// --------------------------------------------------------------------/*** Octal Permissions** Takes a numeric value representing a file's permissions and returns* a three character string representing the file's octal permissions** @access public* @param int* @return string*/if ( ! function_exists('octal_permissions')){function octal_permissions($perms){return substr(sprintf('%o', $perms), -3);}}/* End of file file_helper.php *//* Location: ./system/helpers/file_helper.php */