Вход Регистрация
Файл: upload/include/library/phpfox/ftp/ftp.class.php
Строк: 231
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * Handles FTP (File Transfer Protocol).
 * We mainly use this in the AdminCP to make things easier on Admins to upload new
 * plug-ins or themes without the need to open an FTP client and instead upload a archive
 * and with the access details provided we can use FTP commands to do tasks which normally
 * cant be done via HTTP.
 *
 * Example:
 * <code>
 * // Connect to the FTP server
 * Phpfox::getLib('ftp')->connect('192.168.0.2', 'user', 'pass');
 * 
 * // Upload a file tot he server
 * Phpfox::getLib('ftp')->put('/var/www/sample.jpg', '/home/site/public_html/sample.jpg');
 * </code>
 * 
 * @link http://php.net/manual/en/book.ftp.php
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond Benc
 * @package         Phpfox
 * @version         $Id: $
 */
class Phpfox_Ftp
{
    
/**
     * Holds FTP resource
     *
     * @see ftp_connect()
     * @see self::__construct()
     * @var resource
     */
    
private $_oFtp null;
    
    
/**
     * Class constructor. Connects to FTP server.
     *
     * @return mixed Returns TRUE on success, FALSE on failure and NULL if we are to skip the login.
     */
    
public function __construct()
    {
        if (
defined('PHPFOX_FTP_LOGIN_PASS'))
        {
            return;    
        }
        
        
// Connect to FTP host
        
if (!($this->_oFtp ftp_connect(Phpfox::getParam('core.ftp_host'))))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('core.unable_to_connect_to_ftp_host'));
        }
        
        
// Get FTP password, hash and password with the hash
        
$sPassword Phpfox::getParam('core.ftp_password');        
        
$sHash substr(base64_decode(base64_decode($sPassword)), -32);
        
$sPassword substr_replace(base64_decode(base64_decode($sPassword)), '', -32);
        
        
// Make sure the password has match the server hash
        
if (md5(Phpfox::getParam('core.salt')) != $sHash)
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('core.ftp_password_hash_does_not_match_with_server_hash'));
        }        
        
        
// Login with FTP credentials
        
if (!ftp_login($this->_oFtpPhpfox::getParam('core.ftp_username'), $sPassword))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('core.unable_to_login_to_ftp_server'));
        }        
    }
    
    
/**
     * Performs a connection to a FTP server
     *
     * @see ftp_connect()
     * @see ftp_login()
     * @param string $sHost Host to connect to
     * @param string $sUsername User name to use to log into the server
     * @param string $sPassword Password to use to log into the server
     * @return bool TRUE on success, FALSE on failure
     */
    
public function connect($sHost$sUsername$sPassword)
    {
        
Phpfox_Error::skip(true);
        if (!(
$this->_oFtp ftp_connect($sHost)))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('core.unable_to_connect_to_ftp_host'));
        }        
        
        if (!
ftp_login($this->_oFtp$sUsername$sPassword))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('core.unable_to_login_to_ftp_server'));
        }    
        
Phpfox_Error::skip(false);    
        
        return 
true;
    }
    
    
/**
     * Tests the current directory if this is where phpFox is installed.
     *
     * @param mixed $sPage NULL is passed by default and we then find the base directory, however if you know where phpFox is installed you can pass the full path here.
     * @return bool TRUE if we found phpFox, and FALSE if we didn't
     */
    
public function test($sPage null)
    {
        
Phpfox_Error::skip(true);
        
$aList ftp_nlist($this->_oFtp, ($sPage === null $this->getPath() : $sPage) . 'include' PHPFOX_DS 'library' PHPFOX_DS 'phpfox');
        
Phpfox_Error::skip(false);
        
        if ((!
is_array($aList)) || (is_array($aList) && !count($aList)))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('core.unable_to_connect_to_ftp_base_directory_make_sure_the_setting_for_ftp_directory_path_has_the_correct_path'));
        }
        
        return 
true;
    }    
    
    
/**
     * Uploads a file from your computer to the server.
     *
     * @see ftp_put()
     * @param string $sOld Full path to the file on your computer
     * @param string $sNew Full path to where to place the file on the server
     * @return bool TRUE on success, FALSE on failure
     */
    
public function put($sOld$sNew)
    {        
        
$cType FTP_ASCII;
        if (
preg_match('/^(.*?).(gif|jpg|jpeg|png)$/i'$sNew))
        {
            
$cType FTP_BINARY;
        }
        
        if (!
ftp_put($this->_oFtpstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sNew), str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sOld), $cType))
        {
            return 
Phpfox_Error::trigger('Unable to move file ' str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sNew) . ' to ' str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sOld) . '.'E_USER_ERROR);
        }
        
        if (
strtolower(PHP_OS) == 'linux')
        {
            
ftp_chmod($this->_oFtp0644str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sNew));
        }        
        
        return 
true;
    }
    
    
/**
     * Moves a file from one location to another on the FTP server.
     *
     * @see ftp_rename()
     * @param string $sOld Full path to the file we are going to move
     * @param string $sNew Full path to where we are going to place the file
     * @return bool TRUE on success, FALSE on failure
     */
    
