Current Path : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/file_manager/php/ |
Current File : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/file_manager/php/fm-ajax.php |
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); //error_reporting(E_ALL); /* mb_get_info FreeBSD [internal_encoding] => ISO-8859-1 [http_input] => [http_output] => pass [func_overload] => 0 [func_overload_list] => no overload [mail_charset] => UTF-8 [mail_header_encoding] => BASE64 [mail_body_encoding] => BASE64 [illegal_chars] => 0 [encoding_translation] => Off [language] => neutral [detect_order] => Array ( [0] => ASCII [1] => UTF-8 ) [substitute_character] => 63 [strict_detection] => Off Windows [internal_encoding] => UTF-8 [http_input] => [http_output] => pass [func_overload] => 0 [func_overload_list] => no overload [mail_charset] => UTF-8 [mail_header_encoding] => BASE64 [mail_body_encoding] => BASE64 [illegal_chars] => 0 [encoding_translation] => Off [language] => neutral [detect_order] => Array ( [0] => ASCII [1] => UTF-8 ) [substitute_character] => 63 [strict_detection] => Off */ // если в наименованиях каталогов, файлов есть две или более точек - убираем, что не было site\uploads\..\ function checkPath($v) { //$v = preg_replace("/ {1,}\//", '/' , $v); return preg_replace("/\.{2,}/", '' , $v); } global $encoding; if (PHP_OS == 'WINNT') $encoding = 'CP1251'; else $encoding = 'UTF-8'; $return = array(); $CI = & get_instance(); $CI ->load->helper('file'); $CI ->load->helper('directory'); $root = getinfo('FCPATH'); // REQUEST in POST $mode = $CI->input->post('mode', FALSE); if ($mode == 'loader') { $return['css'] = read_file(getinfo('plugins_dir') . 'file_manager/css/manager.css'); $return['html'] = read_file(getinfo('plugins_dir') . 'file_manager/html/manager.html'); if ($CI->input->post('debug', FALSE) != true) { $return['js'] = read_file(getinfo('plugins_dir') . 'file_manager/js/json.js') . read_file(getinfo('plugins_dir') . 'file_manager/js/noselect.js') . read_file(getinfo('plugins_dir') . 'file_manager/js/storage.js') . read_file(getinfo('plugins_dir') . 'file_manager/js/jquery.fmeditor.js') . read_file(getinfo('plugins_dir') . 'file_manager/js/manager.js') . read_file(getinfo('plugins_dir') . 'file_manager/js/swfupload.js') . read_file(getinfo('plugins_dir') . 'file_manager/js/jquery.swfupload.js'); } } $command = $CI->input->post('command', FALSE); if (!($tasklist = $CI->input->post('tasklist', FALSE))){$tasklist = array();} //print $CI->input->post('folder', TRUE); if (!($u_folder = checkPath($CI->input->post('folder', TRUE)))){echo json_encode(array("error"=>'не указан путь '.$mode ));exit(0);} //print $u_folder; // всё приходит в UTF-8, а в системе папки в локальной кодировке, => UTF-8 -> CP1251 $folder = mb_convert_encoding($u_folder, $encoding, "UTF-8"); // $_folder - CP1251 $path = $root . $folder; $u_path = $root . $u_folder; // кодировка fm.php = UTF-8 //=============================== //$readdesc = FALSE; $writedesc = FALSE; // флаг для записи измененных описаний if (file_exists($path)) { if ($mode == 'newfolder') { $u_newname = checkPath($CI->input->post('newname', TRUE)); $newname = mb_convert_encoding($u_newname, $encoding, "UTF-8"); $rs = @mkdir($path . $newname , 0777); if($rs) { @chown($path . $newname, get_current_user()); $return['newname'] = $u_newname; $folder = $folder . $newname . DIRECTORY_SEPARATOR; $u_folder = mb_convert_encoding($folder, "UTF-8", $encoding); $return['dir'] = array(); $return['files'] = array(); } else { $return['error'] = "Не могу создать каталог с именем '$newname' по адресу: '$path'..."; } } if ($mode == 'renamefolder') { $u_newname = checkPath($CI->input->post('newname', TRUE)); $newname = mb_convert_encoding($u_newname, $encoding, "UTF-8"); $u_oldname = checkPath($CI->input->post('oldname', TRUE)); $oldname = mb_convert_encoding($u_oldname, $encoding, "UTF-8"); //$newfolder = preg_replace("/" . $oldname. "\/$/", $newname. "/" , $folder, 1); $newfolder = preg_replace("/" . $oldname. "\\" . DIRECTORY_SEPARATOR . "$/", $newname. DIRECTORY_SEPARATOR , $folder, 1); if ($newfolder != $folder) { $rs = @rename($path, $root . $newfolder); if($rs) { $return['oldfolder'] = $u_folder; // готовимся к перечитке каталога $folder = $newfolder; $u_folder = mb_convert_encoding($folder, "UTF-8", $encoding); $path = $root . $newfolder; $return['newname']= $u_newname; $mode = 'folder'; } else $return['error'] = "Не могу переименовать каталог с именем '$oldname' в '$newname'."; } else $return['error'] = "Общая ошибка переименнования каталога: $folder = $newfolder..."; $return['$u_newname'] =$u_newname; $return['$newname'] =$newname; $return['$u_oldname'] =$u_oldname; $return['$oldname'] =$oldname; $return['$newfolder'] =$newfolder; } if ($mode == 'deletefolder') { $list = ''; // ensure $dir ends with a slash function delTree($dir, $command) { $l=''; $files = glob( $dir . '*', GLOB_MARK ); foreach( $files as $f ) { //if(( substr( $f, -1 ) == '/' ) || ( substr( $f, -1 ) == '\\' )) if ( substr( $f, -1 ) == DIRECTORY_SEPARATOR ) { $l.=delTree($f, $command); } else { if ($command == 'run') unlink( $f ); else $l.="$f\n"; } } if ($command == 'run') return rmdir( $dir ); else return $l."$dir\n"; } $return['list'] = mb_convert_encoding(delTree($path, $command), "UTF-8", $encoding); } // READ DESCRIPTION if (($mode == 'folder') || ($mode == 'loader') || ($mode == 'changedesc') || ($mode == 'renamefile') || ($mode == 'deletefiles')) // чтение _mso_i/_mso_descriptions.dat в $mso_descritions { require_once "read_description.inc.php"; $description = fm_read_description($path, &$fn_description); //$return['desc'] = $description; } if ($mode == 'loader') { //if (isset($description['/tasks/'])) // { // $localtasklist = json_decode($description['/tasks/']); // } if (isset($description['/settings/'])) { // СТРОЕ НАСЛЕДИЕ string -> boolean $return['settings'] = array(); foreach (json_decode($description['/settings/']) as $name => $set) { $set->state = (boolean) $set->state; $return['settings'][$name] = $set; } // end //$return['settings'] = $description['/settings/']; } } if ($mode == 'renamefile') { $u_newname = checkPath($CI->input->post('newname', TRUE)); $newname = mb_convert_encoding($u_newname, $encoding, "UTF-8"); $u_oldname = checkPath($CI->input->post('oldname', TRUE)); $oldname = mb_convert_encoding($u_oldname, $encoding, "UTF-8"); if ($newname != $oldname) { $rs = @rename($path . $oldname, $path . $newname); if ($rs) { $return['newname'] = $u_newname; $return['oldname'] = $u_oldname; if (isset($description[$u_oldname])) { $writedesc = TRUE; // для записи в файл $description[$u_newname] = $description[$u_oldname]; unset($description[$u_oldname]); } require_once "file.inc.php"; $gf = getFile($path, $newname); if (isset($fm_allowed_image[$gf['ext']])) { $tr = array(); foreach ($tasklist as $taskname) { if ($taskname == 'image') $tr[$taskname] = get_info_task($taskname, $path, $newname); else { $oldmini = prepare_task($taskname, $oldname); $newmini = prepare_task($taskname, $newname); $rs = @rename($path . $oldmini, $path . $newmini); if (($rs) && ($r = get_info_task($taskname, $path, $newname))) // !!! $newmini = /mini/name $tr[$taskname] = $r; } } if ($tr) { $gf['list'] = $tr; } } $return['file'] = $gf; } else $return['error'] = "Не могу переименовать файл с именем '$oldname' в '$newname'."; } else $return['error'] = "Не могу переименовать файл, имена совпадают '$oldname' = '$newname'."; //$return['error'] = 'проверка'; } if ($mode == 'deletefiles') { require_once "file.inc.php"; $files = $CI->input->post('files', TRUE); for ($i = 0, $L=count($files); $i < $L; $i++) { $u_name = checkPath($files[$i]); $name = mb_convert_encoding($u_name, $encoding, "UTF-8"); $return['files'][$u_name] = array("file"=>$u_path . $u_name, "delete"=> unlink($path . $name)); foreach ($tasklist as $taskname) if ($taskname != 'image') @unlink($path . prepare_task($taskname, $name)); // удаляем описания файлов if (isset($description[$u_name])) { $writedesc = TRUE; unset($description[$u_name]); } } } if ($mode == 'changedesc') { $u_filename = $CI->input->post('filename', TRUE); $u_desc = $CI->input->post('desc', TRUE); $description[$u_filename] = $u_desc; $return['filename'] = $u_filename; $return['desc'] = $u_desc; $writedesc = TRUE; } // WRITE DESCRIPTION if ($writedesc == TRUE) { write_file($fn_description, serialize($description)); // сохраняем данные //print "fn = $fn_description"; } if (($mode == 'folder') || ($mode == 'loader')) { //print $path; //print_r(get_dir_file_info($path)); //print_r(get_filenames($path)); require_once "file.inc.php"; $files = scandir($path); //print $folder; //print_r($files); natcasesort($files); $dir = array(); $fs = array(); if(count($files) > 2) /* The 2 accounts for . and .. */ { foreach($files as $file) { $u_file = mb_convert_encoding($file, "UTF-8", $encoding); if(is_file($path . $file)) { $gf = getFile($path, $file); if (isset($description[$u_file])) $gf['desc'] = $description[$u_file]; if (isset($fm_allowed_image[$gf['ext']])) { $tr = array(); foreach ($tasklist as $taskname) { if($r = get_info_task($taskname, $path, $file)) { $tr[$taskname] = $r; } } if ($tr) { $gf['list'] = $tr; } } $fs[$u_file] = $gf; } else { if ($file == '.' || $file == '..' || $file == 'mini' || $file == '_mso_i') continue; if ($folder == ('uploads' . DIRECTORY_SEPARATOR) && ($file == '_mso_float' || $file == 'smiles')) continue; $dir[] = array("rel"=>$u_folder. $u_file, "name"=>$u_file); } } } $return['dir'] = $dir; $return['files'] = $fs; if (isset($description['/tasks/'])) { $return['files']['/tasks/'] = json_decode($description['/tasks/']); } } // folder $return['folder'] = $u_folder; $return['refresh'] = $CI->input->post('refresh', FALSE); echo json_encode($return); } else { echo json_encode(array("error"=>'указан несуществующий путь: ' . $u_path)); }