File Class
			
				The File class offers a set of methods to working with files & directories. This can be done through
				some helper methods or through a more advanced object oriented method where all files and directories are
				wrapped in objects.
			
			
				Usage
				The File class's basic usage is through its helper methods which are listed below.
			
			
				exists($path, $area = null)
				Checks if a file exists. If $path points to a symlink, the symlinks are resolved to make sure whatever it points to is a file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the file to check |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | boolean true if the file in $path exists, false if not | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when an area is used and there is an extension violation. | 
					
						| Example | $exists = File::exists(DOCROOT.'/test.txt');
 | 
					
				
			
			
				create($basepath, $name, $contents = null, $area = null)
				Create a file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $basepath | required | Location to create the new file in |  
									| $name | required | Filename for the new file |  
									| $contents | null | What to put into the new file |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | true | 
					
						| Throws | FileAccessException when the file already exists.
							InvalidPathException when the basepath in not valid or not writable. | 
					
						| Example | File::create(DOCROOT, 'test.txt', 'Contents for file.');
 | 
					
				
			
			
				create_dir($basepath, $name, $chmod = 0777, $area = null)
				Create a directory.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $basepath | required | Location to create the new directory in |  
									| $name | required | Name for the new directory |  
									| $chmod | null | Rights for the new directory |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | bool - the output of the mkdir() PHP function | 
					
						| Throws | InvalidPathException when the basepath does not exist or is not writable.
							FileAccessException when the basepath is not writable. | 
					
						| Example | File::create_dir(DOCROOT, 'test', 0755);
 | 
					
				
			
			
				read($path, $as_string = false, $area = null)
				Reads a file and returns it ($as_string == true) or adds it to the output ($as_string == false).
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the file to read |  
									| $as_string | false | Makes it use readfile() on false or file_get_contents() on true |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | int|string - returns the number of bytes when $as_string was set to false or the file's
							contents as a string when it was set to true. | 
					
						| Throws | InvalidPathException when the file does not exist. | 
					
						| Example | // Returns 'Contents for file.' if you created the file in the example for File::create()
$file_content = File::read(DOCROOT.'test.txt', true);
 | 
					
				
			
			
				read_dir($path, $depth = 0, $filter = null, $area = null)
				Reads directory contents into an array.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the directory to read |  
									| $depth | 0 | How deep the subdirectories are recurred: 0 for unlimited, 1 for only the current
									directory or specific number. |  
									| $filter | null | A filter for which files to read: array() for all or null for
									all but hidden. |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | array - a natural-case sorted array with subdirectories on top. Directories have a string key
						with array value (or false when not read because of $depth limitation) and files are int indexed
						with filename as value. All directories are suffixed with a directory separator. | 
					
						| Throws | InvalidPathException when the path not a directory.
							FileAccessException when the path is not readable. | 
					
						| Example | // Read a directory
$contents = File::read_dir(DOCROOT);
// Read with a limited dept
$contents = File::read_dir(DOCROOT, 2);
// Read with custom rules
$contents = File::read_dir(DOCROOT, 0, array(
	'!^\.', // no hidden files/dirs
	'!^private' => 'dir', // no private dirs
	'\.png$' => 'file', // only get png's
	'\.css$' => 'file', // or css files
	'!^_', // exclude everything that starts with an underscore.
));
/**
 * As you can see above, you can make
 * rules directory or file specific by
 * adding "=> 'file'" or "=> 'dir'"
 * behind the rule.
 */
 | 
					
				
			
			
				update($basepath, $name, $contents = null, $area = null)
				Updates a file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $basepath | required | Location of the file to update |  
									| $name | required | Filename for the file. If it does not exist, it will be created |  
									| $contents | null | What to put into the file |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | true | 
					
						| Throws | InvalidPathException when the basepath not a directory or is not writable.
							FileAccessException when there is no write access. | 
					
						| Example | File::update(DOCROOT, 'test.txt', 'New contents for file.');
 | 
					
				
			
			
				append($basepath, $name, $contents = null, $area = null)
				Appends to an existing file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $basepath | required | Location of the file to append to |  
									| $name | required | Filename for the file. This file has to exist |  
									| $contents | null | What to add to the file |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | true | 
					
						| Throws | InvalidPathException when the basepath not a directory or is not writable.
							FileAccessException when the file does not exist. | 
					
						| Example | File::append(DOCROOT, 'test.txt', 'Additional contents for file.');
 | 
					
				
			
			
				rename($path, $new_path, $source_area = null, $target_area = null)
				Rename or move a directory or file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the file or directory to rename |  
									| $new_path | required | New name of the file or directory |  
									| $source_area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  
									| $target_area | null | Optional Area object to use if $source_area does not contain $new_path, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | boolean result of rename() | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when the filetype is not allowed. | 
					
						| Example | // rename 'test.txt' to 'newname.txt', and move it to a sub-directory
