Файл: system/controllers/admin/actions/check_ftp.php
Строк: 69
<?php
class actionAdminCheckFtp extends cmsAction {
public function run(){
$host = $this->request->get('host', '');
$port = $this->request->get('port', 0);
$user = $this->request->get('user', '');
$pass = $this->request->get('pass', '');
$path = $this->request->get('path', '');
$is_pasv = $this->request->get('is_pasv', 0);
$host = trim(str_replace('ftp://', '', $host), '/');
if ($path != '/' ) {
$path = '/' . trim($path, '/') . '/';
}
$errors = $files_list = array();
$file_list = array('dirs' => array(), 'files' => array());
$ftp_path = 'ftp://' . $host . $path;
$connection = @ftp_connect($host, $port, 30);
if (!$connection){ $errors['connect'] = LANG_CP_FTP_CONNECT_FAILED; }
if(!$errors){
$session = @ftp_login($connection, $user, $pass);
if (!$session){ $errors['login'] = LANG_CP_FTP_AUTH_FAILED; }
if(!$errors){
if($is_pasv) { ftp_pasv($connection, true); }
$_file_list = ftp_nlist($connection, $path);
if (!$_file_list){
$errors['no_root'] = sprintf(LANG_CP_FTP_NO_ROOT, $ftp_path);
}
foreach ($_file_list as $list) {
if(ftp_is_dir($connection, $list)){
$file_list['dirs'][] = basename($list);
} else {
$file_list['files'][] = basename($list);
}
}
if(!$errors){
$check_dirs = array(
'system/core' => 'core.php',
'system/config' => 'config.php'
);
foreach ($check_dirs as $dir => $file) {
$contents = ftp_nlist($connection, $path . $dir);
if (is_array($contents)){
foreach ($contents as $item) {
$files_list[] = basename($item);
}
}
if (!$files_list || !in_array($file, $files_list)) {
$errors['bad_root'] = sprintf(LANG_CP_FTP_BAD_ROOT, $ftp_path); break;
}
}
}
}
ftp_close($connection);
}
return $this->cms_template->render('check_ftp', array(
'ftp_path' => $ftp_path,
'errors' => $errors,
'file_list' => $file_list
));
}
}
function ftp_is_dir($conn_id, $dir) {
if( @ftp_chdir($conn_id, $dir )) {
ftp_chdir($conn_id, '/../');
return true;
} else {
return false;
}
}