cakephp2-php8/cake/libs/file.php

349 lines
6.2 KiB
PHP
Raw Normal View History

<?php
/* SVN FILE: $Id$ */
/**
* Convenience class for reading, writing and appending to files.
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2005, CakePHP Authors/Developers
*
* Author(s): Michal Tatarynowicz aka Pies <tatarynowicz@gmail.com>
* Larry E. Masters aka PhpNut <nut@phpnut.com>
* Kamil Dzielinski aka Brego <brego.dk@gmail.com>
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @author CakePHP Authors/Developers
* @copyright Copyright (c) 2005, CakePHP Authors/Developers
* @link https://trac.cakephp.org/wiki/Authors Authors/Developers
* @package cake
Merging from sandboxes [1079] Merged [1005] committed by nate but not added to core prior to release. Merged [1078] prior to modifying all developers sandboxes. [1081] adding view and template directories [1082] adding base files for view generator [1083] correcting all package and sub package tags for in doc blocks. Making sure every file in the core has doc block in them [1084] renaming working copy of latest release [1093] Added fix for associations using underscores if var $useTable is set in the associated models. This closes ticket #11. [1094] Fix for Ticket #24. The problem was tracked to a variable in View::_render(); $loadedHelpers was being assigned a reference when it when it should not have been. [1096] Initial work on controller components needs testing. Also added a work around for the basics.php uses(). Using the define DS where the files from the original version are now located in deeper libs directories. [1097] committing a few typos in the code I added [1098] reformatting code in component.php [1104] changed the test route and corrected a regex in inflector. [1111] removing the contructor from dispatcher, it is not needed [1112] Changes made for errors when a file is not present in webroot. Fixed the regex used in Router::parse(). Change the error layout template. [1113] Changes to Folder class to allow setting the permissions mode when constructing. This class needs to be refactored and move everything that is in the contructor out. The constructor should set the vars for use in other Folder::"methods"(). Will work on this at a later time. git-svn-id: https://svn.cakephp.org/repo/trunk/cake@1114 3807eeeb-6ff5-0310-8944-8be069107fe0
2005-10-09 01:56:21 +00:00
* @subpackage cake.cake.libs
* @since CakePHP v 0.2.9
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
* Enter description here...
*
*/
uses('object');
/**
* Convenience class for reading, writing and appending to files.
*
*
* @package cake
Merging from sandboxes [1079] Merged [1005] committed by nate but not added to core prior to release. Merged [1078] prior to modifying all developers sandboxes. [1081] adding view and template directories [1082] adding base files for view generator [1083] correcting all package and sub package tags for in doc blocks. Making sure every file in the core has doc block in them [1084] renaming working copy of latest release [1093] Added fix for associations using underscores if var $useTable is set in the associated models. This closes ticket #11. [1094] Fix for Ticket #24. The problem was tracked to a variable in View::_render(); $loadedHelpers was being assigned a reference when it when it should not have been. [1096] Initial work on controller components needs testing. Also added a work around for the basics.php uses(). Using the define DS where the files from the original version are now located in deeper libs directories. [1097] committing a few typos in the code I added [1098] reformatting code in component.php [1104] changed the test route and corrected a regex in inflector. [1111] removing the contructor from dispatcher, it is not needed [1112] Changes made for errors when a file is not present in webroot. Fixed the regex used in Router::parse(). Change the error layout template. [1113] Changes to Folder class to allow setting the permissions mode when constructing. This class needs to be refactored and move everything that is in the contructor out. The constructor should set the vars for use in other Folder::"methods"(). Will work on this at a later time. git-svn-id: https://svn.cakephp.org/repo/trunk/cake@1114 3807eeeb-6ff5-0310-8944-8be069107fe0
2005-10-09 01:56:21 +00:00
* @subpackage cake.cake.libs
* @since CakePHP v 0.2.9
*/
class File extends Object
{
/**
* Folder of the File
*
* @var Folder
*/
var $folder = null;
/**
* Filename
*
* @var string
*/
var $name = null;
/**
* Constructor
*
* @param string $path
* @param boolean $create Create file if it does not exist
* @return File
*/
function File ($path , $create = false )
{
$this->folder = new Folder( dirname( realpath($path) ) , $create );
$this->name = basename( realpath($path) );
if ( !$this->exists() )
{
if ( $create === true )
{
if ( !$this->create() )
{
return false;
}
}
else
{
return false;
}
}
}
/**
* Return the contents of this File as a string.
*
* @return string Contents
*/
function read ()
{
return file_get_contents( $this->getFullPath() );
}
/**
* Append given data string to this File.
*
* @param string $data Data to write
* @return boolean Success
*/
function append ($data)
{
return $this->write($data, 'a');
}
/**
* Write given data to this File.
*
* @param string $data Data to write to this File.
* @param string $mode Mode of writing. {@link http://php.net/fwrite See fwrite()}.
* @return boolean Success
*/
function write ($data, $mode = 'w')
{
$file = $this->getFullPath();
if (!($handle = fopen( $file , $mode)))
{
print ("[File] Could not open $file with mode $mode!");
return false;
}
if (!fwrite($handle, $data))
return false;
if (!fclose($handle))
return false;
return true;
}
/**
* Get md5 Checksum of file with previous check of Filesize
*
* @param string $force Data to write to this File.
* @return string md5 Checksum {@link http://php.net/md5_file See md5_file()}
*/
function getMd5 ($force = false)
{
$md5 = '';
if ( $force == true || $this->getSize(false) < MAX_MD5SIZE )
{
$md5 = md5_file( $this->getFullPath() );
}
return $md5;
}
/**
* Get the Filesize
*
* @param boolean $humanReadeble Data to write to this File.
* @return string|int filesize as int or as humand readable string
*/
function getSize ()
{
$size = filesize( $this->getFullPath() );
return $size;
}
/**
* Get the Fileextension
*
* @return string The Fileextension
*/
function getExt ()
{
$ext = '';
$parts = explode('.', $this->getName() );
if ( count($parts) > 1 )
{
$ext = array_pop( $parts );
}
else
{
$ext = '';
}
return $ext;
}
/**
* Get the Filename
*
* @return string The Filename
*/
function getName ()
{
return $this->name;
}
/**
* get the File owner
*
* @return int the Fileowner
*/
function getOwner ()
{
return fileowner( $this->getFullPath() );
}
/**
* get the File owner
*
* @return int the Filegroup
*/
function getGroup ()
{
return filegroup( $this->getFullPath() );
}
/**
* creates the File
*
* @return boolean
*/
function create ()
{
$dir = $this->folder->pwd();
if ( file_exists( $dir ) && is_dir($dir) && is_writable($dir) && !$this->exists() )
{
if ( !touch( $this->getFullPath() ) )
{
print ("[File] Could not create $this->getName()!");
return false;
}
else
{
return true;
}
}
else
{
print ("[File] Could not create $this->getName()!");
return false;
}
}
/**
* deletes the File
*
* @return boolean
*/
function exists ()
{
return file_exists( $this->getFullPath() );
}
/**
* deletes the File
*
* @return boolean
*/
function delete ()
{
return unlink( $this->getFullPath() );
}
/**
* check if the File writable
*
* @return boolean
*/
function writable ()
{
return is_writable( $this->getFullPath() );
}
/**
* check if the File executable
*
* @return boolean
*/
function executable ()
{
return is_executable( $this->getFullPath() );
}
/**
* check if the File readable
*
* @return boolean
*/
function readable ()
{
return is_readable( $this->getFullPath() );
}
/**
* get last access time
*
* @return int timestamp
*/
function lastAccess ()
{
return fileatime( $this->getFullPath() );
}
/**
* get last access time
*
* @return int timestamp
*/
function lastChange ()
{
return filemtime( $this->getFullPath() );
}
/**
* get the current folder
*
* @return Folder
*/
function getFolder ()
{
return $this->folder;
}
/**
* get the chmod of the File
*
* @return string
*/
function getChmod ( )
{
return substr(sprintf('%o', fileperms($this->getFullPath())), -4);
}
/**
* get the chmod of the File
*
* @return string
*/
function getFullPath ( )
{
return Folder::slashTerm($this->folder->pwd()).$this->getName();
}
}
?>