Вход Регистрация
Файл: adultscript-2.0.3-pro/files/modules/photo/helpers/server.php
Строк: 179
<?php
defined
('_VALID') or die('Restricted Access!');
class 
VHelper_photo_server
{
    private static 
$servers;
    public static function 
get($server_id=NULL$status=NULL)
    {
        if (isset(
self::$servers[$server_id])) {
            return 
self::$servers[$server_id];
        }
        
        
self::log('Initializing multi-server...');
        
        
$sql        = array();
        if (
$server_id) {
            
$sql[]    = "server_id = ".(int) $server_id;
        }
        
        if (
$status) {
            
$sql[]    = "status = '".$status."'";
        }
        
        
$add        = ($sql) ? " WHERE ".implode(' AND '$sql) : '';
    
        
VF::factory_remove('database');
        
$db     VF::factory('database');
        
$db->query("SELECT server_id, server_name, ftp_host, ftp_port,
                           ftp_username, ftp_password, ftp_root,
                           url
                    FROM #__photo_servers"
.$add."
                    ORDER BY last_used ASC
                    LIMIT 1"
);
        if (
$db->affected_rows()) {
            
$server    $db->fetch_assoc();
            if (
$server_id) {
                
self::$servers[$server_id] = $server;
            }
            
            return 
$server;
        }
        
        return 
FALSE;
    }
    
    public static function 
update($server_id)
    {
        
VF::factory('database')->query("
            UPDATE #__photo_servers
            SET last_used = "
.time()."
            WHERE server_id = "
.$server_id."
            LIMIT 1
        "
);
    }
    
    public static function 
upload_photo($server$photo_id$ext)
    {
        if (!
is_array($server)) {
            
$server self::get($server);
        }
        
        if (!
$server) {
            return 
false;
        }
        
        
$conn_id self::connect($server);
        if (!
$conn_id) {
            return 
false;
        }
        
        
$base    ftp_pwd($conn_id);
        
$files    = array(
            
$photo_id.'.'.$ext,
            
'orig/'.$photo_id.'.'.$ext,
            
'mobile/'.$photo_id.'.'.$ext
        
);
        
        foreach (
$files as $file) {
            
$src    MEDIA_DIR.'/photos/'.$file;
            
$dst    $file;
            if (
VFile::exists($src)) {
                
$dir dirname($dst);
                if (
$dir) {
                    if (
$dir{0} == '/') {
                        
$dir substr($dir1);
                    }
                
                    if (!
ftp_chdir($conn_id$dir)) {
                        
self::log('Failed to change directory to: '.$dir);
                        return 
false;
                    }
                }
                
                
$filename basename($dst);
                
ftp_pasv($conn_idtrue);
                    
                
// when you have a lot of videos ftp_nlist is slow
                
@ftp_delete($conn_id$filename);
                                      
                if (!
ftp_put($conn_id$filename$srcFTP_BINARY)) {
                    
self::log('Failed to upload '.$src.' to '.$filename);
                    return 
false;
                }
                
                if (!
ftp_site($conn_idsprintf('CHMOD %u %s'777$filename))) {
                    
self::log('Failed to change permissions for '.$filename);
                    return 
false;
                }
                
                
ftp_chdir($conn_id$base);
            }
        }
        
        
ftp_close($conn_id);
        
        return 
true;
    }
    
    public static function 
upload_album($album_id)
    {            
        
$db    VF::factory('database');
        
$db->query("SELECT photo_id, ext
                    FROM #__photo
                    WHERE album_id = "
.$album_id);
        if (!
$db->affected_rows()) {
            return 
false;
        }
        
        
$photos    $db->fetch_rows();
                
        
$success    true;
        foreach (
$photos as $photo) {
            if (!static::
upload_photo(false$photo['photo_id'], $photo['ext'])) {
                
$success    false;
            }
        }
        
        return 
$success;
    }
    
    public static function 
upload($server$src$dst)
    {
        if (!
is_array($server)) {
            
$server self::get($server);
        }
        
        if (
$server) {
            
$conn_id self::connect($server);
            if (
$conn_id) {
                
$dir dirname($dst);
                if (
$dir{0} == '/') {
                    
$dir substr($dir1);
                }
                
                if (!
ftp_chdir($conn_id$dir)) {
                    return 
FALSE;
                }
                
                
$filename basename($dst);
                
ftp_pasv($conn_idTRUE);
                    
                
// when you have a lot of videos ftp_nlist is slow
                
@ftp_delete($conn_id$filename);
                                      
                if (
ftp_put($conn_id$filename$srcFTP_BINARY)) {
                    
ftp_site($conn_idsprintf('CHMOD %u %s'777$filename));
                          
                    return 
TRUE;
                }
            }
        }
        
        return 
FALSE;
    }
    
    public static function 
delete($server$file)
    {
        if (!
is_array($server)) {
            
$server self::get($server);
        }
        
        if (
$server) {
            
$conn_id self::connect($server);
            if (
$conn_id) {
                  
$dir dirname($file);
                if (
$dir{0} == '/') {
                    
$dir substr($dir1);
                }

                if (!
ftp_chdir($conn_id$dir)) {
                      return 
FALSE;
                }
                    
                
$filename basename($file);
                
ftp_pasv($conn_idTRUE);
                  
                @
ftp_delete($conn_id$filename);
                  
                if (
ftp_size($conn_id$filename) === -1) {
                    return 
TRUE;
                }
            }
        }
        
        return 
FALSE;
    }
    
    public static function 
exists($server$file)
    {
        if (!
is_array($server)) {
            
$server self::get($server);
        }
        
        if (
$server) {
            
$conn_id self::connect($server);
            if (
$conn_id) {
                if (
$file{0} == '/') {
                    
$file substr($file1);
                }

                if (
ftp_size($conn_id$file) !== -1) {
                    return 
TRUE;
                }
            }
        }
        
        return 
FALSE;
    }
    
    public static function 
download($server$file$dst)
    {
        if (!
is_array($server)) {
            
$server self::get($server);
        }
        
        if (
$server) {
            
$conn_id self::connect($server);
            
            if (
$conn_id) {
                if (
$file{0} == '/') {
                    
$file substr($file1);
                }
            
                if (
ftp_get($conn_id$dst$fileFTP_BINARY)) {
                    
chmod($dst0777);
                    return 
TRUE;
                }
            }
        }
        
        return 
FALSE;        
    }
    
    private static function 
connect($server)
    {
        
$conn_id    ftp_connect($server['ftp_host'], $server['ftp_port']);
        if (!
$conn_id) {
              
self::log('Failed to connect to FTP server!');
            return 
FALSE;
        }

        if (!
ftp_login($conn_id$server['ftp_username'], $server['ftp_password'])) {
            
self::log('Failed to login to FTP server!');
            return 
FALSE;
        }

        
// lets make sure base root does not contain a /
        
$root $server['ftp_root'];
        if (
substr($root, -1) == '/') {
            
$root substr($root0, -1);
        }

        if (
$root{0} == '/') {
            
$root substr($root1);
        }
        
        if (!
ftp_chdir($conn_id$root)) {
              
self::log('Failed to change folder to base root: '.$root);
            return 
FALSE;
        }
        
        if (!
ftp_chdir($conn_id'media/photos')) {
              
self::log('Failed to change folder to media/photos!');
              return 
false;
        }

        return 
$conn_id;
    }
    
    public static function 
log($message)
    {
        
file_put_contents(TMP_DIR.'/logs/photos-'.md5(VF::cfg_item('secret')).'.log'$message."n"FILE_APPEND);
    }
}
Онлайн: 2
Реклама