Файл: adultscript-2.0.3-pro/files/modules/video/helpers/server.php
Строк: 149
<?php
defined('_VALID') or die('Restricted Access!');
class VHelper_video_server
{
private static $servers;
public static function get($server_id=NULL, $status=NULL)
{
if (isset(self::$servers[$server_id])) {
return self::$servers[$server_id];
}
$sql = array();
if ($server_id) {
$sql[] = "server_id = ".(int) $server_id;
}
if ($status) {
$sql[] = "status = '".$status."'";
}
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, streaming_method, streaming_server,
lighttpd_url, lighttpd_secdownload,
lighttpd_prefix, lighttpd_key, rtmp_stream
FROM #__server
WHERE ".implode(' AND ', $sql)."
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 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($dir, 1);
}
if (!ftp_chdir($conn_id, $dir)) {
return FALSE;
}
$filename = basename($dst);
ftp_pasv($conn_id, TRUE);
// when you have a lot of videos ftp_nlist is slow
@ftp_delete($conn_id, $filename);
if (ftp_put($conn_id, $filename, $src, FTP_BINARY)) {
ftp_site($conn_id, sprintf('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($dir, 1);
}
if (!ftp_chdir($conn_id, $dir)) {
return FALSE;
}
$filename = basename($file);
ftp_pasv($conn_id, TRUE);
@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($file, 1);
}
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($file, 1);
}
if (ftp_get($conn_id, $dst, $file, FTP_BINARY)) {
chmod($dst, 0777);
return TRUE;
}
}
}
return FALSE;
}
public static function process_upload($server, $video_id, $flv, $mp4, $mp4_hd, $mobile, $conv)
{
$uploaded = true;
if ($flv) {
$dst_flv = MEDIA_DIR.'/videos/flv/'.$video_id.'.flv';
if (static::upload($server, $dst_flv, '/flv/'.$video_id.'.flv')) {
$uploaded = true;
$conv->log('Uploaded FLV to server!');
} else {
$uploaded = false;
$conv->log('Failed to upload FLV to server!');
}
} else {
$conv->log('FLV not processed!');
}
if ($mp4) {
$dst_mp4 = MEDIA_DIR.'/videos/mp4/'.$video_id.'.mp4';
if (static::upload($server, $dst_mp4, '/mp4/'.$video_id.'.mp4')) {
$conv->log('Uploaded MP4 to server!');
} else {
$uploaded = false;
$conv->log('Failed to upload MP4 to server!');
}
} else {
$conv->log('MP4 not processed!');
}
if (!$uploaded) {
return false;
}
if ($mp4_hd) {
$dst_mp4_hd = MEDIA_DIR.'/videos/mp4/'.$video_id.'_hd.mp4';
if (static::upload($server, $dst_mp4_hd, '/mp4/'.$video_id.'_hd.mp4')) {
$conv->log('Uploaded MP4 HD to server!');
} else {
$uploaded = false;
$conv->log('Failed to upload MP4 HD to server!');
}
} else {
$conv->log('MP4 HD not processed!');
}
if ($mobile) {
$dst_mobile = MEDIA_DIR.'/videos/mobile/'.$video_id.'.mp4';
if (static::upload($server, $dst_mobile, '/mobile/'.$video_id.'.mp4')) {
$conv->log('Uploaded mobile to server!');
} else {
$conv->log('Failed to upload Mobile to server!');
}
}
if ($uploaded) {
$conv->log('Updating server...');
static::update($server['server_id']);
if ($flv) {
$conv->log('Deleting '.$dst_flv.' ...');
VFile::delete($dst_flv);
}
$conv->log('Deleting '.$dst_mp4.' ...');
VFile::delete($dst_mp4);
if ($mp4_hd) {
$conv->log('Deleting '.$dst_mp4_hd.' ...');
VFile::delete($dst_mp4_hd);
}
$conv->log('Deleting '.$dst_mobile.' ...');
VFile::delete($dst_mobile);
}
return $uploaded;
}
public static function update($server_id)
{
VF::factory_remove('database');
VF::factory('database')->query(
"UPDATE #__server
SET last_used = '".date('Y-m-d H:i:s')."',
total_videos = total_videos+1
WHERE server_id = ".$server_id."
LIMIT 1");
}
public static function connect($server)
{
$conn_id = ftp_connect($server['ftp_host'], $server['ftp_port']);
if (!$conn_id) {
return FALSE;
}
if (!ftp_login($conn_id, $server['ftp_username'], $server['ftp_password'])) {
self::log($video_id, '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($root, 0, -1);
}
if ($root{0} == '/') {
$root = substr($root, 1);
}
if (!ftp_chdir($conn_id, $root)) {
return FALSE;
}
return $conn_id;
}
}