File::rename(DOCROOT.'test.txt', DOCROOT.'folder/newname.txt');
// rename using a single area
File::rename(DOCROOT.'one.jpg', DOCROOT.'final.jpg', 'docroot');
// move and rename between two restrictive areas
File::rename(APPPATH.'tmp/file.jpg', DOCROOT.'folder/image.jpg', 'tmp', 'public');
 | 
					
				
			
			
				rename_dir($path, $new_path, $source_area = null, $target_area = null)
				Alias for File::rename
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the file or directory to rename |  
									| $new_path | required | New name of the file or directory |  
									| $source_area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  
									| $target_area | null | Optional Area object to use if $source_area does not contain $new_path, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | boolean result of rename() | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when the filetype is not allowed. | 
					
						| Example | File::rename(DOCROOT.'/dirname', DOCROOT.'/newdirname');
 | 
					
				
			
			
				copy($path, $new_path, $area = null, $source_area = null, $target_area = null)
				Copies a file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the file to copy |  
									| $new_path | required | Full path, including filename, to copy to |  
									| $source_area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  
									| $target_area | null | Optional Area object to use if $source_area does not contain $new_path, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | boolean result of copy() | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when the filetype is not allowed.
							InvalidPathException when the source path is not a file.
							FileAccessException when the destination file already exists. | 
					
						| Example | // copy the file 'test.txt' from the docroot to a sub directory
File::copy(DOCROOT.'test.txt', DOCROOT.'folder/test.txt');
// copy using a single area
File::copy(DOCROOT.'one.jpg', DOCROOT.'img/one.jpg', 'public');
// copy between two restrictive areas
File::copy(APPPATH.'tmp/1.jpg', DOCROOT.'folder/1.jpg', 'tmp', 'public');
 | 
					
				
			
			
				copy_dir($path, $new_path, $area = null, $source_area = null, $target_area = null)
				Copies a directory.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the directory to copy |  
									| $new_path | required | Path to copy to |  
									| $source_area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  
									| $target_area | null | Optional Area object to use if $source_area does not contain $new_path, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | null | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							InvalidPathException when the source path is not a directory.
							FileAccessException when the destination directory already exists. | 
					
						| Example | File::copy_dir(DOCROOT.'/test', DOCROOT.'/newname');
 | 
					
				
			
			
				delete($path, $area = null)
				Deletes a file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the file to delete |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | boolean result of unlink() | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							InvalidPathException when the source path is not a file. | 
					
						| Example | File::delete(DOCROOT.'/test.txt');
 | 
					
				
			
			
				delete_dir($path, $recursive = true, $delete_top = true, $area = null)
				Deletes a file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the directory to delete |  
									| $recursive | true | Whether to also delete contents of subdirectories |  
									| $delete_top | true | whether to delete the parent dir itself when empty |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | boolean result of unlink() or true when not deleting content of subdirectories | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							InvalidPathException when the source path is not a directory.
							FileAccessException when something went wrong during the delete process. | 
					
						| Example | File::delete_dir(DOCROOT.'/my_dir');
 | 
					
				
			
			
				open_file($path, $lock = true, $area = null)
				Opens a file and optionally locks it.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Location of the file to open |  
									| $lock | true | If true, lock exclusively. If false, don't lock. You can also pass an flock() value explicitly. |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | resource, the file resource | 
					
						| Throws | OutsideAreaException when a path not inside the file area. FileAccessException when the file could not be locked.
 FileAccessException when an invalid $lock value is passed.
 | 
					
						| Example | $resource = File::open_file(DOCROOT.'/my_dir/text.txt');
 | 
					
				
				
					Please note that the $lock value is ignored if file locking is disabled in the base config (which is the default!).
				
			
			
				close_file($resource, $area = null)
				Closes a file and unlocks it.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $resource | required | An open file resource |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | boolean if a lock is used. | 
					
						| Example | $resource = File::open_file(DOCROOT.'/my_dir/text.txt');
