//{"lang":"","fm_root":"","timezone":"","date_format":"Y\/m\/d H:i","auth_pass":"d41d8cd98f00b204e9800998ecf8427e","error_reporting":1}/*-------------------------------------------------| PHP FILE MANAGER+--------------------------------------------------| phpFileManager 1.7.9| By Fabricio Seger Kolling| Copyright (c) 2004-2020 Fabrício Seger Kolling| E-mail: dulldusk@gmail.com| URL: http://phpfm.sf.net| Last Changed: 2020-04-28+--------------------------------------------------| It is the AUTHOR'S REQUEST that you keep intact the above header information| and notify it only if you conceive any BUGFIXES or IMPROVEMENTS to this program.+--------------------------------------------------| LICENSE+--------------------------------------------------| Licensed under the terms of any of the following licenses at your choice:| - GNU General Public License Version 2 or later (the "GPL");| - GNU Lesser General Public License Version 2.1 or later (the "LGPL");| - Mozilla Public License Version 1.1 or later (the "MPL").| You are not required to, but if you want to explicitly declare the license| you have chosen to be bound to when using, reproducing, modifying and| distributing this software, just include a text file titled "LICENSE" in your version| of this software, indicating your license choice. In any case, your choice will not| restrict any recipient of your version of this software to use, reproduce, modify| and distribute this software under any of the above licenses.+--------------------------------------------------| CONFIGURATION AND INSTALATION NOTES+--------------------------------------------------| This program does not include any instalation or configuration| notes because it simply does not require them.| Just throw this file anywhere in your webserver and enjoy !!+--------------------------------------------------*/// +--------------------------------------------------// | Config// +--------------------------------------------------$version = '1.7.9';$charset = 'UTF-8';$debug_mode = false;$max_php_recursion = 200;$resolve_ids = 0;$quota_mb = 0;$upload_ext_filter = array();$download_ext_filter = array();$cookie_cache_time = 60*60*24*30; // 30 Days$fm_color = array();$fm_color['Bg'] = "EEEEEE";$fm_color['Text'] = "000000";$fm_color['Link'] = "0A77F7";$fm_color['Entry'] = "FFFFFF";$fm_color['Over'] = "C0EBFD";$fm_color['Mark'] = "A7D2E4";// https://pt.wikipedia.org/wiki/Lista_de_portas_dos_protocolos_TCP_e_UDP$services = array();//$services['13:UDP'] = "DAYTIME";$services['21'] = "FTP";$services['22'] = "SSH";$services['23'] = "TELNET";$services['25'] = "SMTP";//$services['53:UDP'] = "DNS";//$services['67:UDP'] = "DHCP";//$services['68:UDP'] = "BOOTP";//$services['69:UDP'] = "TFTP";$services['80'] = "HTTPD";$services['110'] = "POP3";//$services['123:UDP'] = "NTP";//$services['137:UDP'] = "NETBIOS-NS";//$services['138:UDP'] = "NETBIOS-DATA";$services['139'] = "NETBIOS-SESSION";$services['143'] = "IMAP";$services['161'] = "SNMP";$services['389'] = "LDAP";$services['445'] = "SMB-AD";//$services['445:UDP'] = "SMB-FS";$services['465'] = "SMTPS-SSL";$services['512'] = "RPC";$services['514'] = "RSH";//$services['514:UDP'] = "SYSLOG";$services['515'] = "LPD-PRINTER";//$services['520:UDP'] = "RIP-ROUTER";$services['530'] = "RPC";$services['540'] = "UUCP";$services['544'] = "KSHELL";$services['556'] = "REMOTE-FS";$services['587'] = "SMTPS-TLS";$services['593'] = "HTTP-RPC";$services['631'] = "IPP";$services['636'] = "LDAPS";$services['993'] = "IMAPS";$services['995'] = "POP3S";$services['990'] = "FTPS";$services['992'] = "TELNETS";$services['1433'] = "MSSQL";$services['1521'] = "ORACLE";$services['3306'] = "MYSQL/MARIADB";$services['3389'] = "RDESKTOP";$services['5900'] = "VNC";$services['7778'] = "KLOXO-ADMIN";$services['8080'] = "HTTPD-ALT";$services['8200'] = "GOTOMYPC";$services['10000'] = "VIRTUALMIN-ADMIN";$services['27017'] = "MONGODB";$services['50000'] = "DB2";// +--------------------------------------------------// | Header and Globals// +--------------------------------------------------@ob_start(); // For ChromePhp Debug and JSONRPC to Work!function getmicrotime(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);}$script_init_time = getmicrotime();function log_script_time(){ global $script_init_time; fb_log(number_format((getmicrotime()-$script_init_time), 3, '.', '')."s");}$is_windows = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');$max_php_recursion_counter = 0;if(!isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO'])) { $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];}function fix_directory_separator($str){ global $is_windows; if ($is_windows) $str = str_replace('/',DIRECTORY_SEPARATOR,$str); else $str = str_replace('\\',DIRECTORY_SEPARATOR,$str); return $str;}if(!isset($_SERVER['DOCUMENT_ROOT'])) { if (isset($_SERVER['SCRIPT_FILENAME'])) $path = $_SERVER['SCRIPT_FILENAME']; elseif (isset($_SERVER['PATH_TRANSLATED'])) $path = str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']); $_SERVER['DOCUMENT_ROOT'] = substr($path, 0, 0-strlen($_SERVER['PHP_SELF']));}$_SERVER['DOCUMENT_ROOT'] = fix_directory_separator($_SERVER['DOCUMENT_ROOT']);if (@get_magic_quotes_gpc()) { function stripslashes_deep($value){ return is_array($value)? array_map('stripslashes_deep', $value):$value; } $_POST = array_map('stripslashes_deep', $_POST); $_GET = array_map('stripslashes_deep', $_GET); $_COOKIE = array_map('stripslashes_deep', $_COOKIE);}// Register Globals (its an old script..)$blockKeys = array('_SERVER','_SESSION','_GET','_POST','_COOKIE');foreach ($_GET as $key => $val) if (array_search($key,$blockKeys) === false) $$key=$val;foreach ($_POST as $key => $val) if (array_search($key,$blockKeys) === false) $$key=$val;foreach ($_COOKIE as $key => $val) if (array_search($key,$blockKeys) === false && $key != 'fm_current_dir' && $key != 'ace_wrap') $$key=$val;// PHP_VERSION_ID is available as of PHP 5.2.7, if our version is lower than that, then emulate itif (!defined('PHP_VERSION_ID')) { $php_version = explode('.', PHP_VERSION); define('PHP_VERSION_ID', ($php_version[0] * 10000 + $php_version[1] * 100 + $php_version[2])); if (PHP_VERSION_ID < 50207) { define('PHP_MAJOR_VERSION', $php_version[0]); define('PHP_MINOR_VERSION', $php_version[1]); define('PHP_RELEASE_VERSION', $php_version[2]); }}// Server Varsfunction curl_server_online_check(){ if (function_exists('curl_init')){ @$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://phpfm.sf.net"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); @curl_exec($ch); $errnum = curl_errno($ch); @curl_close($ch); } return ($errnum == "0");}function socket_get_lan_ip($dest='64.0.0.0', $port=80) { $addr = ''; if (function_exists('socket_create')){ $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_connect($socket, $dest, $port); socket_getsockname($socket, $addr, $port); socket_close($socket); } return $addr;}function get_client_ip() { $ipaddress = ''; if ($_SERVER['HTTP_CLIENT_IP']) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if($_SERVER['HTTP_X_FORWARDED_FOR']) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if($_SERVER['HTTP_X_FORWARDED']) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if($_SERVER['HTTP_FORWARDED_FOR']) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if($_SERVER['HTTP_FORWARDED']) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if($_SERVER['HTTP_X_REAL_IP']) $ipaddress = $_SERVER['HTTP_X_REAL_IP']; else if($_SERVER['REMOTE_ADDR']) $ipaddress = $_SERVER['REMOTE_ADDR']; // proxy transparente não esconde o IP local, colocando ele após o IP da rede, separado por vírgula if (strpos($ipaddress, ',') !== false) { $ips = explode(',', $ipaddress); $ipaddress = trim($ips[0]); } if ($ipaddress == '::1' || $ipaddress == '127.0.0.1') $ipaddress = 'localhost'; return $ipaddress;}$ip = @get_client_ip();$lan_ip = @socket_get_lan_ip();function getServerURL() { $url = (lowercase($_SERVER['HTTPS']) == "on")?"https://":"http://"; if (strlen($_SERVER['SERVER_NAME'])) $url .= $_SERVER['SERVER_NAME']; elseif (strlen($_SERVER['HTTP_HOST'])) $url .= $_SERVER['HTTP_HOST']; if ($_SERVER['SERVER_PORT'] != "80" && $_SERVER['SERVER_PORT'] != "443") $url .= ":".$_SERVER['SERVER_PORT']; return $url;}function getCompleteURL() { return getServerURL().$_SERVER['REQUEST_URI'];}$url = @getCompleteURL();$url_info = parse_url($url);$doc_root = rtrim($_SERVER['DOCUMENT_ROOT'],DIRECTORY_SEPARATOR); // ex: 'C:/htdocs'$url_root = rtrim(@getServerURL(),'/'); // ex. 'http://www.site.com'$fm_file = __FILE__;$fm_url = $url_root.$_SERVER['PHP_SELF'];$fm_path_info = pathinfo($fm_file);$open_basedir_ini = trim(@ini_get("open_basedir"));$open_basedirs = array();if (strlen($open_basedir_ini)) { $dirs = array($open_basedir_ini); if ($is_windows) { if (strpos($open_basedir_ini,';') !== false) { $dirs = explode(';',$open_basedir_ini); } $dirs = array_map('ucfirst',$dirs); } else { if (strpos($open_basedir_ini,':') !== false) { $dirs = explode(':',$open_basedir_ini); } } foreach ($dirs as $dir) { $dir = rtrim($dir,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; // fm_root must have trailing slash if (is_dir($dir)) $open_basedirs[] = $dir; }}$sys_lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));if (!function_exists('mb_strtolower') || !function_exists('mb_strtoupper')) { die('PHP File Manager
Error: Please enable "mbstring" php module.
http://php.net/manual/en/book.mbstring.php');}// +--------------------------------------------------// | Config Class// +--------------------------------------------------function object_to_array( $var ) { if( !is_object( $var ) && !is_array( $var ) ) { return $var; } if( is_object( $var ) ) { $var = get_object_vars( $var ); } return array_map( 'object_to_array', $var );}function array_to_object( $var ) { if( !is_object( $var ) && !is_array( $var ) ) { return $var; } $obj = new stdClass(); foreach ($var as $key => $value) { if (strlen($key)) $obj->{$key} = array_to_object( $value ); } return $obj;}class config { var $data; function __construct(){ $this->data = array( 'lang'=>'', 'fm_root'=>'', 'timezone'=>'', 'date_format'=>'Y/m/d H:i', 'auth_pass'=>md5(''), 'error_reporting'=>1 ); } function save(){ global $fm_file; $config_string = "".chr(13).chr(10)."//".json_encode($this->data).chr(13).chr(10); if (is_file($fm_file)){ $lines = file($fm_file); $script_start_line = 1; if (strpos($lines[0],'') === 0 && strpos($lines[1],'//{"') === 0) $script_start_line = 2; if ($fh = @fopen($fm_file, "w")){ @fputs($fh,$config_string,strlen($config_string)); for ($x=$script_start_line;$x<count($lines);$x++) @fputs($fh,$lines[$x],strlen($lines[$x])); @fclose($fh); } } } function load(){ global $fm_file; $data = false; if (is_file($fm_file)){ $fh = fopen($fm_file, 'r'); $line1 = fgets($fh); $line2 = fgets($fh); $line3 = fgets($fh); fclose($fh); if (strpos($line1,'') === 0 && strpos($line2,'//{"') === 0){ $config_string = trim(substr($line2,2)); if (strlen($config_string)) $data = object_to_array(json_decode($config_string)); } } if (is_array($data) && count($data)) $this->data = $data; foreach ($this->data as $key => $val) $GLOBALS[$key] = $val; }}// +--------------------------------------------------// | Config Load// +--------------------------------------------------$cfg = new config();$cfg->load();if (strlen($timezone)) @date_default_timezone_set($timezone);//@setlocale(LC_CTYPE, 'C');//@ini_set('default_charset', $charset);@mb_internal_encoding($charset);@ini_set('mbstring.substitute_character','none'); // That will strip invalid characters from UTF-8 strings@ini_set("allow_url_fopen",1);@error_reporting(0);@ini_set("display_errors",0);if ($error_reporting > 0){ error_reporting(E_ERROR | E_PARSE | E_COMPILE_ERROR); @ini_set("display_errors",1);}function fb_log(){ global $error_reporting; if ($error_reporting < 2) return; if (!class_exists('ChromePhp')) return; $arguments = func_get_args(); if (func_num_args() > 1 && is_string($arguments[0])) { ChromePhp::log($arguments[0].': ',$arguments[1]); } else { ChromePhp::log($arguments[0]); }}if (!strlen($fm_current_root)) { if ($is_windows) { if (strpos($doc_root,":") !== false) $fm_current_root = ucfirst(substr($doc_root,0,strpos($doc_root,":")+1).DIRECTORY_SEPARATOR); // If doc_root has ":" take the drive letter $fm_current_root = ucfirst($doc_root.DIRECTORY_SEPARATOR); } else { $fm_current_root = "/"; // Linux default show root }} else { if ($is_windows) $fm_current_root = ucfirst($fm_current_root);}if (strlen($fm_root)){ $fm_current_root = $fm_root;}if (count($open_basedirs)){ $fm_current_root_ok = false; foreach ($open_basedirs as $open_basedir) { if (strpos($fm_current_root,$open_basedir) !== false) { $fm_current_root_ok = true; break; } } if (!$fm_current_root_ok) { $fm_path = rtrim($fm_path_info['dirname'],DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; foreach ($open_basedirs as $open_basedir) { if (strpos($fm_path,$open_basedir) !== false) { $fm_current_root = $open_basedir; $fm_current_root_ok = true; break; } } } if (!$fm_current_root_ok){ $fm_current_root = $open_basedirs[0]; }}if (!isset($fm_current_dir)){ $fm_path = rtrim($fm_path_info['dirname'],DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; if (strpos($fm_path,$fm_current_root) !== false) { $fm_current_dir = $fm_path; } else { $fm_current_dir = $fm_current_root; } if ($is_windows) $fm_current_dir = ucfirst($fm_current_dir); if (strlen($_COOKIE['fm_current_dir'])) { $fm_current_dir = $_COOKIE['fm_current_dir']; }}$fm_current_root = rtrim($fm_current_root,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;$fm_current_dir = rtrim($fm_current_dir,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;@chdir($fm_current_dir); // Note: So is_link(), is_file(), is_dir() and other functions work with relative paths too.//fb_log('fm_root',$fm_root);//fb_log('fm_current_root',$fm_current_root);//fb_log('fm_current_dir',$fm_current_dir);if (isset($set_resolve_ids)){ $resolve_ids=intval($set_resolve_ids); setcookie("resolve_ids", $resolve_ids, time()+$cookie_cache_time, "/");}// +--------------------------------------------------// | User/Group Functions// +--------------------------------------------------$passwd_array = false;function get_user_name($uid) { global $is_windows, $passwd_array; if ($is_windows) return $uid; if ($passwd_array === false){ @system_exec_cmd("cat /etc/passwd",$passwd_file); $passwd_array = explode(chr(10),$passwd_file); } foreach ($passwd_array as $line) { $mat = explode(":",$line); if ($mat[2] == $uid){ return $mat[0]; } } if (function_exists('posix_getpwuid')) { $info = posix_getpwuid($uid); return $info['name']; } return $uid;}$group_array = false;function get_group_name($gid) { global $is_windows, $group_array; if ($is_windows) return $gid; if ($group_array === false){ @system_exec_cmd("cat /etc/group",$group_file); $group_array = explode(chr(10),$group_file); } foreach ($group_array as $line) { $mat = explode(":",$line); if ($mat[2] == $gid){ return $mat[0]; } } if (function_exists('posix_getgrgid')) { $info = posix_getgrgid($gid); return $info['name']; } return $gid;}function get_user_groups($user_name) { global $is_windows, $group_array; if ($is_windows) return array(); if ($group_array === false){ @system_exec_cmd("cat /etc/group",$group_file); $group_array = explode(chr(10),$group_file); } $resul = array(); $resul['ids'] = array(); $resul['names'] = array(); foreach ($group_array as $line) { $mat = explode(":",$line); $user_names = explode(",",$mat[3]); if (array_search($user_name,$user_names) !== false){ $resul['ids'][] = $mat[2]; $resul['names'][] = $mat[0]; } } return $resul;}function is_rwx_phpfm($file,$what='r'){ global $is_windows; // Note: You can only change the uid/euid of the current process when one of the two is currently set to 0 (root). // groupadd gteste // usermod -a -G gteste www-data // gpasswd -d www-data gteste if (!is_array($GLOBALS['script_info'])) { $GLOBALS['script_info'] = array(); $GLOBALS['script_info']['sys_uname'] = function_exists('posix_uname') ? @posix_uname() : ''; $GLOBALS['script_info']['sys_hostname'] = function_exists('gethostname') ? @gethostname() : ''; if (!strlen($GLOBALS['script_info']['sys_hostname'])){ $GLOBALS['script_info']['sys_hostname'] = @getenv('COMPUTERNAME'); } $GLOBALS['script_info']['script_user_id'] = function_exists('posix_getuid') ? @posix_getuid() : ''; $GLOBALS['script_info']['script_user_name'] = $GLOBALS['script_info']['script_user_id']; $GLOBALS['script_info']['script_user_home'] = ''; $GLOBALS['script_info']['script_user_shell'] = ''; $GLOBALS['script_info']['script_user_group_id'] = ''; $GLOBALS['script_info']['script_user_group_name'] = ''; $GLOBALS['script_info']['script_user_group_ids'] = array(); $GLOBALS['script_info']['script_user_group_names'] = array(); $GLOBALS['script_info']['script_group_id'] = function_exists('posix_getgid') ? @posix_getgid() : ''; $GLOBALS['script_info']['script_group_name'] = $GLOBALS['script_info']['script_group_id']; $GLOBALS['script_info']['script_group_members'] = ''; if ($GLOBALS['script_info']['script_user_id'] && function_exists('posix_getpwuid')) { $info = posix_getpwuid($GLOBALS['script_info']['script_user_id']); $GLOBALS['script_info']['script_user_home'] = $info['dir']; $GLOBALS['script_info']['script_user_shell'] = $info['shell']; $GLOBALS['script_info']['script_user_name'] = $info['name']; $GLOBALS['script_info']['script_user_group_id'] = $info['gid']; if (function_exists('posix_getgrgid')) { $info = posix_getgrgid($GLOBALS['script_info']['script_user_group_id']); $GLOBALS['script_info']['script_user_group_name'] = $info['name']; } $info = get_user_groups($GLOBALS['script_info']['script_user_name']); $GLOBALS['script_info']['script_user_group_ids'] = $info['ids']; $GLOBALS['script_info']['script_user_group_names'] = $info['names']; array_unshift($GLOBALS['script_info']['script_user_group_ids'], $GLOBALS['script_info']['script_user_group_id']); array_unshift($GLOBALS['script_info']['script_user_group_names'], $GLOBALS['script_info']['script_user_group_name']); } if (!strlen($GLOBALS['script_info']['script_user_name'])) { if (!system_exec_cmd('whoami',$GLOBALS['script_info']['script_user_name'])) { $GLOBALS['script_info']['script_user_name'] = ''; } } if (!strlen($GLOBALS['script_info']['script_user_name']) && function_exists('get_current_user')) { $GLOBALS['script_info']['script_user_name'] = get_current_user(); } if (!strlen($GLOBALS['script_info']['script_user_name'])){ $GLOBALS['script_info']['script_user_name'] = @getenv('USERNAME') ? : @getenv('USER'); } if ($is_windows && strpos($GLOBALS['script_info']['script_user_name'],'\\') !== false){ $GLOBALS['script_info']['script_user_name'] = ucfirst(substr($GLOBALS['script_info']['script_user_name'],strpos($GLOBALS['script_info']['script_user_name'],'\\')+1)); } if (function_exists('posix_getgrgid')) { $info = posix_getgrgid($GLOBALS['script_info']['script_group_id']); $GLOBALS['script_info']['script_group_name'] = $info['name']; $GLOBALS['script_info']['script_group_members'] = $info['members']; } fb_log($GLOBALS['script_info']); } $file_info = array(); $file_info['name'] = $file; $file_stat = stat($file); $file_info['nlinks'] = $file_stat['nlink']; $file_info['perms'] = fileperms($file); $file_info['owner'] = fileowner($file); $file_info['group'] = filegroup($file); $file_info['is_owner_readable'] = ($file_info['perms'] & 0x0100); $file_info['is_group_readable'] = ($file_info['perms'] & 0x0020); $file_info['is_world_readable'] = ($file_info['perms'] & 0x0004); $file_info['is_readable'] = false; if ($file_info['is_world_readable']) { $file_info['is_readable'] = true; } if ($file_info['is_group_readable']) { foreach ($GLOBALS['script_info']['script_user_group_ids'] as $gid) { if ($file_info['group'] == $gid) { $file_info['is_readable'] = true; break; } } } if ($file_info['is_owner_readable'] && $file_info['owner'] == $GLOBALS['script_info']['script_user_id']) { $file_info['is_readable'] = true; } $file_info['is_owner_writable'] = ($file_info['perms'] & 0x0080); $file_info['is_group_writable'] = ($file_info['perms'] & 0x0010); $file_info['is_world_writable'] = ($file_info['perms'] & 0x0002); $file_info['is_writable'] = false; if ($file_info['is_world_writable']) { $file_info['is_writable'] = true; } if ($file_info['is_group_writable']) { foreach ($GLOBALS['script_info']['script_user_group_ids'] as $gid) { if ($file_info['group'] == $gid) { $file_info['is_writable'] = true; break; } } } if ($file_info['is_owner_writable'] && $file_info['owner'] == $GLOBALS['script_info']['script_user_id']) { $file_info['is_writable'] = true; } $file_info['is_owner_executable'] = ($file_info['perms'] & 0x0040); $file_info['is_group_executable'] = ($file_info['perms'] & 0x0400); $file_info['is_world_executable'] = ($file_info['perms'] & 0x0001); $file_info['is_executable'] = false; if ($file_info['is_world_executable']) { $file_info['is_executable'] = true; } if ($file_info['is_group_executable']) { foreach ($GLOBALS['script_info']['script_user_group_ids'] as $gid) { if ($file_info['group'] == $gid) { $file_info['is_executable'] = true; break; } } } if ($file_info['is_owner_executable'] && $file_info['owner'] == $GLOBALS['script_info']['script_user_id']) { $file_info['is_executable'] = true; } if ($what == 'r') return $file_info['is_readable']; if ($what == 'w') return $file_info['is_writable']; if ($what == 'x') return $file_info['is_executable']; return false;}function is_readable_phpfm($file){ return is_rwx_phpfm($file,'r');}function is_writable_phpfm($file){ return is_rwx_phpfm($file,'w');}function is_executable_phpfm($file){ return is_rwx_phpfm($file,'x');}// +--------------------------------------------------// | File Manager Actions// +--------------------------------------------------if ($action != '99') { header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content-Type: text/html; charset=".$charset);}if ($auth_pass == md5('') || $loggedon==$auth_pass){ switch ($frame){ case 1: break; // Empty Frame case 2: frame2(); break; case 3: frame3(); break; default: switch($action){ case 1: logout(); break; case 2: config_form(); break; case 3: download(); break; case 4: view_form(); break; case 5: server_info_form(); break; case 6: break; case 7: edit_file_form(); break; case 8: chmod_form(); break; case 9: shell_form(); break; case 10: upload_form(); break; case 11: system_exec_file(); break; case 12: portscan_form(); break; case 14: dir_list_update_total_size(); break; case 99: get_base64_file(); break; default: if ($noscript) login_form(); else frameset(); } }} elseif (strlen($pass)) { login();} else { login_form();}// +--------------------------------------------------// | File System// +--------------------------------------------------function symlink_phpfm($target,$link){ global $is_windows; $ok = false; if (!$is_windows){ // symlink() function not available on windows if (function_exists('symlink')) { $ok = symlink($target,$link); } else { $GLOBALS['dir_list_warn_message'] .= 'Error: php symlink() function is disabled.
'; } } if (!$ok){ $cmd = ''; if ($is_windows){ //$runas = 'runas /noprofile /user:Administrator '; if (is_dir($target)) $cmd = $runas.'mklink /D '.escapeshellarg($link).' '.escapeshellarg($target); else $cmd = $runas.'mklink '.escapeshellarg($link).' '.escapeshellarg($target); } else { $cmd = 'ln -s '.escapeshellarg($target).' '.escapeshellarg($link); } $output = ''; $ok = system_exec_cmd($cmd,$output); if (!$ok) { $GLOBALS['dir_list_warn_message'] .= 'CMD: '.$cmd.'
'; $GLOBALS['dir_list_warn_message'] .= $output.'
'; } // link() function is available on windows (Vista, Server 2008 or greater) // if everything failed, try to create a hardlink to the file instead if (!$ok && !is_dir($target) && $is_windows) { if (function_exists('link')) { $ok = link($target,$link); } else { $GLOBALS['dir_list_warn_message'] .= 'Error: php link() function is disabled.
'; } } } return $ok;}function link_phpfm($target,$link){ global $is_windows; if (is_dir($target)) { // hardlinks to directories are not allowed, create symlink instead // https://askubuntu.com/questions/210741/why-are-hard-links-not-allowed-for-directories return symlink_phpfm($target,$link); } $ok = false; if (function_exists('link')) { // link() function is available on windows (Vista, Server 2008 or greater) $ok = link($target,$link); } else { $GLOBALS['dir_list_warn_message'] .= 'Error: php link() function is disabled.
'; } if (!$ok){ $cmd = ''; if ($is_windows){ //$runas = 'runas /noprofile /user:Administrator '; $cmd = $runas.'mklink /H '.escapeshellarg($link).' '.escapeshellarg($target); } else { $cmd = 'ln '.escapeshellarg($target).' '.escapeshellarg($link); } $output = ''; $ok = system_exec_cmd($cmd,$output); if (!$ok) { $GLOBALS['dir_list_warn_message'] .= 'CMD: '.$cmd.'
'; $GLOBALS['dir_list_warn_message'] .= $output.'
'; } } return $ok;}function phpfm_get_total_size($path){ $total_size = false; $dir_cookiename = 'dir_'.md5(fix_cookie_name($path)); if (strlen($_COOKIE[$dir_cookiename])) { $total_size = $_COOKIE[$dir_cookiename]; if ($total_size != 'error'){ return intval($total_size); } return $total_size; } $total_size = system_get_total_size($path); if ($total_size !== false) { setcookie((string)$dir_cookiename, (string)$total_size, 0 , "/"); } return $total_size;}function dir_list_update_total_size(){ global $fm_current_dir, $dirname; $path = rtrim($fm_current_dir,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$dirname; $total_size = system_get_total_size($path); if ($total_size === false) { $total_size = php_get_total_size($path); } if ($total_size === false) { $total_size = 'error'; } $dir_cookiename = 'dir_'.md5(fix_cookie_name($fm_current_dir.$dirname)); setcookie((string)$dir_cookiename, (string)$total_size, 0 , "/"); echo $total_size; die();}// INFO: php filesize() returns ZERO for files over 4Gbfunction phpfm_filesize($file){ $filesize = intval(filesize($file)); if ($filesize <= 0) $filesize = system_get_total_size($file); return $filesize;}function system_get_total_size($path){ global $is_windows; $total_size = false; if ($is_windows){ if (class_exists('COM')) { $fsobj = new COM('Scripting.FileSystemObject'); if (is_object($fsobj)) { try { if (is_dir($path)) $ref = $fsobj->GetFolder($path); else $ref = $fsobj->GetFile($path); if (is_object($ref)) { $total_size = floatval($ref->size); $fsobj = null; unset($fsobj); } } catch (Exception $e) { } } } if ($total_size === false) { if (is_file($path)){ $output = ''; if (system_exec_cmd('for %I in ('.$path.') do @echo %~zI',$output)){ $total_size = floatval($output); } } } } else { $output = ''; if (system_exec_cmd('du -sb '.$path,$output)){ $total_size = floatval(substr($output,0,strpos($output,"\t"))); } } if ($total_size === false) fb_log('system_get_total_size("'.$path.'") = FALSE'); else fb_log('system_get_total_size("'.$path.'") = '.format_size($total_size)); return $total_size;}function php_get_total_size($path) { global $debug_mode,$max_php_recursion_counter; $max_php_recursion_counter = 0; $total_size = php_get_total_size_execute($path); if ($total_size === false) fb_log('php_get_total_size("'.$path.'") = false'.' (recursion: '.$max_php_recursion_counter.')'); else fb_log('php_get_total_size("'.$path.'") = '.format_size($total_size).' (recursion: '.$max_php_recursion_counter.')'); return $total_size;}function php_get_total_size_execute($path) { global $debug_mode,$max_php_recursion,$max_php_recursion_counter; fb_log('php_get_total_size_execute',$path); if ($debug_mode) return 0; $total_size = 0; if (is_dir($path)) { $entry_list = scandir(fs_encode($path)); foreach ($entry_list as $entry) { if ($entry == "." || $entry == "..") continue; if (is_dir($path.DIRECTORY_SEPARATOR.$entry)) { if ($max_php_recursion_counter >= $max_php_recursion) { return false; } $max_php_recursion_counter++; $size = php_get_total_size_execute($path.DIRECTORY_SEPARATOR.$entry); if ($size === false) { return false; } $total_size += $size; } else { $total_size += phpfm_filesize($path.DIRECTORY_SEPARATOR.$entry); } } } else { $total_size = phpfm_filesize($path); } return $total_size;}function php_shred($filepath) { // Based on https://github.com/DanielRuf/secure-shred (MIT license) // https://www.aldeid.com/wiki/Secure-delete-files // TODO: test write each pass, and rename the file before delete. try { // clear stat cache to avoid falsely reported file status // use $filepath parameter to possibly improve performance clearstatcache(true, $filepath); if (is_file($filepath) && is_readable($filepath) && is_writable($filepath)) { $read = new \SplFileObject($filepath, 'r'); $write = new \SplFileObject($filepath, 'r+'); while (!$read->eof()) { $line_pos = $read->ftell(); $line_content = $read->fgets(); $line_length = strlen($line_content); if ($line_length === 0) continue; for ($n=0;$n<3;$n++) { // does 3 overwrites per line $write->fseek($line_pos); $write->fwrite(random_bytes($line_length)); $write->fflush(); } } $write->ftruncate(0); $read = $write = null; return unlink($filepath); } } catch(\Exception $e) { fb_log($e->getMessage().' ('.$e->getCode().')'); } return false;}function total_delete($path,$followlinks=false,$checkhardlinks=true) { global $debug_mode; fb_log('total_delete',$path); if ($debug_mode) return; // TODO: $checkhardlinks will not allow to delete anything that has other links on the system, using stat() to avoid creating brokenlinks. Add a warning and complete action;. if (file_exists($path)) { @chmod($path,0755); if (is_dir($path)) { $entry_list = scandir(fs_encode($path)); foreach ($entry_list as $entry) { if ($entry == "." || $entry == "..") continue; if ($followlinks == false && is_link(rtrim($path,DIRECTORY_SEPARATOR))) continue; total_delete($path.DIRECTORY_SEPARATOR.$entry,$followlinks,$checkhardlinks); } if (is_link($path)) @unlink($path); else @rmdir($path); } else { @unlink($path); } } elseif (is_link($path)) { @unlink($path); // Broken links must be removed }}function total_copy($orig,$dest,$copylinks=true,$followlinks=false) { global $debug_mode; fb_log('total_copy',$orig.' => '.$dest); if ($debug_mode) return; $ok = true; if (file_exists($orig) || is_link($orig)) { if ($copylinks == true && is_link($orig)){ $ok = link_phpfm(readlink($orig), $dest); if (!$ok) $ok = link_phpfm($orig, $dest); // Allow copy of broken links, but rather copy the link to the target, as the link was. } elseif (is_dir($orig)) { $ok = mkdir(fs_encode($dest),0755); if ($ok) { $entry_list = scandir(fs_encode($orig)); foreach ($entry_list as $entry) { if ($entry == "." || $entry == "..") continue; if ($followlinks == false && is_link(rtrim($orig,DIRECTORY_SEPARATOR))){ $ok = link_phpfm(readlink($orig.DIRECTORY_SEPARATOR.$entry), $dest.DIRECTORY_SEPARATOR.$entry); } else { $ok = total_copy($orig.DIRECTORY_SEPARATOR.$entry, $dest.DIRECTORY_SEPARATOR.$entry, $copylinks, $followlinks); } if (!$ok) break; } } } else { $ok = copy((string)$orig,(string)$dest); } } return $ok;}function total_move($orig,$dest) { global $debug_mode; fb_log('total_move',$orig.' => '.$dest); if ($debug_mode) return; // Just why doesn't it has a MOVE alias?! return rename((string)$orig,(string)$dest);}function download(){ global $fm_current_dir,$filename,$debug_mode; $file = $fm_current_dir.$filename; fb_log('download',$file); if ($debug_mode) return; if(file_exists($file)){ $is_denied = false; foreach($download_ext_filter as $key=>$ext){ if (eregi($ext,$filename)){ $is_denied = true; break; } } if (!$is_denied){ $size = phpfm_filesize($file); header("Content-Type: application/save"); header("Content-Length: $size"); header("Content-Disposition: attachment; filename=\"".$filename."\""); header("Content-Transfer-Encoding: binary"); if ($fh = fopen("$file", "rb")){ ob_get_flush(); // Flush the output buffer and turn off output buffering, to allow direct download of big files fpassthru($fh); fclose($fh); } else alert(et('ReadDenied').": ".$file); } else alert(et('ReadDenied').": ".$file); } else alert(et('FileNotFound').": ".$file);}// Returns the full path of the current PHP executablefunction linux_get_proc_name(){ $output = ''; $ok = system_exec_cmd("readlink -f /proc/".posix_getpid()."/exe",$output); if (!$ok) return false; return $output;}function system_exec_file(){ global $fm_current_dir,$filename,$debug_mode,$is_windows; fb_log('system_exec_file',$filename); if ($debug_mode) return; header("Content-type: text/plain"); $file = $fm_current_dir.$filename; if(file_exists($file)){ if (!is_executable($file)) @chmod($file,0755); if (is_executable($file)) { $fm_current_dir = get_absolute_path($fm_current_dir); $cmd_line = ''; if ($is_windows) { $cmd_line .= "cd /D ".$fm_current_dir." && "; } else { $cmd_line .= "cd ".$fm_current_dir." && "; } // TODO: verificar e usar interpretador correto // php -f /script.php // bash /script.sh // sh /script.sh // python /script.py // perl /script.pl $cmd_line .= $file; echo "# ".$cmd_line."\n"; system_exec_cmd($cmd_line, $output); echo $output; } else echo('Error: '.$file.' is not executable...'); } else echo(et('FileNotFound').": ".$file);}function save_upload($temp_file,$filename,$dir_dest) { global $upload_ext_filter,$debug_mode,$is_windows; fb_log('save_upload',$temp_file.' => '.$dir_dest.$filename); if ($debug_mode) return; $filename = remove_special_chars($filename); $file = $dir_dest.$filename; $filesize = phpfm_filesize($temp_file); $is_denied = false; foreach($upload_ext_filter as $key=>$ext){ if (eregi($ext,$filename)){ $is_denied = true; break; } } if (!$is_denied){ if (!check_limit($filesize)){ if (file_exists($file)){ if (unlink($file)){ if (copy($temp_file,$file)){ // https://stackoverflow.com/questions/23851821/setting-file-permissions-in-windows-with-php if ($is_windows) system_exec_cmd('icacls "'.$file.'" /q /c /reset'); else @chmod($file,0644); $out = 6; } else $out = 2; } else $out = 5; } else { if (copy($temp_file,$file)){ if ($is_windows) system_exec_cmd('icacls "'.$file.'" /q /c /reset'); else @chmod($file,0644); $out = 1; } else $out = 2; } } else $out = 3; } else $out = 4; return $out;}// Note: readlink() may return a relative path, with or without ./, and that is not good for is_file() is_dir() and broken link evaluation, because we can´t always chdir() to the link basepath.function readlink_absolute_path($path){ global $is_windows; if (!is_link($path)) return $path; $target = readlink($path); if (strpos($target,'.'.DIRECTORY_SEPARATOR) === 0){ $target = substr($target,2); // remove ./ } if (($is_windows && substr($target,2,1) != ':') || (!$is_windows && substr($target,0,1) != DIRECTORY_SEPARATOR)){ // check if does not start with C: or / = relative path $target = substr($path,0,strrpos($path,DIRECTORY_SEPARATOR)+1).$target; // complete the target using origin path } return $target;}// +--------------------------------------------------// | Data Formating// +--------------------------------------------------function fix_cookie_name($str){ $str = remove_acentos(trim($str)); $str = str_replace('\\', '_', $str); $str = str_replace('/', '_', $str); $str = str_replace(':', '_', $str); $str = str_replace('*', '_', $str); $str = str_replace('?', '_', $str); $str = str_replace('"', '_', $str); $str = str_replace('<', '_', $str); $str = str_replace('>', '_', $str); $str = str_replace('|', '_', $str); $str = str_replace(' ', '_', $str); $str = str_strip($str,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-0123456789"); $str = replace_double('_', $str); $str = trim($str,'_'); return $str;}// http://www.ietf.org/rfc/rfc1738.txt// The characters ";", "/", "?", ":", "@", "=" and "&" are the characters which may be reserved for special meaning within a scheme. No other characters may be reserved within a scheme.// Thus, only alphanumerics, the special characters "$-_.+!*'(),", and reserved characters used for their reserved purposes may be used unencoded within a URL.function fix_url($str) { // Remove acentos $str = remove_acentos($str); // Substitui caracteres reservados $str = str_replace(';', '-', $str); $str = str_replace('/', '-', $str); $str = str_replace('?', '-', $str); $str = str_replace(':', '-', $str); $str = str_replace('@', '-', $str); $str = str_replace('=', '-', $str); $str = str_replace('&', '-', $str); // Caracteres adicionais $str = str_replace('(', '-', $str); $str = str_replace(')', '-', $str); $str = str_replace('.', '-', $str); $str = str_replace('_', '-', $str); $str = str_replace(' ', '-', $str); // Apenas caracteres válidos $str = str_strip($str, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890.-"); $str = replace_double('-', $str); $str = trim($str,'-'); return $str;}function fix_filename($str,$allowSpaces=false){ // no filesystem não podemos ter acentos $str = remove_acentos(trim($str)); // Substitui caracteres reservados $str = str_replace('\\', '_', $str); $str = str_replace('/', '_', $str); $str = str_replace(':', '_', $str); $str = str_replace('*', '_', $str); $str = str_replace('?', '_', $str); $str = str_replace('"', '_', $str); $str = str_replace('<', '_', $str); $str = str_replace('>', '_', $str); $str = str_replace('|', '_', $str); if ($allowSpaces){ // Apenas caracteres válidos $str = str_strip($str,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-0123456789.()[]& "); $str = replace_double(' ', $str); $str = trim($str); } else { $str = str_replace(' ', '_', $str); // Apenas caracteres válidos $str = str_strip($str,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-0123456789.()[]&"); } $str = replace_double('_', $str); $str = trim($str,'_'); return $str;}function fix_filename_download($str){ // no download podemos ter acentos $str = trim($str); // Substitui caracteres reservados $str = str_replace('\\', ' ', $str); $str = str_replace('/', ' ', $str); $str = str_replace(':', ' ', $str); $str = str_replace('*', ' ', $str); $str = str_replace('?', ' ', $str); $str = str_replace('"', ' ', $str); $str = str_replace('<', ' ', $str); $str = str_replace('>', ' ', $str); $str = str_replace('|', ' ', $str); // Apenas caracteres válidos $str = str_strip($str,"ÁÀÃÂÉÊÈËÍÓÔÕÒÚÜÇÑáàãâéêèëíóõôòúüçñABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-0123456789.()[] "); $str = replace_double(' ', $str); $str = trim($str); return $str;}function add_http($str){ if (mb_strlen($str) > 0 && mb_strpos($str, 'http://') === false && mb_strpos($str, 'https://') === false) return 'http://'.$str; else return $str;}function remove_sinais($str){ $sinais = "./\\-,:;'`~?!\"<>{}[]@#\$%^&*()_+=|"; $str = str_replace(str_split($sinais),"",$str); return replace_double(" ",$str);}function remove_acentos($string) { if ( !preg_match('/[\x80-\xff]/', $string) ) return $string; $chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', chr(195).chr(159) => 's', chr(195).chr(160) => 'a', chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', chr(195).chr(191) => 'y', // Decompositions for Latin Extended-A chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', chr(197).chr(154) => 'S',chr(197).chr(155) => 's', chr(197).chr(156) => 'S',chr(197).chr(157) => 's', chr(197).chr(158) => 'S',chr(197).chr(159) => 's', chr(197).chr(160) => 'S', chr(197).chr(161) => 's', chr(197).chr(162) => 'T', chr(197).chr(163) => 't', chr(197).chr(164) => 'T', chr(197).chr(165) => 't', chr(197).chr(166) => 'T', chr(197).chr(167) => 't', chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', chr(197).chr(190) => 'z', chr(197).chr(191) => 's' ); $string = strtr($string, $chars); return $string;}function retifica_aspas($str){ //return $str; $quotes = array( "\xC2\xAB" => '"', // « (U+00AB) in UTF-8 "\xC2\xBB" => '"', // » (U+00BB) in UTF-8 "\xE2\x80\x98" => "'", // ‘ (U+2018) in UTF-8 "\xE2\x80\x99" => "'", // ’ (U+2019) in UTF-8 "\xE2\x80\x9A" => "'", // ‚ (U+201A) in UTF-8 "\xE2\x80\x9B" => "'", // ? (U+201B) in UTF-8 "\xE2\x80\x9C" => '"', // “ (U+201C) in UTF-8 "\xE2\x80\x9D" => '"', // ” (U+201D) in UTF-8 "\xE2\x80\x9E" => '"', // „ (U+201E) in UTF-8 "\xE2\x80\x9F" => '"', // ? (U+201F) in UTF-8 "\xE2\x80\xB9" => "'", // ‹ (U+2039) in UTF-8 "\xE2\x80\xBA" => "'", // › (U+203A) in UTF-8 ); return strtr($str, $quotes); // replace Microsoft Word version of single and double quotations marks (“ ” ‘ ’) with regular quotes (' and ") //return iconv('UTF-8', 'ASCII//TRANSLIT', $str);}function html_encode($str){ global $charset; $str = preg_replace(array('/&/', '/</', '/>/', '/"/'), array('&', '<', '>', '"'), $str); // Bypass PHP to allow any charset!! if (version_compare(PHP_VERSION, '5.2.3', '>=')) { $str = htmlentities($str, ENT_QUOTES, $charset, false); } else { $str = htmlentities($str, ENT_QUOTES, $charset); } return $str;}function rep($x,$y){ if ($x) { $aux = ""; for ($a=1;$a<=$x;$a++) $aux .= $y; return $aux; } else return "";}function str_zero($arg1,$arg2){ if (strstr($arg1,"-") == false){ $aux = intval($arg2) - strlen($arg1); if ($aux) return rep($aux,"0").$arg1; else return $arg1; } else { return "[$arg1]"; }}function replace_double($sub,$str){ $out=str_replace($sub.$sub,$sub,$str); while ( strlen($out) != strlen($str) ){ $str=$out; $out=str_replace($sub.$sub,$sub,$str); } return $out;}function remove_special_chars($str){ $str = trim($str); $str = strtr($str,"¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ!@#%&*()[]{}+=?", "YuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy_______________"); $str = str_replace("..","",str_replace("/","",str_replace("\\","",str_replace("\$","",$str)))); return $str;}function array_csort() { $args = func_get_args(); $marray = array_shift($args); $msortline = "return(array_multisort("; foreach ($args as $arg) { $i++; if (is_string($arg)) { foreach ($marray as $row) { $sortarr[$i][] = $row[$arg]; } } else { $sortarr[$i] = $arg; } $msortline .= "\$sortarr[".$i."],"; } $msortline .= "\$marray));"; eval($msortline); return $marray;}function show_perms($P) { $sP = ""; if($P & 0x1000) $sP .= 'p'; // FIFO pipe elseif($P & 0x2000) $sP .= 'c'; // Character special elseif($P & 0x4000) $sP .= 'd'; // Directory elseif($P & 0x6000) $sP .= 'b'; // Block special elseif($P & 0x8000) $sP .= '−'; // Regular elseif($P & 0xA000) $sP .= 'l'; // Symbolic Link elseif($P & 0xC000) $sP .= 's'; // Socket else $sP .= 'u'; // UNKNOWN $sP .= ""; // owner - group - others $sP .= (($P & 0x0100) ? 'r' : '−') . (($P & 0x0080) ? 'w' : '−') . (($P & 0x0040) ? (($P & 0x0800) ? 's' : 'x' ) : (($P & 0x0800) ? 'S' : '−')); $sP .= (($P & 0x0020) ? 'r' : '−') . (($P & 0x0010) ? 'w' : '−') . (($P & 0x0008) ? (($P & 0x0400) ? 's' : 'x' ) : (($P & 0x0400) ? 'S' : '−')); $sP .= (($P & 0x0004) ? 'r' : '−') . (($P & 0x0002) ? 'w' : '−') . (($P & 0x0001) ? (($P & 0x0200) ? 't' : 'x' ) : (($P & 0x0200) ? 'T' : '−')); return $sP;}function format_size($arg) { if ($arg>0){ $j = 0; $ext = array(" bytes"," Kb"," Mb"," Gb"," Tb"); while ($arg >= pow(1024,$j)) ++$j; return round($arg / pow(1024,$j-1) * 100) / 100 . $ext[$j-1]; } else return "0 bytes";}function check_limit($new_filesize=0) { global $fm_current_root; global $quota_mb; if($quota_mb){ $total = intval(phpfm_get_total_size($fm_current_root)); if (floor(($total+$new_filesize)/(1024*1024)) > $quota_mb) return true; } return false;}function uppercase($str){ global $charset; return mb_strtoupper($str, $charset);}function lowercase($str){ global $charset; return mb_strtolower($str, $charset);}function word_count($theString) { $theString = html_decode(strip_tags($theString)); $char_count = mb_strlen($theString); $fullStr = $theString." "; $initial_whitespace_rExp = "^[[:alnum:]]$"; $left_trimmedStr = ereg_replace($initial_whitespace_rExp,"",$fullStr); $non_alphanumerics_rExp = "^[[:alnum:]]$"; $cleanedStr = ereg_replace($non_alphanumerics_rExp," ",$left_trimmedStr); $splitString = explode(" ",$cleanedStr); $word_count = count($splitString)-1; if(mb_strlen($fullStr)<2)$word_count=0; return $word_count;}function str_strip($str,$valid_chars){ $out = ""; for ($i=0;$i<mb_strlen($str);$i++){ $mb_char = mb_substr($str,$i,1); if (mb_strpos($valid_chars,$mb_char) !== false){ $out .= $mb_char; } } return $out;}function mb_str_ireplace($co, $naCo, $wCzym) { $wCzymM = mb_strtolower($wCzym); $coM = mb_strtolower($co); $offset = 0; while(!is_bool($poz = mb_strpos($wCzymM, $coM, $offset))) { $offset = $poz + mb_strlen($naCo); $wCzym = mb_substr($wCzym, 0, $poz). $naCo .mb_substr($wCzym, $poz+mb_strlen($co)); $wCzymM = mb_strtolower($wCzym); } return $wCzym;}// +--------------------------------------------------// | Interface// +--------------------------------------------------// Fix for the demo at https://phpfm-demo.000webhostapp.comfunction demo_fix(){ global $url_root; if (strpos($url_root,'phpfm-demo.000webhostapp.com') !== false) { echo " <script language=\"Javascript\" type=\"text/javascript\"> if (window.jQuery){ setTimeout(function(){ $('div:has(a:has(img[alt=\"www.000webhost.com\"]))').remove(); },1000); } </script>"; }}function html_header($header=""){ global $charset,$fm_color,$fm_path_info,$cookie_cache_time; echo " <!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> <html xmlns=\"//www.w3.org/1999/xhtml\">