summaryrefslogtreecommitdiffstats
path: root/system/libraries
diff options
context:
space:
mode:
Diffstat (limited to 'system/libraries')
-rw-r--r--system/libraries/Ftp.php214
1 files changed, 189 insertions, 25 deletions
diff --git a/system/libraries/Ftp.php b/system/libraries/Ftp.php
index a0c6895bf..3b2be23d5 100644
--- a/system/libraries/Ftp.php
+++ b/system/libraries/Ftp.php
@@ -32,7 +32,7 @@ class CI_FTP {
var $port = 21;
var $passive = TRUE;
var $debug = FALSE;
- var $conn_id;
+ var $conn_id = FALSE;
/**
@@ -80,19 +80,16 @@ class CI_FTP {
*
* @access public
* @param array the connection values
- * @param bool whether to use a secure or standard connection
* @return bool
*/
- function connect($config = array(), $secure = FALSE)
+ function connect($config = array())
{
if (count($config) > 0)
{
$this->initialize($config);
}
- $method = ($secure == FALSE) ? 'ftp_connect' : 'ftp_ssl_connect';
-
- if (FALSE === ($this->conn_id = @$method($this->hostname, $this->port)))
+ if (FALSE === ($this->conn_id = @ftp_connect($this->hostname, $this->port)))
{
if ($this->debug == TRUE)
{
@@ -122,32 +119,40 @@ class CI_FTP {
// --------------------------------------------------------------------
/**
- * Secure FTP Connect
+ * FTP Login
*
- * @access public
- * @param array the connection values
+ * @access private
* @return bool
- */
- function sconnect($config = array())
+ */
+ function _login()
{
- return $this->connect($config, TRUE);
+ return @ftp_login($this->conn_id, $this->username, $this->password);
}
-
+
// --------------------------------------------------------------------
/**
- * FTP Login
+ * Validates the connection ID
*
* @access private
* @return bool
*/
- function _login()
+ function _is_conn()
{
- return @ftp_login($this->conn_id, $this->username, $this->password);
+ if ( ! is_resource($this->conn_id))
+ {
+ if ($this->debug == TRUE)
+ {
+ $this->_error('ftp_no_connection');
+ }
+ return FALSE;
+ }
+ return TRUE;
}
// --------------------------------------------------------------------
+
/**
* Change direcotry
*
@@ -160,11 +165,11 @@ class CI_FTP {
* @access public
* @param string
* @param bool
- * @return array
+ * @return bool
*/
function changedir($path = '', $supress_debug = FALSE)
{
- if ($path == '')
+ if ($path == '' OR ! $this->_is_conn())
{
return FALSE;
}
@@ -190,11 +195,11 @@ class CI_FTP {
*
* @access public
* @param string
- * @return array
+ * @return bool
*/
- function mkdir($path = '')
+ function mkdir($path = '', $permissions = NULL)
{
- if ($path == '')
+ if ($path == '' OR ! $this->_is_conn())
{
return FALSE;
}
@@ -209,6 +214,12 @@ class CI_FTP {
}
return FALSE;
}
+
+ // Set file permissions if needed
+ if ( ! is_null($permissions))
+ {
+ $this->chmod($path, (int)$permissions);
+ }
return TRUE;
}
@@ -222,10 +233,15 @@ class CI_FTP {
* @param string
* @param string
* @param string
- * @return array
+ * @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');
@@ -265,15 +281,148 @@ class CI_FTP {
// --------------------------------------------------------------------
/**
+ * 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_remame' : '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, $filepath.$item))
+ {
+ $this->delete_dir($filepath.$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 array
+ * @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'))
{
@@ -307,7 +456,12 @@ class CI_FTP {
* @return array
*/
function list_files($path = '.')
- {
+ {
+ if ( ! $this->_is_conn())
+ {
+ return FALSE;
+ }
+
return ftp_nlist($this->conn_id, $path);
}
@@ -326,7 +480,12 @@ class CI_FTP {
* @return bool
*/
function mirror($locpath, $rempath)
- {
+ {
+ if ( ! $this->_is_conn())
+ {
+ return FALSE;
+ }
+
// Open the local file path
if ($fp = @opendir($locpath))
{
@@ -427,6 +586,11 @@ class CI_FTP {
*/
function close()
{
+ if ( ! $this->_is_conn())
+ {
+ return FALSE;
+ }
+
@ftp_close($this->conn_id);
}