public function move($sOld$sNew)
    {        
        
// Use ftp_rename to move the item
        
if (!ftp_rename($this->_oFtpstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sOld), str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sNew)))
        {            
            return 
Phpfox_Error::trigger('Unable to move file ' str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sOld) . ' to ' str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sNew) . '.'E_USER_ERROR);
        }
        
        return 
true;
    }
    
    
/**
     * Changes permission on a file/folder
     *
     * @see ftp_chmod()
     * @param string $sFile Full path to the file we are working with
     * @param string $iPerm Permission to change the file to
     */
    
public function chmod($sFile$iPerm)
    {
        
ftp_chmod($this->_oFtp$iPermstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sFile));
    }
    
    
/**
     * Makes a directory on the server. There is also support to make directories recursively.
     *
     * @see ftp_mkdir()
     * @param string $sDir Full path to the directory to create
     * @param bool $bRecurse TRUE will recursively create directories based on the full path and FALSE will not
     */
    
public function mkdir($sDir$bRecurse false)
    {        
        if (
$bRecurse === true)
        {            
            
$aParts explode(PHPFOX_DStrim($sDirPHPFOX_DS));
            
$sParentDirectory PHPFOX_DS;
            foreach (
$aParts as $sDir)
            {
                if (!
is_dir($sParentDirectory $sDir))
                {
                    
ftp_mkdir($this->_oFtpstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sParentDirectory) . $sDir);
                    if (
strtolower(PHP_OS) == 'linux')
                    {
                        
ftp_chmod($this->_oFtp0755str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sParentDirectory) . $sDir);
                    }
                }                
                
                
$sParentDirectory .= $sDir PHPFOX_DS;
            }            
        }
        else 
        {            
            
$sDir str_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sDir);
            
ftp_mkdir($this->_oFtp$sDir);
            if (
strtolower(PHP_OS) == 'linux')
            {
                
ftp_chmod($this->_oFtp0755$sDir);
            }
        }
    }
    
    
/**
     * Deletes a file on the FTP server
     *
     * @see ftp_delete()
     * @param string $sFile Full path of the file to delete.
     * @return bool TRUE on success, FALSE on failure
     */
    
public function unlink($sFile)
    {
        return 
ftp_delete($this->_oFtpstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sFile));
    }
    
    
/**
     * Removes a directory from the FTP server
     *
     * @param string $sPath Full path to the directory we should remove
     * @return bool TRUE on success, FALSE on failure
     */
    
public function rmdir($sPath)
    {        
        if (!
file_exists($sPath))
        {
            return 
true;
        }
        
        if (
is_file($sPath))
        {
            return 
ftp_delete($this->_oFtpstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sPath));
        }
        
        foreach (
scandir($sPath) as $sItem)
        {            
            if (
$sItem == '.' || $sItem == '..')
            {
                continue;
            }
            
            if (
is_dir($sPath PHPFOX_DS $sItem))
            {            
                
$this->rmdir($sPath PHPFOX_DS $sItem);                
            }
            else
            {        
                if (
is_dir($sPath PHPFOX_DS $sItem))
                {
                    
ftp_rmdir($this->_oFtpstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sPath) . PHPFOX_DS $sItem);
                }
                else 
                {
                    
ftp_delete($this->_oFtpstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sPath) . PHPFOX_DS $sItem);
                }
            }
        }
        
        return 
ftp_rmdir($this->_oFtpstr_replace(PHPFOX_DIRPhpfox::getParam('core.ftp_dir_path'), $sPath));
    }

    
/**
     * Try to find the full path of where we are currently located based on the relative position
     * we are allowed to access on the FTP server.
     *
     * @return mixed FALSE if we cannot find where we are, STRING if we can; which is the full path to where we are
     */
    
public function getPath()
    {
        
Phpfox_Error::skip(true);
        if (
ftp_chdir($this->_oFtpPHPFOX_DIR))
        {
            return 
'';
        }
        
Phpfox_Error::skip(false);
        
        
$sCurrentDirectory ftp_pwd($this->_oFtp);
        
        
$aCache = array();
        
$aParts explode(PHPFOX_DSPHPFOX_DIR);
        foreach (
$aParts as $sPart)
        {
            if (empty(
$sPart))
            {
                continue;
            }
            
            
$aCache[$sPart] = true;
        }        
        
        
$sBase '';
        
$aList ftp_nlist($this->_oFtp'.');
        foreach (
$aList as $sList)
        {
            if (
$sList == '.' || $sList == '..')
            {
                continue;
            }

            
$sList trim($sList'.');
            
$sList trim($sList'/');
            
$sList trim($sList'/');
            
            if (isset(
$aCache[$sList]))
            {
                
$sBase $sList;
                break;
            }
        }        
        
        if (!empty(
$sBase))
        {
            
$aBaseParts explode($sBasePHPFOX_DIR);            
            
            return 
PHPFOX_DS $sBase $aBaseParts[1];
        }
        
        return 
false;
    }
}

?>
Онлайн: 0
Реклама