// Do something with the resource
File::close_file($resource);
 | 
					
				
			
			
				get($path, $config = array(), $area = null)
				Fetches a file handler for the given file. Read more about handlers.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Path to the file or directory to be wrapped in a handler |  
									| $config | array() | optional config array |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | Returns a new file handler object. | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when the file extension is not allowed. | 
					
						| Example | $handler = File::get(DOCROOT.'/my_dir/text.txt');
 | 
					
				
			
			
				get_url($path, $config = array(), $area = null)
				Retrieves the public url to a file. A url must be set in the base config or in the area config of the used area.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Path to the file |  
									| $config | array() | optional config array |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | The public url for the file. | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when the file extension is not allowed. | 
					
						| Example | $url = File::get_url(DOCROOT.'/my_dir/text.txt');
// Returns something like: http://mydomain.com/mydir/text.txt
 | 
					
				
			
			
				get_permissions($path, $area = null)
				Retrieves the octal permissions for a file or directory.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Path to the file |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | The octal file permissions | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when the file extension is not allowed. | 
					
						| Example | $permissions = File::get_permissions(DOCROOT.'/my_dir/text.txt');
// Returns "0755"
 | 
					
				
			
			
				get_time($path, $type = 'modified', $area = null)
				Retrieves the created or modified time of a file or directory.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Path to the file |  
									| $type | 'modified' | Type of time to retrieve. Must be modified or created |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | The file created/modified unix timestamp | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when the file extension is not allowed. | 
					
						| Example | $permissions = File::get_time(DOCROOT.'/my_dir/text.txt', 'created');
 | 
					
				
			
			
				get_size($path, $area = null)
				Retrieves size in bytes for a file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Path to the file |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | The file size in bytes. | 
					
						| Throws | OutsideAreaException when a path not inside the file area.
							FileAccessException when the file extension is not allowed.
							InvalidPathException when the file is not found. | 
					
						| Example | $filesize = File::get_size(DOCROOT.'/my_dir/text.txt');
 | 
					
				
			
			
				file_info($path, $area = null)
				Retrieves an array of information about the specified file.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Path to the file |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  | 
					
						| Returns | An array with file information items. The array will contain path, filename and extension information,
							the file size and permissions, the creation and last modified timestamps, the detected mime-type and
							the file's character set. | 
					
						| Throws | InvalidPathException when the file is not found.
							InvalidArgumentException when the file info could be determined. | 
					
						| Example | $filesize = File::file_info(DOCROOT.'/my_dir/text.txt');
 | 
					
				
			
			
				download($path, $name = null, $mime = null, $area = null, $delete = false, $disposition = 'attachment')
				Outputs a file, inline or as a downloaded attachment.
				
					
					
						| Static | Yes | 
					
						| Parameters | 
								
									| Param | Default | Description |  
									| $path | required | Path to the file |  
									| $name | null | Override the file's default filename |  
									| $mime | null | Override the file's default mimetype |  
									| $area | null | Area object to use, null for base_config in config file (see advanced
									usage for more information) |  
									| $delete | false | Whether or not to delete the file after download |  
									| $disposition | 'attachment' | whether to download or output inline. Accepts 'attachment' or 'inline', and defaults to 'attachment'. |  | 
					
						| Returns | n/a - this method exits after initiating the download. | 
					
						| Throws | InvalidPathException when the file does not exist.
							InvalidArgumentException if no file info could be retrieved for the file.
							FileAccessException when the file could not be opened for read. | 
					
						| Example | // download file
File::download(DOCROOT.'/my_dir/text.txt', 'newfile.txt');
// output an inline image, for use as an <img> tag source
File::download(DOCROOT.'/img/image.jpg', null, 'image/jpeg', null, false, 'inline');
 | 
					
				
				
					Note that when you call this method, it doesn't immediately download the file. It will schedule a shutdown event
					in which the file is downloaded, and then terminates the script. This ensures that all FuelPHP shutdown functions,
					like updating sessions, will execute as normal.