Revision: 17035
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 21, 2009 07:03 by jonniespratley
Initial Code
<?php
/**
* @name FileSystemService.php
* @author Jonnie Spratley
* @version 1.9
*
*/
class FileSystemService
{
private $filename;
private $filepath;
public function __construct()
{
error_reporting ( E_ERROR | E_USER_ERROR | E_PARSE );
}
/**
* @return unknown
*/
public function getFilename()
{
return $this->filename;
}
/**
* @param unknown_type $filename
*/
public function setFilename( $filename )
{
$this->filename = $filename;
}
/**
* @return unknown
*/
public function getFilepath()
{
return $this->filepath;
}
/**
* @param unknown_type $filepath
*/
public function setFilepath( $filepath )
{
$this->filepath = $filepath;
}
/**
* I browse the directory
*
* @param [string] $aPath Path of which directory
* @return [array]
*/
public function browseDirectory( $path = '.', $level = 0, $jsonEncode )
{
// Directories to ignore when listing output. Many hosts will deny PHP access to the cgi-bin.
$ignore = array (
'cgi-bin', '.', '..', '.DS_Store', '.svn'
);
// Open the directory to the handle $dh
$dh = opendir ( $path );
$folders = array ();
// Loop through the directory
while ( false !== ( $file = readdir ( $dh ) ) )
{
//get the extension from the filename
$ext = substr ( strrchr ( $file, '.' ), 1 );
// Check that this file is not to be ignored
if ( ! in_array ( $file, $ignore ) )
{
// Its a directory, so we need to keep reading down...
if ( is_dir ( "$path/$file" ) )
{
//$pathInfo = pathinfo( $file );
// Re-call this same function but on a new directory.this is what makes function recursive.
$folders [] = array (
'filename' => $file,
'path' => "$path/$file",
//'filePath' => ,
'ext' => $ext,
'isDir' => ( is_dir ( $file ) ) ? 'true' : 'false',
'isFile' => ( is_file ( $file ) ) ? 'true' : 'false',
'isWritable' => ( is_writable ( $file ) ) ? 'true' : 'false',
'isReadable' => ( is_readable ( $file ) ) ? 'true' : 'false',
'children' => $this->browseDirectory ( "$path/$file", $level + 1 )
);
rsort ( $folders );
}
else
{
$folders [] = array (
'filename' => $file,
'path' => "$path/$file",
//'filePath' => pathinfo( $file ),
'ext' => $ext,
'isDir' => ( is_dir ( $file ) ) ? 'true' : 'false',
'isFile' => ( is_file ( $file ) ) ? 'true' : 'false',
'isWritable' => ( is_writable ( $file ) ) ? 'true' : 'false',
'isReadable' => ( is_readable ( $file ) ) ? 'true' : 'false'
);
# sort ( $folders );
}
}
}
closedir ( $dh );
return $folders;
}
public function browseSubDirectory( $folder )
{
$subdirArray = array ();
$subDirHandle = opendir ( $folder );
{
while ( false !== ( $file = readdir ( $subDirHandle ) ) )
{
if ( $file != '.' && $file != '..' )
{
$subdirArray [] = array (
'label' => $file
);
}
}
closedir ( $subDirHandle );
}
return $subdirArray;
}
/**
* I get the disk information
*
* @param [string] $aPath the path
* @return [array]
*/
public function getDiskInfo( $aPath )
{
$diskInfoArray = array (
'freeSpace' => disk_free_space ( $aPath ), 'totalSize' => disk_total_space ( $aPath )
);
return $diskInfoArray;
}
/**
* I change the permissions on a file, or directory
*
* @param [string] $whatDir the directory
* @param [int] $aPermissions the permissions
* @return [boolean]
*/
public function changePermissions( $whatDir, $aPermissions )
{
if ( ! $aPermissions )
{
$aPermissions = 0777;
}
$change = false;
// Everything for owner, read and execute for others
if ( chmod ( $whatDir, $aPermissions ) )
{
$change = true;
}
return $change;
}
/**
* I write to a file
*
* @param [string] $filename the file name
* @param [string] $contents file contents
*/
static public function writeFile( $filename, $contents )
{
self::recursiveChmod($filename, 0777, 0777);
$fp = fopen ( $filename, 'w' );
//make sure file is writable
//chmod ( $filename );
$result = array (
'file' => $filename
);
$written = fwrite ( $fp, $contents );
if ( $written )
{
return $result;
}
fclose ( $fp );
return $filename;
}
static public function appendFile( $filename, $contents )
{
$fp = fopen ( $filename, 'a' );
//make sure file is writable
//chmod ( $filename );
$result = array (
'file' => $filename
);
$written = fwrite ( $fp, $contents."\n" );
if ( $written )
{
return $result;
}
fclose ( $fp );
return $filename;
}
static public function readFile( $file )
{
$data = '';
//$contents = array ();
if ( is_file ( $file ) )
{
$fp = fopen ( $file, 'r' );
//make sure file is readable
//chmod ( $filename, 0755 );
if ( ! $fp )
{
echo 'File could not be opened';
exit ();
}
while ( ! feof ( $fp ) )
{
//$contents = array ( 'contents' => fgets ( $fp, 9999 ));
$data .= fgets ( $fp, 9999 );
//dump the contents into an array
}
fclose ( $fp );
}
return $data;
}
/**
* I create a directory
*
* @param [string] $aFolder name of the folder
* @param [int] $aPermissions the permissions
*/
public function createDirectory( $aFolder, $aPermissions = 0755 )
{
$oldmask = umask ( 0 );
$newPath = mkdir ( $aFolder, $aPermissions );
$message = '';
umask ( $oldmask );
if ( ! $newPath )
{
$message = 'Error creating ' . $newPath;
}
else
{
$message = 'Created' . $newPath;
}
return $message;
}
/**
* I remove a file
*
* @param [string] $whatDir
* @param [string] $whatFile
* @return [string]
*/
public function removeFile( $whatDir, $whatFile )
{
$filepath = "$whatDir/$whatFile";
$this->changePermissions ( $filepath, 0777 );
$removeFile = unlink ( $filepath );
$message = '';
if ( ! $removeFile )
{
$message = 'There was a problem removing the file.';
}
else
{
$message = "$whatFile was removed.";
}
return $message;
}
public function escapeContents( $contents )
{
return htmlspecialchars ( $contents );
}
private function getFormattedDate( $aFile )
{
$newDate = date ( 'j F Y H:i', $aFile );
return $newDate;
}
public function getDirectory( $path = '.', $level = 0 )
{
// Directories to ignore when listing output. Many hosts will deny PHP access to the cgi-bin.
$ignore = array (
'cgi-bin', '.', '..'
);
// Open the directory to the handle $dh
$dh = opendir ( $path );
$folders = array ();
$subFolders = array ();
// Loop through the directory
while ( false !== ( $file = readdir ( $dh ) ) )
{
// Check that this file is not to be ignored
if ( ! in_array ( $file, $ignore ) )
{
// Its a directory, so we need to keep reading down...
if ( is_dir ( "$path/$file" ) )
{
// Re-call this same function but on a new directory.this is what makes function recursive.
$folders [] = array (
'label' => $file, 'path' => "$path/$file", 'children' => $this->getDirectory ( "$path/$file", $level + 1 )
);
}
else
{
$folders [] = array (
'label' => $file
);
}
}
}
closedir ( $dh );
return $folders;
}
public function compressFile( $filename )
{
$zipfile = "$filename.zip";
//Load file
$data = file_get_contents ( $filename );
//compress file
file_put_contents ( "compress.zlib://$zipfile", $data );
return $zipfile;
}
/**
* I recursivly copy files/folders/contents to a destination.
*
* @param [string] $dirsource - The source
* @param [string] $dirdest - The destination
* @return true
*/
static public function recursive_copy( $dirsource, $dirdest )
{
if ( is_dir ( $dirsource ) )
{
$dir_handle = opendir ( $dirsource );
}
$dirname = substr ( $dirsource, strrpos ( $dirsource, "/" ) + 1 );
mkdir ( $dirdest . "/" . $dirname, 0777 );
while ( $file = readdir ( $dir_handle ) )
{
if ( $file != "." && $file != ".." )
{
if ( ! is_dir ( $dirsource . "/" . $file ) ) copy ( $dirsource . "/" . $file, $dirdest . "/" . $dirname . "/" . $file );
else
{
$dirdest1 = $dirdest . "/" . $dirname;
self::recursive_copy ( $dirsource . "/" . $file, $dirdest1 );
}
}
}
closedir ( $dir_handle );
return true;
}
/**
* I recursively move all files in a source to a destination
*
* @param [string] $dirsource - The source to move
* @param [string] $dirdest - The destination where new files will be moved
*/
static public function recursive_move( $dirsource, $dirdest )
{
if ( is_dir ( $dirsource ) )
{
$dir_handle = opendir ( $dirsource );
}
$dirname = substr ( $dirsource, strrpos ( $dirsource, "/" ) + 1 );
mkdir ( $dirdest . "/" . $dirname, 0777 );
while ( $file = readdir ( $dir_handle ) )
{
if ( $file != "." && $file != ".." )
{
if ( ! is_dir ( $dirsource . "/" . $file ) )
{
copy ( $dirsource . "/" . $file, $dirdest . "/" . $dirname . "/" . $file );
unlink ( $dirsource . "/" . $file );
}
else
{
$dirdest1 = $dirdest . "/" . $dirname;
self::recursive_move ( $dirsource . "/" . $file, $dirdest1 );
}
}
}
closedir ( $dir_handle );
rmdir ( $dirsource );
}
/**
Chmods files and folders with different permissions.
This is an all-PHP alternative to using: \n
@param $path An either relative or absolute path to a file or directory
which should be processed.
@param $filePerm The permissions any found files should get.
@param $dirPerm The permissions any found folder should get.
@return Returns TRUE if the path if found and FALSE if not.
@warning The permission levels has to be entered in octal format, which
normally means adding a zero ("0") in front of the permission level. \n
More info at: http://php.net/chmod.
*/
static public function recursiveChmod($path, $filePerm=0755, $dirPerm=0755)
{
// Check if the path exists
if(!file_exists($path))
{
return(FALSE);
}
// See whether this is a file
if(is_file($path))
{
// Chmod the file with our given filepermissions
chmod($path, $filePerm);
// If this is a directory...
} elseif(is_dir($path)) {
// Then get an array of the contents
$foldersAndFiles = scandir($path);
// Remove "." and ".." from the list
$entries = array_slice($foldersAndFiles, 2);
// Parse every result...
foreach($entries as $entry)
{
// And call this function again recursively, with the same permissions
self::recursiveChmod($path."/".$entry, $filePerm, $dirPerm);
}
// When we are done with the contents of the directory, we chmod the directory itself
chmod($path, $dirPerm);
}
// Everything seemed to work out well, return TRUE
return(TRUE);
}
}
?>
Initial URL
Initial Description
The one and only class for all your file handling needs.
Initial Title
Super File System Service
Initial Tags
Initial Language
PHP