Source for file FSTools.php
Documentation is available at FSTools.php
* Filesystem tools not provided by default; can recursively create, copy
* and delete folders. Some template methods are provided for extensibility.
* @note This class must be instantiated to be used, although it does
private static $singleton;
* Returns a global instance of FSTools
if (empty(FSTools::$singleton)) FSTools::$singleton =
new FSTools();
* Sets our global singleton to something else; useful for overloading
FSTools::$singleton =
$singleton;
* Recursively creates a directory
* @param string $folder Name of folder to create
* @note Adapted from the PHP manual comment 76612
public function mkdirr($folder) {
$folders =
preg_split("#[\\\\/]#", $folder);
for($i =
0, $c =
count($folders); $i <
$c; $i++
) {
if(empty($folders[$i])) {
// special case for root level
$base .=
DIRECTORY_SEPARATOR;
$base .=
DIRECTORY_SEPARATOR;
* Copy a file, or recursively copy a folder and its contents; modified
* so that copied files, if PHP, have includes removed
* @note Adapted from http://aidanlister.com/repos/v/function.copyr.php
public function copyr($source, $dest) {
// Simple copy for a file
return $this->copy($source, $dest);
// Make destination directory
// Loop through the folder
$dir =
$this->dir($source);
while ( false !==
($entry =
$dir->read()) ) {
if ($entry ==
'.' ||
$entry ==
'..') {
if ($dest !==
"$source/$entry") {
$this->copyr("$source/$entry", "$dest/$entry");
* Overloadable function that tests a filename for copyability. By
* default, everything should be copied; you can restrict things to
* ignore hidden files, unreadable files, etc. This function
* Delete a file, or a folder and its contents
* @note Adapted from http://aidanlister.com/repos/v/function.rmdirr.php
public function rmdirr($dirname)
if (!$this->file_exists($dirname)) {
// Simple delete for a file
if ($this->is_file($dirname) ||
$this->is_link($dirname)) {
return $this->unlink($dirname);
// Loop through the folder
$dir =
$this->dir($dirname);
while (false !==
$entry =
$dir->read()) {
if ($entry ==
'.' ||
$entry ==
'..') {
$this->rmdirr($dirname .
DIRECTORY_SEPARATOR .
$entry);
return $this->rmdir($dirname);
* Recursively globs a directory.
public function globr($dir, $pattern, $flags =
NULL) {
$files =
$this->glob("$dir/$pattern", $flags);
if ($files ===
false) $files =
array();
$sub_dirs =
$this->glob("$dir/*", GLOB_ONLYDIR);
if ($sub_dirs ===
false) $sub_dirs =
array();
foreach ($sub_dirs as $sub_dir) {
$sub_files =
$this->globr($sub_dir, $pattern, $flags);
* Allows for PHP functions to be called and be stubbed.
* @warning This function will not work for functions that need
* to pass references; manually define a stub function for those.
public function __call($name, $args) {
Documentation generated on Thu, 19 Jun 2008 18:49:16 -0400 by phpDocumentor 1.4.2