blob: a5dc437c2b238bda487424df23cb7868f02b6b41 [file] [log] [blame]
<?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) 2006, 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_helpers.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
*/
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, 'rb'))
{
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
*/
function write_file($path, $data, $mode = 'wb')
{
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
*/
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))
{
$level++;
delete_files($path.'/'.$filename, $del_dir, $level);
}
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
* @return array
*/
function get_filenames($source_dir, $include_path = FALSE)
{
$_filedata = array();
if ($fp = @opendir($source_dir))
{
while (FALSE !== ($file = readdir($fp)))
{
if (@is_dir($source_dir.$file) && substr($file, 0, 1) != '.')
{
get_filenames($source_dir.$file."/", $include_path);
}
elseif (substr($file, 0, 1) != ".")
{
$_filedata[] = ($include_path == TRUE) ? $source_dir.$file : $file;
}
}
return $_filedata;
}
}
// --------------------------------------------------------------------
/**
* Tests for file writability
*
* is_writable() returns TRUE on Windows servers
* when you really can't write to the file
* as the OS reports to PHP as FALSE only if the
* read-only attribute is marked. Ugh?
*
* @access private
* @return void
*/
function is_really_writable($file)
{
if (is_dir($file))
{
$file = rtrim($file, '/').'/'.md5(rand(1,100));
if (($fp = @fopen($file, 'ab')) === FALSE)
{
return FALSE;
}
@chmod($file, 0777);
@unlink($file);
}
elseif (($fp = @fopen($file, 'ab')) === FALSE)
{
return FALSE;
}
fclose($fp);
return TRUE;
}
?>