Propset eol-style to CRLF

simplified paragraph tag cleanup regex
diff --git a/system/libraries/Ftp.php b/system/libraries/Ftp.php
index ec84eb0..1a3ab18 100644
--- a/system/libraries/Ftp.php
+++ b/system/libraries/Ftp.php
@@ -1,618 +1,618 @@
-<?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) 2008, EllisLab, Inc.
- * @license		http://codeigniter.com/user_guide/license.html
- * @link		http://codeigniter.com
- * @since		Version 1.0
- * @filesource
- */
-
-// ------------------------------------------------------------------------
-
-/**
- * FTP Class
- *
- * @package		CodeIgniter
- * @subpackage	Libraries
- * @category	Libraries
- * @author		ExpressionEngine Dev Team
- * @link		http://codeigniter.com/user_guide/libraries/ftp.html
- */
-class CI_FTP {
-
-	var $hostname	= '';
-	var $username	= '';
-	var $password	= '';
-	var $port		= 21;
-	var $passive	= TRUE;
-	var $debug		= FALSE;
-	var $conn_id	= FALSE;
-
-
-	/**
-	 * Constructor - Sets Preferences
-	 *
-	 * The constructor can be passed an array of config values
-	 */
-	function CI_FTP($config = array())
-	{
-		if (count($config) > 0)
-		{
-			$this->initialize($config);
-		}
-
-		log_message('debug', "FTP Class Initialized");
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Initialize preferences
-	 *
-	 * @access	public
-	 * @param	array
-	 * @return	void
-	 */
-	function initialize($config = array())
-	{
-		foreach ($config as $key => $val)
-		{
-			if (isset($this->$key))
-			{
-				$this->$key = $val;
-			}
-		}
-
-		// Prep the hostname
-		$this->hostname = preg_replace('|.+?://|', '', $this->hostname);
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * FTP Connect
-	 *
-	 * @access	public
-	 * @param	array	 the connection values
-	 * @return	bool
-	 */
-	function connect($config = array())
-	{
-		if (count($config) > 0)
-		{
-			$this->initialize($config);
-		}
-
-		if (FALSE === ($this->conn_id = @ftp_connect($this->hostname, $this->port)))
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_unable_to_connect');
-			}
-			return FALSE;
-		}
-
-		if ( ! $this->_login())
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_unable_to_login');
-			}
-			return FALSE;
-		}
-
-		// Set passive mode if needed
-		if ($this->passive == TRUE)
-		{
-			ftp_pasv($this->conn_id, TRUE);
-		}
-
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * FTP Login
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _login()
-	{
-		return @ftp_login($this->conn_id, $this->username, $this->password);
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Validates the connection ID
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _is_conn()
-	{
-		if ( ! is_resource($this->conn_id))
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_no_connection');
-			}
-			return FALSE;
-		}
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-
-	/**
-	 * Change direcotry
-	 *
-	 * The second parameter lets us momentarily turn off debugging so that
-	 * this function can be used to test for the existance of a folder
-	 * without throwing an error.  There's no FTP equivalent to is_dir()
-	 * so we do it by trying to change to a particular directory.
-	 * Internally, this paramter is only used by the "mirror" function below.
-	 *
-	 * @access	public
-	 * @param	string
-	 * @param	bool
-	 * @return	bool
-	 */
-	function changedir($path = '', $supress_debug = FALSE)
-	{
-		if ($path == '' OR ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		$result = @ftp_chdir($this->conn_id, $path);
-
-		if ($result === FALSE)
-		{
-			if ($this->debug == TRUE AND $supress_debug == FALSE)
-			{
-				$this->_error('ftp_unable_to_changedir');
-			}
-			return FALSE;
-		}
-
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Create a directory
-	 *
-	 * @access	public
-	 * @param	string
-	 * @return	bool
-	 */
-	function mkdir($path = '', $permissions = NULL)
-	{
-		if ($path == '' OR ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		$result = @ftp_mkdir($this->conn_id, $path);
-
-		if ($result === FALSE)
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_unable_to_makdir');
-			}
-			return FALSE;
-		}
-
-		// Set file permissions if needed
-		if ( ! is_null($permissions))
-		{
-			$this->chmod($path, (int)$permissions);
-		}
-
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Upload a file to the server
-	 *
-	 * @access	public
-	 * @param	string
-	 * @param	string
-	 * @param	string
-	 * @return	bool
-	 */
-	function upload($locpath, $rempath, $mode = 'auto', $permissions = NULL)
-	{
-		if ( ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		if ( ! file_exists($locpath))
-		{
-			$this->_error('ftp_no_source_file');
-			return FALSE;
-		}
-
-		// Set the mode if not specified
-		if ($mode == 'auto')
-		{
-			// Get the file extension so we can set the upload type
-			$ext = $this->_getext($locpath);
-			$mode = $this->_settype($ext);
-		}
-
-		$mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;
-
-		$result = @ftp_put($this->conn_id, $rempath, $locpath, $mode);
-
-		if ($result === FALSE)
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_unable_to_upload');
-			}
-			return FALSE;
-		}
-
-		// Set file permissions if needed
-		if ( ! is_null($permissions))
-		{
-			$this->chmod($rempath, (int)$permissions);
-		}
-
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Rename (or move) a file
-	 *
-	 * @access	public
-	 * @param	string
-	 * @param	string
-	 * @param	bool
-	 * @return	bool
-	 */
-	function rename($old_file, $new_file, $move = FALSE)
-	{
-		if ( ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		$result = @ftp_rename($this->conn_id, $old_file, $new_file);
-
-		if ($result === FALSE)
-		{
-			if ($this->debug == TRUE)
-			{
-				$msg = ($move == FALSE) ? 'ftp_unable_to_rename' : 'ftp_unable_to_move';
-
-				$this->_error($msg);
-			}
-			return FALSE;
-		}
-
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Move a file
-	 *
-	 * @access	public
-	 * @param	string
-	 * @param	string
-	 * @return	bool
-	 */
-	function move($old_file, $new_file)
-	{
-		return $this->rename($old_file, $new_file, TRUE);
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Rename (or move) a file
-	 *
-	 * @access	public
-	 * @param	string
-	 * @return	bool
-	 */
-	function delete_file($filepath)
-	{
-		if ( ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		$result = @ftp_delete($this->conn_id, $filepath);
-
-		if ($result === FALSE)
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_unable_to_delete');
-			}
-			return FALSE;
-		}
-
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Delete a folder and recursively delete everything (including sub-folders)
-	 * containted within it.
-	 *
-	 * @access	public
-	 * @param	string
-	 * @return	bool
-	 */
-	function delete_dir($filepath)
-	{
-		if ( ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		// Add a trailing slash to the file path if needed
-		$filepath = preg_replace("/(.+?)\/*$/", "\\1/",  $filepath);
-
-		$list = $this->list_files($filepath);
-
-		if ($list !== FALSE AND count($list) > 0)
-		{
-			foreach ($list as $item)
-			{
-				// If we can't delete the item it's probaly a folder so
-				// we'll recursively call delete_dir()
-				if ( ! @ftp_delete($this->conn_id, $item))
-				{
-					$this->delete_dir($item);
-				}
-			}
-		}
-
-		$result = @ftp_rmdir($this->conn_id, $filepath);
-
-		if ($result === FALSE)
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_unable_to_delete');
-			}
-			return FALSE;
-		}
-
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Set file permissions
-	 *
-	 * @access	public
-	 * @param	string 	the file path
-	 * @param	string	the permissions
-	 * @return	bool
-	 */
-	function chmod($path, $perm)
-	{
-		if ( ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		// Permissions can only be set when running PHP 5
-		if ( ! function_exists('ftp_chmod'))
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_unable_to_chmod');
-			}
-			return FALSE;
-		}
-
-		$result = @ftp_chmod($this->conn_id, $perm, $path);
-
-		if ($result === FALSE)
-		{
-			if ($this->debug == TRUE)
-			{
-				$this->_error('ftp_unable_to_chmod');
-			}
-			return FALSE;
-		}
-
-		return TRUE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * FTP List files in the specified directory
-	 *
-	 * @access	public
-	 * @return	array
-	 */
-	function list_files($path = '.')
-	{
-		if ( ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		return ftp_nlist($this->conn_id, $path);
-	}
-
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Read a directory and recreate it remotely
-	 *
-	 * This function recursively reads a folder and everything it contains (including
-	 * sub-folders) and creates a mirror via FTP based on it.  Whatever the directory structure
-	 * of the original file path will be recreated on the server.
-	 *
-	 * @access	public
-	 * @param	string	path to source with trailing slash
-	 * @param	string	path to destination - include the base folder with trailing slash
-	 * @return	bool
-	 */
-	function mirror($locpath, $rempath)
-	{
-		if ( ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		// Open the local file path
-		if ($fp = @opendir($locpath))
-		{
-			// Attempt to open the remote file path.
-			if ( ! $this->changedir($rempath, TRUE))
-			{
-				// If it doesn't exist we'll attempt to create the direcotory
-				if ( ! $this->mkdir($rempath) OR ! $this->changedir($rempath))
-				{
-					return FALSE;
-				}
-			}
-
-			// Recursively read the local directory
-			while (FALSE !== ($file = readdir($fp)))
-			{
-				if (@is_dir($locpath.$file) && substr($file, 0, 1) != '.')
-				{
-					$this->mirror($locpath.$file."/", $rempath.$file."/");
-				}
-				elseif (substr($file, 0, 1) != ".")
-				{
-					// Get the file extension so we can se the upload type
-					$ext = $this->_getext($file);
-					$mode = $this->_settype($ext);
-
-					$this->upload($locpath.$file, $rempath.$file, $mode);
-				}
-			}
-			return TRUE;
-		}
-
-		return FALSE;
-	}
-
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Extract the file extension
-	 *
-	 * @access	private
-	 * @param	string
-	 * @return	string
-	 */
-	function _getext($filename)
-	{
-		if (FALSE === strpos($filename, '.'))
-		{
-			return 'txt';
-		}
-
-		$x = explode('.', $filename);
-		return end($x);
-	}
-
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Set the upload type
-	 *
-	 * @access	private
-	 * @param	string
-	 * @return	string
-	 */
-	function _settype($ext)
-	{
-		$text_types = array(
-							'txt',
-							'text',
-							'php',
-							'phps',
-							'php4',
-							'js',
-							'css',
-							'htm',
-							'html',
-							'phtml',
-							'shtml',
-							'log',
-							'xml'
-							);
-
-
-		return (in_array($ext, $text_types)) ? 'ascii' : 'binary';
-	}
-
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Close the connection
-	 *
-	 * @access	public
-	 * @param	string	path to source
-	 * @param	string	path to destination
-	 * @return	bool
-	 */
-	function close()
-	{
-		if ( ! $this->_is_conn())
-		{
-			return FALSE;
-		}
-
-		@ftp_close($this->conn_id);
-	}
-
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Display error message
-	 *
-	 * @access	private
-	 * @param	string
-	 * @return	bool
-	 */
-	function _error($line)
-	{
-		$CI =& get_instance();
-		$CI->lang->load('ftp');
-		show_error($CI->lang->line($line));
-	}
-
-
-}
-// END FTP Class
-
-/* End of file Ftp.php */
+<?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) 2008, EllisLab, Inc.

+ * @license		http://codeigniter.com/user_guide/license.html

+ * @link		http://codeigniter.com

+ * @since		Version 1.0

+ * @filesource

+ */

+

+// ------------------------------------------------------------------------

+

+/**

+ * FTP Class

+ *

+ * @package		CodeIgniter

+ * @subpackage	Libraries

+ * @category	Libraries

+ * @author		ExpressionEngine Dev Team

+ * @link		http://codeigniter.com/user_guide/libraries/ftp.html

+ */

+class CI_FTP {

+

+	var $hostname	= '';

+	var $username	= '';

+	var $password	= '';

+	var $port		= 21;

+	var $passive	= TRUE;

+	var $debug		= FALSE;

+	var $conn_id	= FALSE;

+

+

+	/**

+	 * Constructor - Sets Preferences

+	 *

+	 * The constructor can be passed an array of config values

+	 */

+	function CI_FTP($config = array())

+	{

+		if (count($config) > 0)

+		{

+			$this->initialize($config);

+		}

+

+		log_message('debug', "FTP Class Initialized");

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Initialize preferences

+	 *

+	 * @access	public

+	 * @param	array

+	 * @return	void

+	 */

+	function initialize($config = array())

+	{

+		foreach ($config as $key => $val)

+		{

+			if (isset($this->$key))

+			{

+				$this->$key = $val;

+			}

+		}

+

+		// Prep the hostname

+		$this->hostname = preg_replace('|.+?://|', '', $this->hostname);

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * FTP Connect

+	 *

+	 * @access	public

+	 * @param	array	 the connection values

+	 * @return	bool

+	 */

+	function connect($config = array())

+	{

+		if (count($config) > 0)

+		{

+			$this->initialize($config);

+		}

+

+		if (FALSE === ($this->conn_id = @ftp_connect($this->hostname, $this->port)))

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_unable_to_connect');

+			}

+			return FALSE;

+		}

+

+		if ( ! $this->_login())

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_unable_to_login');

+			}

+			return FALSE;

+		}

+

+		// Set passive mode if needed

+		if ($this->passive == TRUE)

+		{

+			ftp_pasv($this->conn_id, TRUE);

+		}

+

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * FTP Login

+	 *

+	 * @access	private

+	 * @return	bool

+	 */

+	function _login()

+	{

+		return @ftp_login($this->conn_id, $this->username, $this->password);

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Validates the connection ID

+	 *

+	 * @access	private

+	 * @return	bool

+	 */

+	function _is_conn()

+	{

+		if ( ! is_resource($this->conn_id))

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_no_connection');

+			}

+			return FALSE;

+		}

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+

+	/**

+	 * Change direcotry

+	 *

+	 * The second parameter lets us momentarily turn off debugging so that

+	 * this function can be used to test for the existance of a folder

+	 * without throwing an error.  There's no FTP equivalent to is_dir()

+	 * so we do it by trying to change to a particular directory.

+	 * Internally, this paramter is only used by the "mirror" function below.

+	 *

+	 * @access	public

+	 * @param	string

+	 * @param	bool

+	 * @return	bool

+	 */

+	function changedir($path = '', $supress_debug = FALSE)

+	{

+		if ($path == '' OR ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		$result = @ftp_chdir($this->conn_id, $path);

+

+		if ($result === FALSE)

+		{

+			if ($this->debug == TRUE AND $supress_debug == FALSE)

+			{

+				$this->_error('ftp_unable_to_changedir');

+			}

+			return FALSE;

+		}

+

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Create a directory

+	 *

+	 * @access	public

+	 * @param	string

+	 * @return	bool

+	 */

+	function mkdir($path = '', $permissions = NULL)

+	{

+		if ($path == '' OR ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		$result = @ftp_mkdir($this->conn_id, $path);

+

+		if ($result === FALSE)

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_unable_to_makdir');

+			}

+			return FALSE;

+		}

+

+		// Set file permissions if needed

+		if ( ! is_null($permissions))

+		{

+			$this->chmod($path, (int)$permissions);

+		}

+

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Upload a file to the server

+	 *

+	 * @access	public

+	 * @param	string

+	 * @param	string

+	 * @param	string

+	 * @return	bool

+	 */

+	function upload($locpath, $rempath, $mode = 'auto', $permissions = NULL)

+	{

+		if ( ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		if ( ! file_exists($locpath))

+		{

+			$this->_error('ftp_no_source_file');

+			return FALSE;

+		}

+

+		// Set the mode if not specified

+		if ($mode == 'auto')

+		{

+			// Get the file extension so we can set the upload type

+			$ext = $this->_getext($locpath);

+			$mode = $this->_settype($ext);

+		}

+

+		$mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;

+

+		$result = @ftp_put($this->conn_id, $rempath, $locpath, $mode);

+

+		if ($result === FALSE)

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_unable_to_upload');

+			}

+			return FALSE;

+		}

+

+		// Set file permissions if needed

+		if ( ! is_null($permissions))

+		{

+			$this->chmod($rempath, (int)$permissions);

+		}

+

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Rename (or move) a file

+	 *

+	 * @access	public

+	 * @param	string

+	 * @param	string

+	 * @param	bool

+	 * @return	bool

+	 */

+	function rename($old_file, $new_file, $move = FALSE)

+	{

+		if ( ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		$result = @ftp_rename($this->conn_id, $old_file, $new_file);

+

+		if ($result === FALSE)

+		{

+			if ($this->debug == TRUE)

+			{

+				$msg = ($move == FALSE) ? 'ftp_unable_to_rename' : 'ftp_unable_to_move';

+

+				$this->_error($msg);

+			}

+			return FALSE;

+		}

+

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Move a file

+	 *

+	 * @access	public

+	 * @param	string

+	 * @param	string

+	 * @return	bool

+	 */

+	function move($old_file, $new_file)

+	{

+		return $this->rename($old_file, $new_file, TRUE);

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Rename (or move) a file

+	 *

+	 * @access	public

+	 * @param	string

+	 * @return	bool

+	 */

+	function delete_file($filepath)

+	{

+		if ( ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		$result = @ftp_delete($this->conn_id, $filepath);

+

+		if ($result === FALSE)

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_unable_to_delete');

+			}

+			return FALSE;

+		}

+

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Delete a folder and recursively delete everything (including sub-folders)

+	 * containted within it.

+	 *

+	 * @access	public

+	 * @param	string

+	 * @return	bool

+	 */

+	function delete_dir($filepath)

+	{

+		if ( ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		// Add a trailing slash to the file path if needed

+		$filepath = preg_replace("/(.+?)\/*$/", "\\1/",  $filepath);

+

+		$list = $this->list_files($filepath);

+

+		if ($list !== FALSE AND count($list) > 0)

+		{

+			foreach ($list as $item)

+			{

+				// If we can't delete the item it's probaly a folder so

+				// we'll recursively call delete_dir()

+				if ( ! @ftp_delete($this->conn_id, $item))

+				{

+					$this->delete_dir($item);

+				}

+			}

+		}

+

+		$result = @ftp_rmdir($this->conn_id, $filepath);

+

+		if ($result === FALSE)

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_unable_to_delete');

+			}

+			return FALSE;

+		}

+

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Set file permissions

+	 *

+	 * @access	public

+	 * @param	string 	the file path

+	 * @param	string	the permissions

+	 * @return	bool

+	 */

+	function chmod($path, $perm)

+	{

+		if ( ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		// Permissions can only be set when running PHP 5

+		if ( ! function_exists('ftp_chmod'))

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_unable_to_chmod');

+			}

+			return FALSE;

+		}

+

+		$result = @ftp_chmod($this->conn_id, $perm, $path);

+

+		if ($result === FALSE)

+		{

+			if ($this->debug == TRUE)

+			{

+				$this->_error('ftp_unable_to_chmod');

+			}

+			return FALSE;

+		}

+

+		return TRUE;

+	}

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * FTP List files in the specified directory

+	 *

+	 * @access	public

+	 * @return	array

+	 */

+	function list_files($path = '.')

+	{

+		if ( ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		return ftp_nlist($this->conn_id, $path);

+	}

+

+	// ------------------------------------------------------------------------

+

+	/**

+	 * Read a directory and recreate it remotely

+	 *

+	 * This function recursively reads a folder and everything it contains (including

+	 * sub-folders) and creates a mirror via FTP based on it.  Whatever the directory structure

+	 * of the original file path will be recreated on the server.

+	 *

+	 * @access	public

+	 * @param	string	path to source with trailing slash

+	 * @param	string	path to destination - include the base folder with trailing slash

+	 * @return	bool

+	 */

+	function mirror($locpath, $rempath)

+	{

+		if ( ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		// Open the local file path

+		if ($fp = @opendir($locpath))

+		{

+			// Attempt to open the remote file path.

+			if ( ! $this->changedir($rempath, TRUE))

+			{

+				// If it doesn't exist we'll attempt to create the direcotory

+				if ( ! $this->mkdir($rempath) OR ! $this->changedir($rempath))

+				{

+					return FALSE;

+				}

+			}

+

+			// Recursively read the local directory

+			while (FALSE !== ($file = readdir($fp)))

+			{

+				if (@is_dir($locpath.$file) && substr($file, 0, 1) != '.')

+				{

+					$this->mirror($locpath.$file."/", $rempath.$file."/");

+				}

+				elseif (substr($file, 0, 1) != ".")

+				{

+					// Get the file extension so we can se the upload type

+					$ext = $this->_getext($file);

+					$mode = $this->_settype($ext);

+

+					$this->upload($locpath.$file, $rempath.$file, $mode);

+				}

+			}

+			return TRUE;

+		}

+

+		return FALSE;

+	}

+

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Extract the file extension

+	 *

+	 * @access	private

+	 * @param	string

+	 * @return	string

+	 */

+	function _getext($filename)

+	{

+		if (FALSE === strpos($filename, '.'))

+		{

+			return 'txt';

+		}

+

+		$x = explode('.', $filename);

+		return end($x);

+	}

+

+

+	// --------------------------------------------------------------------

+

+	/**

+	 * Set the upload type

+	 *

+	 * @access	private

+	 * @param	string

+	 * @return	string

+	 */

+	function _settype($ext)

+	{

+		$text_types = array(

+							'txt',

+							'text',

+							'php',

+							'phps',

+							'php4',

+							'js',

+							'css',

+							'htm',

+							'html',

+							'phtml',

+							'shtml',

+							'log',

+							'xml'

+							);

+

+

+		return (in_array($ext, $text_types)) ? 'ascii' : 'binary';

+	}

+

+	// ------------------------------------------------------------------------

+

+	/**

+	 * Close the connection

+	 *

+	 * @access	public

+	 * @param	string	path to source

+	 * @param	string	path to destination

+	 * @return	bool

+	 */

+	function close()

+	{

+		if ( ! $this->_is_conn())

+		{

+			return FALSE;

+		}

+

+		@ftp_close($this->conn_id);

+	}

+

+	// ------------------------------------------------------------------------

+

+	/**

+	 * Display error message

+	 *

+	 * @access	private

+	 * @param	string

+	 * @return	bool

+	 */

+	function _error($line)

+	{

+		$CI =& get_instance();

+		$CI->lang->load('ftp');

+		show_error($CI->lang->line($line));

+	}

+

+

+}

+// END FTP Class

+

+/* End of file Ftp.php */

 /* Location: ./system/libraries/Ftp.php */
\ No newline at end of file