PHP Malware Analysis

fm.php, foxa.php, m.php

md5: debc700a8202d757067403d5766dab8e

Jump to:

Screenshot


Attributes

Encoding

Environment

Execution

Files

Input

Title

URLs
  • http://localhost (Traces)
  • http://localhost/beneri.se_malware_analysis (HTML)
  • http://localhost/foxa.php (HTML)
  • http://localhost/foxa.php?img=favicon (HTML)
  • http://localhost/foxa.php?img=sprites& (HTML)
  • http://localhost/uploads/fm.php (Traces)
  • http://localhost/uploads/fm.php?p= (Traces)
  • http://localhost/uploads/foxa.php (Traces)
  • http://localhost/uploads/foxa.php?p= (Traces)
  • http://localhost/uploads/m.php (Traces)
  • http://localhost/uploads/m.php?p= (Traces)
  • http://php.net/manual/en/timezones.php (Deobfuscated, Original)
  • https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/highlight.min.js (Deobfuscated, Original)
  • https://github.com/alexantr/filemanager (Deobfuscated, HTML, Original)
  • https://highlightjs.org/ (Deobfuscated, Original)


Deobfuscated PHP code

<?php

/**
 * PHP File Manager (2017-08-07)
 * https://github.com/alexantr/filemanager
 */
// Auth with login/password (set true/false to enable/disable it)
$use_auth = false;
// Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
$auth_users = array('fm_admin' => 'fm_admin');
// Enable highlight.js (https://highlightjs.org/) on view's page
$use_highlightjs = true;
// highlight.js style
$highlightjs_style = 'vs';
// Default timezone for date() and time() - http://php.net/manual/en/timezones.php
$default_timezone = 'Europe/Minsk';
// UTC+3
// Root path for file manager
$root_path = $_SERVER['DOCUMENT_ROOT'];
// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
// Will not working if $root_path will be outside of server document root
$root_url = '';
// Server hostname. Can set manually if wrong
$http_host = $_SERVER['HTTP_HOST'];
// input encoding for iconv
$iconv_input_encoding = 'CP1251';
// date() format for file modification date
$datetime_format = 'd.m.y H:i';
//--- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL
// if fm included
if (defined('FM_EMBED')) {
    $use_auth = false;
} else {
    @set_time_limit(600);
    date_default_timezone_set($default_timezone);
    ini_set('default_charset', 'UTF-8');
    if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) {
        mb_internal_encoding('UTF-8');
    }
    if (function_exists('mb_regex_encoding')) {
        mb_regex_encoding('UTF-8');
    }
    session_cache_limiter('');
    session_name('filemanager');
    session_start();
}
if (empty($auth_users)) {
    $use_auth = false;
}
$is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';
// clean and check $root_path
$root_path = rtrim($root_path, '\\/');
$root_path = str_replace('\\', '/', $root_path);
if (!@is_dir($root_path)) {
    echo "<h1>Root path \"{$root_path}\" not found!</h1>";
    exit;
}
// clean $root_url
$root_url = fm_clean_path($root_url);
// abs path for site
defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path);
defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : ''));
defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']);
// logout
if (isset($_GET['logout'])) {
    unset($_SESSION['logged']);
    fm_redirect(FM_SELF_URL);
}
// Show image here
if (isset($_GET['img'])) {
    fm_show_image($_GET['img']);
}
// Auth
if ($use_auth) {
    if (isset($_SESSION['logged'], $auth_users[$_SESSION['logged']])) {
        // Logged
    } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'])) {
        // Logging In
        sleep(1);
        if (isset($auth_users[$_POST['fm_usr']]) && $_POST['fm_pwd'] === $auth_users[$_POST['fm_usr']]) {
            $_SESSION['logged'] = $_POST['fm_usr'];
            fm_set_msg('You are logged in');
            fm_redirect("FM_SELF_URL?p=");
        } else {
            unset($_SESSION['logged']);
            fm_set_msg('Wrong password', 'error');
            fm_redirect(FM_SELF_URL);
        }
    } else {
        // Form
        unset($_SESSION['logged']);
        fm_show_header();
        fm_show_message();
        ?>
        <div class="path">
            <form action="" method="post" style="margin:10px;text-align:center">
                <input name="fm_usr" value="" placeholder="Username" required>
                <input type="password" name="fm_pwd" value="" placeholder="Password" required>
                <input type="submit" value="Login">
            </form>
        </div>
        <?php 
        fm_show_footer();
        exit;
    }
}
define('FM_IS_WIN', false);
// always use ?p=
if (!isset($_GET['p'])) {
    fm_redirect("FM_SELF_URL?p=");
}
// get path
$p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : '');
// clean path
$p = fm_clean_path($p);
// instead globals vars
define('FM_PATH', $p);
define('FM_USE_AUTH', $use_auth);
defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding);
defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs);
defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style);
defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format);
unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style);
/*************************** ACTIONS ***************************/
// Delete file / folder
if (isset($_GET['del'])) {
    $del = $_GET['del'];
    $del = fm_clean_path($del);
    $del = str_replace('/', '', $del);
    if ($del != '' && $del != '..' && $del != '.') {
        $path = FM_ROOT_PATH;
        if (true) {
            $path = "FM_ROOT_PATH/FM_PATH";
        }
        $is_dir = is_dir($path . '/' . $del);
        if (fm_rdelete($path . '/' . $del)) {
            $msg = $is_dir ? 'Folder <b>%s</b> deleted' : 'File <b>%s</b> deleted';
            fm_set_msg(sprintf($msg, $del));
        } else {
            $msg = $is_dir ? 'Folder <b>%s</b> not deleted' : 'File <b>%s</b> not deleted';
            fm_set_msg(sprintf($msg, $del), 'error');
        }
    } else {
        fm_set_msg('Wrong file or folder name', 'error');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Create folder
if (isset($_GET['new'])) {
    $new = $_GET['new'];
    $new = fm_clean_path($new);
    $new = str_replace('/', '', $new);
    if ($new != '' && $new != '..' && $new != '.') {
        $path = FM_ROOT_PATH;
        if (true) {
            $path = "FM_ROOT_PATH/FM_PATH";
        }
        if (fm_mkdir($path . '/' . $new, false) === true) {
            fm_set_msg(sprintf('Folder <b>%s</b> created', $new));
        } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
            fm_set_msg(sprintf('Folder <b>%s</b> already exists', $new), 'alert');
        } else {
            fm_set_msg(sprintf('Folder <b>%s</b> not created', $new), 'error');
        }
    } else {
        fm_set_msg('Wrong folder name', 'error');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Copy folder / file
if (isset($_GET['copy'], $_GET['finish'])) {
    // from
    $copy = $_GET['copy'];
    $copy = fm_clean_path($copy);
    // empty path
    if ($copy == '') {
        fm_set_msg('Source path not defined', 'error');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    // abs path from
    $from = "FM_ROOT_PATH/" . $copy;
    // abs path to
    $dest = FM_ROOT_PATH;
    if (true) {
        $dest = "FM_ROOT_PATH/FM_PATH";
    }
    $dest .= '/' . basename($from);
    // move?
    $move = isset($_GET['move']);
    // copy/move
    if ($from != $dest) {
        $msg_from = trim("FM_PATH/" . basename($from), '/');
        if ($move) {
            $rename = fm_rename($from, $dest);
            if ($rename) {
                fm_set_msg(sprintf('Moved from <b>%s</b> to <b>%s</b>', $copy, $msg_from));
            } elseif ($rename === null) {
                fm_set_msg('File or folder with this path already exists', 'alert');
            } else {
                fm_set_msg(sprintf('Error while moving from <b>%s</b> to <b>%s</b>', $copy, $msg_from), 'error');
            }
        } else {
            if (fm_rcopy($from, $dest)) {
                fm_set_msg(sprintf('Copyied from <b>%s</b> to <b>%s</b>', $copy, $msg_from));
            } else {
                fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', $copy, $msg_from), 'error');
            }
        }
    } else {
        fm_set_msg('Paths must be not equal', 'alert');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Mass copy files/ folders
if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'])) {
    // from
    $path = FM_ROOT_PATH;
    if (true) {
        $path = "FM_ROOT_PATH/FM_PATH";
    }
    // to
    $copy_to_path = FM_ROOT_PATH;
    $copy_to = fm_clean_path($_POST['copy_to']);
    if ($copy_to != '') {
        $copy_to_path .= '/' . $copy_to;
    }
    if ($path == $copy_to_path) {
        fm_set_msg('Paths must be not equal', 'alert');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    if (!is_dir($copy_to_path)) {
        if (!fm_mkdir($copy_to_path, true)) {
            fm_set_msg('Unable to create destination folder', 'error');
            fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
        }
    }
    // move?
    $move = isset($_POST['move']);
    // copy/move
    $errors = 0;
    $files = $_POST['file'];
    if (is_array($files) && count($files)) {
        foreach ($files as $f) {
            if ($f != '') {
                // abs path from
                $from = $path . '/' . $f;
                // abs path to
                $dest = $copy_to_path . '/' . $f;
                // do
                if ($move) {
                    $rename = fm_rename($from, $dest);
                    if ($rename === false) {
                        $errors++;
                    }
                } else {
                    if (!fm_rcopy($from, $dest)) {
                        $errors++;
                    }
                }
            }
        }
        if ($errors == 0) {
            $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied';
            fm_set_msg($msg);
        } else {
            $msg = $move ? 'Error while moving items' : 'Error while copying items';
            fm_set_msg($msg, 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Rename
if (isset($_GET['ren'], $_GET['to'])) {
    // old name
    $old = $_GET['ren'];
    $old = fm_clean_path($old);
    $old = str_replace('/', '', $old);
    // new name
    $new = $_GET['to'];
    $new = fm_clean_path($new);
    $new = str_replace('/', '', $new);
    // path
    $path = FM_ROOT_PATH;
    if (true) {
        $path = "FM_ROOT_PATH/FM_PATH";
    }
    // rename
    if ($old != '' && $new != '') {
        if (fm_rename($path . '/' . $old, $path . '/' . $new)) {
            fm_set_msg(sprintf('Renamed from <b>%s</b> to <b>%s</b>', $old, $new));
        } else {
            fm_set_msg(sprintf('Error while renaming from <b>%s</b> to <b>%s</b>', $old, $new), 'error');
        }
    } else {
        fm_set_msg('Names not set', 'error');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Download
if (isset($_GET['dl'])) {
    $dl = $_GET['dl'];
    $dl = fm_clean_path($dl);
    $dl = str_replace('/', '', $dl);
    $path = FM_ROOT_PATH;
    if (true) {
        $path = "FM_ROOT_PATH/FM_PATH";
    }
    if ($dl != '' && is_file($path . '/' . $dl)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="' . basename($path . '/' . $dl) . '"');
        header('Content-Transfer-Encoding: binary');
        header('Connection: Keep-Alive');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($path . '/' . $dl));
        readfile($path . '/' . $dl);
        exit;
    } else {
        fm_set_msg('File not found', 'error');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
}
// Upload
if (isset($_POST['upl'])) {
    $path = FM_ROOT_PATH;
    if (true) {
        $path = "FM_ROOT_PATH/FM_PATH";
    }
    $errors = 0;
    $uploads = 0;
    $total = count($_FILES['upload']['name']);
    for ($i = 0; $i < $total; $i++) {
        $tmp_name = $_FILES['upload']['tmp_name'][$i];
        if (empty($_FILES['upload']['error'][$i]) && !empty($tmp_name) && $tmp_name != 'none') {
            if (move_uploaded_file($tmp_name, $path . '/' . $_FILES['upload']['name'][$i])) {
                $uploads++;
            } else {
                $errors++;
            }
        }
    }
    if ($errors == 0 && $uploads > 0) {
        fm_set_msg(sprintf('All files uploaded to <b>%s</b>', $path));
    } elseif ($errors == 0 && $uploads == 0) {
        fm_set_msg('Nothing uploaded', 'alert');
    } else {
        fm_set_msg(sprintf('Error while uploading files. Uploaded files: %s', $uploads), 'error');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Mass deleting
if (isset($_POST['group'], $_POST['delete'])) {
    $path = FM_ROOT_PATH;
    if (true) {
        $path = "FM_ROOT_PATH/FM_PATH";
    }
    $errors = 0;
    $files = $_POST['file'];
    if (is_array($files) && count($files)) {
        foreach ($files as $f) {
            if ($f != '') {
                $new_path = $path . '/' . $f;
                if (!fm_rdelete($new_path)) {
                    $errors++;
                }
            }
        }
        if ($errors == 0) {
            fm_set_msg('Selected files and folder deleted');
        } else {
            fm_set_msg('Error while deleting items', 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Pack files
if (isset($_POST['group'], $_POST['zip'])) {
    $path = FM_ROOT_PATH;
    if (true) {
        $path = "FM_ROOT_PATH/FM_PATH";
    }
    if (!class_exists('ZipArchive')) {
        fm_set_msg('Operations with archives are not available', 'error');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    $files = $_POST['file'];
    if (!empty($files)) {
        chdir($path);
        if (count($files) == 1) {
            $one_file = reset($files);
            $one_file = basename($one_file);
            $zipname = $one_file . '_' . date('ymd_His') . '.zip';
        } else {
            $zipname = 'archive_' . date('ymd_His') . '.zip';
        }
        $zipper = new FM_Zipper();
        $res = $zipper->create($zipname, $files);
        if ($res) {
            fm_set_msg(sprintf('Archive <b>%s</b> created', $zipname));
        } else {
            fm_set_msg('Archive not created', 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Unpack
if (isset($_GET['unzip'])) {
    $unzip = $_GET['unzip'];
    $unzip = fm_clean_path($unzip);
    $unzip = str_replace('/', '', $unzip);
    $path = FM_ROOT_PATH;
    if (true) {
        $path = "FM_ROOT_PATH/FM_PATH";
    }
    if (!class_exists('ZipArchive')) {
        fm_set_msg('Operations with archives are not available', 'error');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    if ($unzip != '' && is_file($path . '/' . $unzip)) {
        $zip_path = $path . '/' . $unzip;
        //to folder
        $tofolder = '';
        if (isset($_GET['tofolder'])) {
            $tofolder = pathinfo($zip_path, PATHINFO_FILENAME);
            if (fm_mkdir($path . '/' . $tofolder, true)) {
                $path .= '/' . $tofolder;
            }
        }
        $zipper = new FM_Zipper();
        $res = $zipper->unzip($zip_path, $path);
        if ($res) {
            fm_set_msg('Archive unpacked');
        } else {
            fm_set_msg('Archive not unpacked', 'error');
        }
    } else {
        fm_set_msg('File not found', 'error');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Change Perms (not for Windows)
if (isset($_POST['chmod']) && !FM_IS_WIN) {
    $path = FM_ROOT_PATH;
    if (true) {
        $path = "FM_ROOT_PATH/FM_PATH";
    }
    $file = $_POST['chmod'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || !is_file($path . '/' . $file) && !is_dir($path . '/' . $file)) {
        fm_set_msg('File not found', 'error');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    $mode = 0;
    if (!empty($_POST['ur'])) {
        $mode = 256;
    }
    if (!empty($_POST['uw'])) {
        $mode |= 0200;
    }
    if (!empty($_POST['ux'])) {
        $mode |= 0100;
    }
    if (!empty($_POST['gr'])) {
        $mode |= 040;
    }
    if (!empty($_POST['gw'])) {
        $mode |= 020;
    }
    if (!empty($_POST['gx'])) {
        $mode |= 010;
    }
    if (!empty($_POST['or'])) {
        $mode |= 04;
    }
    if (!empty($_POST['ow'])) {
        $mode |= 02;
    }
    if (!empty($_POST['ox'])) {
        $mode |= 01;
    }
    if (@chmod($path . '/' . $file, $mode)) {
        fm_set_msg('Permissions changed');
    } else {
        fm_set_msg('Permissions not changed', 'error');
    }
    fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
/*************************** /ACTIONS ***************************/
// get current path
$path = FM_ROOT_PATH;
if (true) {
    $path = "FM_ROOT_PATH/FM_PATH";
}
// check path
if (!is_dir($path)) {
    fm_redirect("FM_SELF_URL?p=");
}
// get parent folder
$parent = fm_get_parent_path(FM_PATH);
$objects = is_readable($path) ? scandir($path) : array();
$folders = array();
$files = array();
if (is_array($objects)) {
    foreach ($objects as $file) {
        if ($file == '.' || $file == '..') {
            continue;
        }
        $new_path = $path . '/' . $file;
        if (is_file($new_path)) {
            $files[] = $file;
        } elseif (is_dir($new_path) && $file != '.' && $file != '..') {
            $folders[] = $file;
        }
    }
}
if (!empty($files)) {
    natcasesort($files);
}
if (!empty($folders)) {
    natcasesort($folders);
}
// upload form
if (isset($_GET['upload'])) {
    fm_show_header();
    // HEADER
    fm_show_nav_path(FM_PATH);
    // current path
    ?>
    <div class="path">
        <p><b>Uploading files</b></p>
        <p class="break-word">Destination folder: <?php 
    echo fm_convert_win("FM_ROOT_PATH/FM_PATH");
    ?></p>
        <form action="" method="post" enctype="multipart/form-data">
            <input type="hidden" name="p" value="<?php 
    echo fm_enc(FM_PATH);
    ?>">
            <input type="hidden" name="upl" value="1">
            <input type="file" name="upload[]"><br>
            <input type="file" name="upload[]"><br>
            <input type="file" name="upload[]"><br>
            <input type="file" name="upload[]"><br>
            <input type="file" name="upload[]"><br>
            <br>
            <p>
                <button class="btn"><i class="icon-apply"></i> Upload</button> &nbsp;
                <b><a href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>"><i class="icon-cancel"></i> Cancel</a></b>
            </p>
        </form>
    </div>
    <?php 
    fm_show_footer();
    exit;
}
// copy form POST
if (isset($_POST['copy'])) {
    $copy_files = $_POST['file'];
    if (!is_array($copy_files) || empty($copy_files)) {
        fm_set_msg('Nothing selected', 'alert');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    fm_show_header();
    // HEADER
    fm_show_nav_path(FM_PATH);
    // current path
    ?>
    <div class="path">
        <p><b>Copying</b></p>
        <form action="" method="post">
            <input type="hidden" name="p" value="<?php 
    echo fm_enc(FM_PATH);
    ?>">
            <input type="hidden" name="finish" value="1">
            <?php 
    foreach ($copy_files as $cf) {
        echo '<input type="hidden" name="file[]" value="' . fm_enc($cf) . '">' . PHP_EOL;
    }
    ?>
            <p class="break-word">Files: <b><?php 
    echo implode('</b>, <b>', $copy_files);
    ?></b></p>
            <p class="break-word">Source folder: <?php 
    echo fm_convert_win("FM_ROOT_PATH/FM_PATH");
    ?><br>
                <label for="inp_copy_to">Destination folder:</label>
                <?php 
    echo "FM_ROOT_PATH";
    ?>/<input name="copy_to" id="inp_copy_to" value="<?php 
    echo fm_enc(FM_PATH);
    ?>">
            </p>
            <p><label><input type="checkbox" name="move" value="1"> Move</label></p>
            <p>
                <button class="btn"><i class="icon-apply"></i> Copy</button> &nbsp;
                <b><a href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>"><i class="icon-cancel"></i> Cancel</a></b>
            </p>
        </form>
    </div>
    <?php 
    fm_show_footer();
    exit;
}
// copy form
if (isset($_GET['copy']) && !isset($_GET['finish'])) {
    $copy = $_GET['copy'];
    $copy = fm_clean_path($copy);
    if ($copy == '' || !file_exists("FM_ROOT_PATH/" . $copy)) {
        fm_set_msg('File not found', 'error');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    fm_show_header();
    // HEADER
    fm_show_nav_path(FM_PATH);
    // current path
    ?>
    <div class="path">
        <p><b>Copying</b></p>
        <p class="break-word">
            Source path: <?php 
    echo fm_convert_win("FM_ROOT_PATH/" . $copy);
    ?><br>
            Destination folder: <?php 
    echo fm_convert_win("FM_ROOT_PATH/FM_PATH");
    ?>
        </p>
        <p>
            <b><a href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>&amp;copy=<?php 
    echo urlencode($copy);
    ?>&amp;finish=1"><i class="icon-apply"></i> Copy</a></b> &nbsp;
            <b><a href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>&amp;copy=<?php 
    echo urlencode($copy);
    ?>&amp;finish=1&amp;move=1"><i class="icon-apply"></i> Move</a></b> &nbsp;
            <b><a href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>"><i class="icon-cancel"></i> Cancel</a></b>
        </p>
        <p><i>Select folder:</i></p>
        <ul class="folders break-word">
            <?php 
    if ($parent !== false) {
        ?>
                <li><a href="?p=<?php 
        echo urlencode($parent);
        ?>&amp;copy=<?php 
        echo urlencode($copy);
        ?>"><i class="icon-arrow_up"></i> ..</a></li>
            <?php 
    }
    foreach ($folders as $f) {
        ?>
                <li><a href="?p=<?php 
        echo urlencode(trim("FM_PATH/" . $f, '/'));
        ?>&amp;copy=<?php 
        echo urlencode($copy);
        ?>"><i class="icon-folder"></i> <?php 
        echo fm_convert_win($f);
        ?></a></li>
            <?php 
    }
    ?>
        </ul>
    </div>
    <?php 
    fm_show_footer();
    exit;
}
// file viewer
if (isset($_GET['view'])) {
    $file = $_GET['view'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || !is_file($path . '/' . $file)) {
        fm_set_msg('File not found', 'error');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    fm_show_header();
    // HEADER
    fm_show_nav_path(FM_PATH);
    // current path
    $file_url = FM_ROOT_URL . fm_convert_win("/FM_PATH/" . $file);
    $file_path = $path . '/' . $file;
    $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
    $mime_type = fm_get_mime_type($file_path);
    $filesize = filesize($file_path);
    $is_zip = false;
    $is_image = false;
    $is_audio = false;
    $is_video = false;
    $is_text = false;
    $view_title = 'File';
    $filenames = false;
    // for zip
    $content = '';
    // for text
    if ($ext == 'zip') {
        $is_zip = true;
        $view_title = 'Archive';
        $filenames = fm_get_zif_info($file_path);
    } elseif (in_array($ext, fm_get_image_exts())) {
        $is_image = true;
        $view_title = 'Image';
    } elseif (in_array($ext, fm_get_audio_exts())) {
        $is_audio = true;
        $view_title = 'Audio';
    } elseif (in_array($ext, fm_get_video_exts())) {
        $is_video = true;
        $view_title = 'Video';
    } elseif (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
        $is_text = true;
        $content = file_get_contents($file_path);
    }
    ?>
    <div class="path">
        <p class="break-word"><b><?php 
    echo $view_title;
    ?> "<?php 
    echo fm_convert_win($file);
    ?>"</b></p>
        <p class="break-word">
            Full path: <?php 
    echo fm_convert_win($file_path);
    ?><br>
            File size: <?php 
    echo fm_get_filesize($filesize);
    if ($filesize >= 1000) {
        ?> (<?php 
        echo sprintf('%s bytes', $filesize);
        ?>)<?php 
    }
    ?><br>
            MIME-type: <?php 
    echo $mime_type;
    ?><br>
            <?php 
    // ZIP info
    if ($is_zip && $filenames !== false) {
        $total_files = 0;
        $total_comp = 0;
        $total_uncomp = 0;
        foreach ($filenames as $fn) {
            if (!$fn['folder']) {
                $total_files++;
            }
            $total_comp += $fn['compressed_size'];
            $total_uncomp += $fn['filesize'];
        }
        ?>
                Files in archive: <?php 
        echo $total_files;
        ?><br>
                Total size: <?php 
        echo fm_get_filesize($total_uncomp);
        ?><br>
                Size in archive: <?php 
        echo fm_get_filesize($total_comp);
        ?><br>
                Compression: <?php 
        echo round($total_comp / $total_uncomp * 100);
        ?>%<br>
                <?php 
    }
    // Image info
    if ($is_image) {
        $image_size = getimagesize($file_path);
        echo 'Image sizes: ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
    }
    // Text info
    if ($is_text) {
        $is_utf8 = fm_is_utf8($content);
        if (function_exists('iconv')) {
            if (!$is_utf8) {
                $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content);
            }
        }
        echo 'Charset: ' . ($is_utf8 ? 'utf-8' : '8 bit') . '<br>';
    }
    ?>
        </p>
        <p>
            <b><a href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>&amp;dl=<?php 
    echo urlencode($file);
    ?>"><i class="icon-download"></i> Download</a></b> &nbsp;
            <b><a href="<?php 
    echo $file_url;
    ?>" target="_blank"><i class="icon-chain"></i> Open</a></b> &nbsp;
            <?php 
    // ZIP actions
    if ($is_zip && $filenames !== false) {
        $zip_name = pathinfo($file_path, PATHINFO_FILENAME);
        ?>
                <b><a href="?p=<?php 
        echo urlencode(FM_PATH);
        ?>&amp;unzip=<?php 
        echo urlencode($file);
        ?>"><i class="icon-apply"></i> Unpack</a></b> &nbsp;
                <b><a href="?p=<?php 
        echo urlencode(FM_PATH);
        ?>&amp;unzip=<?php 
        echo urlencode($file);
        ?>&amp;tofolder=1" title="Unpack to <?php 
        echo fm_enc($zip_name);
        ?>"><i class="icon-apply"></i>
                    Unpack to folder</a></b> &nbsp;
                <?php 
    }
    ?>
            <b><a href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>"><i class="icon-goback"></i> Back</a></b>
        </p>
        <?php 
    if ($is_zip) {
        // ZIP content
        if ($filenames !== false) {
            echo "<code class=\"maxheight\">";
            foreach ($filenames as $fn) {
                if ($fn['folder']) {
                    echo '<b>' . $fn['name'] . '</b><br>';
                } else {
                    echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')<br>';
                }
            }
            echo "</code>";
        } else {
            echo "<p>Error while fetching archive info</p>";
        }
    } elseif ($is_image) {
        // Image content
        if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico'))) {
            echo '<p><img src="' . $file_url . '" alt="" class="preview-img"></p>';
        }
    } elseif ($is_audio) {
        echo '<p><audio src="' . $file_url . '" controls preload="metadata"></audio></p>';
    } elseif ($is_video) {
        echo '<div class="preview-video"><video src="' . $file_url . '" width="640" height="360" controls preload="metadata"></video></div>';
    } elseif ($is_text) {
        if (FM_USE_HIGHLIGHTJS) {
            // highlight
            $hljs_classes = array('shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml');
            $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext;
            if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\\.min\\.(css|js)$#i', $file)) {
                $hljs_class = 'nohighlight';
            }
            $content = '<pre class="with-hljs"><code class="' . $hljs_class . '">' . fm_enc($content) . '</code></pre>';
        } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) {
            // php highlight
            $content = highlight_string($content, true);
        } else {
            $content = '<pre>' . fm_enc($content) . '</pre>';
        }
        echo $content;
    }
    ?>
    </div>
    <?php 
    fm_show_footer();
    exit;
}
// chmod (not for Windows)
if (isset($_GET['chmod']) && !FM_IS_WIN) {
    $file = $_GET['chmod'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || !is_file($path . '/' . $file) && !is_dir($path . '/' . $file)) {
        fm_set_msg('File not found', 'error');
        fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
    }
    fm_show_header();
    // HEADER
    fm_show_nav_path(FM_PATH);
    // current path
    $file_url = "FM_ROOT_URL/FM_PATH/" . $file;
    $file_path = $path . '/' . $file;
    $mode = fileperms($path . '/' . $file);
    ?>
    <div class="path">
        <p><b>Change Permissions</b></p>
        <p>
            Full path: <?php 
    echo $file_path;
    ?><br>
        </p>
        <form action="" method="post">
            <input type="hidden" name="p" value="<?php 
    echo fm_enc(FM_PATH);
    ?>">
            <input type="hidden" name="chmod" value="<?php 
    echo fm_enc($file);
    ?>">

            <table class="compact-table">
                <tr>
                    <td></td>
                    <td><b>Owner</b></td>
                    <td><b>Group</b></td>
                    <td><b>Other</b></td>
                </tr>
                <tr>
                    <td style="text-align: right"><b>Read</b></td>
                    <td><label><input type="checkbox" name="ur" value="1"<?php 
    echo $mode & 0400 ? ' checked' : '';
    ?>></label></td>
                    <td><label><input type="checkbox" name="gr" value="1"<?php 
    echo $mode & 040 ? ' checked' : '';
    ?>></label></td>
                    <td><label><input type="checkbox" name="or" value="1"<?php 
    echo $mode & 04 ? ' checked' : '';
    ?>></label></td>
                </tr>
                <tr>
                    <td style="text-align: right"><b>Write</b></td>
                    <td><label><input type="checkbox" name="uw" value="1"<?php 
    echo $mode & 0200 ? ' checked' : '';
    ?>></label></td>
                    <td><label><input type="checkbox" name="gw" value="1"<?php 
    echo $mode & 020 ? ' checked' : '';
    ?>></label></td>
                    <td><label><input type="checkbox" name="ow" value="1"<?php 
    echo $mode & 02 ? ' checked' : '';
    ?>></label></td>
                </tr>
                <tr>
                    <td style="text-align: right"><b>Execute</b></td>
                    <td><label><input type="checkbox" name="ux" value="1"<?php 
    echo $mode & 0100 ? ' checked' : '';
    ?>></label></td>
                    <td><label><input type="checkbox" name="gx" value="1"<?php 
    echo $mode & 010 ? ' checked' : '';
    ?>></label></td>
                    <td><label><input type="checkbox" name="ox" value="1"<?php 
    echo $mode & 01 ? ' checked' : '';
    ?>></label></td>
                </tr>
            </table>

            <p>
                <button class="btn"><i class="icon-apply"></i> Change</button> &nbsp;
                <b><a href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>"><i class="icon-cancel"></i> Cancel</a></b>
            </p>

        </form>

    </div>
    <?php 
    fm_show_footer();
    exit;
}
//--- FILEMANAGER MAIN
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
// messages
fm_show_message();
$num_files = count($files);
$num_folders = count($folders);
$all_files_size = 0;
?>
<form action="" method="post">
<input type="hidden" name="p" value="<?php 
echo fm_enc(FM_PATH);
?>">
<input type="hidden" name="group" value="1">
<table><tr>
<th style="width:3%"><label><input type="checkbox" title="Invert selection" onclick="checkbox_toggle()"></label></th>
<th>Name</th><th style="width:10%">Size</th>
<th style="width:12%">Modified</th>
<?php 
if (!FM_IS_WIN) {
    ?><th style="width:6%">Perms</th><th style="width:10%">Owner</th><?php 
}
?>
<th style="width:13%"></th></tr>
<?php 
// link to parent folder
if ($parent !== false) {
    ?>
<tr><td></td><td colspan="<?php 
    echo !FM_IS_WIN ? '6' : '4';
    ?>"><a href="?p=<?php 
    echo urlencode($parent);
    ?>"><i class="icon-arrow_up"></i> ..</a></td></tr>
<?php 
}
foreach ($folders as $f) {
    $is_link = is_link($path . '/' . $f);
    $img = $is_link ? 'icon-link_folder' : 'icon-folder';
    $modif = date(FM_DATETIME_FORMAT, filemtime($path . '/' . $f));
    $perms = substr(decoct(fileperms($path . '/' . $f)), -4);
    if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
        $owner = posix_getpwuid(fileowner($path . '/' . $f));
        $group = posix_getgrgid(filegroup($path . '/' . $f));
    } else {
        $owner = array('name' => '?');
        $group = array('name' => '?');
    }
    ?>
<tr>
<td><label><input type="checkbox" name="file[]" value="<?php 
    echo fm_enc($f);
    ?>"></label></td>
<td><div class="filename"><a href="?p=<?php 
    echo urlencode(trim("FM_PATH/" . $f, '/'));
    ?>"><i class="<?php 
    echo $img;
    ?>"></i> <?php 
    echo fm_convert_win($f);
    ?></a><?php 
    echo $is_link ? ' &rarr; <i>' . readlink($path . '/' . $f) . '</i>' : '';
    ?></div></td>
<td>Folder</td><td><?php 
    echo $modif;
    ?></td>
<?php 
    if (!FM_IS_WIN) {
        ?>
<td><a title="Change Permissions" href="?p=<?php 
        echo urlencode(FM_PATH);
        ?>&amp;chmod=<?php 
        echo urlencode($f);
        ?>"><?php 
        echo $perms;
        ?></a></td>
<td><?php 
        echo $owner['name'] . ':' . $group['name'];
        ?></td>
<?php 
    }
    ?>
<td>
<a title="Delete" href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>&amp;del=<?php 
    echo urlencode($f);
    ?>" onclick="return confirm('Delete folder?');"><i class="icon-cross"></i></a>
<a title="Rename" href="#" onclick="rename('<?php 
    echo fm_enc(FM_PATH);
    ?>', '<?php 
    echo fm_enc($f);
    ?>');return false;"><i class="icon-rename"></i></a>
<a title="Copy to..." href="?p=&amp;copy=<?php 
    echo urlencode(trim("FM_PATH/" . $f, '/'));
    ?>"><i class="icon-copy"></i></a>
<a title="Direct link" href="<?php 
    echo "FM_ROOT_URL/FM_PATH/" . $f . '/';
    ?>" target="_blank"><i class="icon-chain"></i></a>
</td></tr>
    <?php 
    flush();
}
foreach ($files as $f) {
    $is_link = is_link($path . '/' . $f);
    $img = $is_link ? 'icon-link_file' : fm_get_file_icon_class($path . '/' . $f);
    $modif = date(FM_DATETIME_FORMAT, filemtime($path . '/' . $f));
    $filesize_raw = filesize($path . '/' . $f);
    $filesize = fm_get_filesize($filesize_raw);
    $filelink = '?p=' . urlencode(FM_PATH) . '&amp;view=' . urlencode($f);
    $all_files_size += $filesize_raw;
    $perms = substr(decoct(fileperms($path . '/' . $f)), -4);
    if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
        $owner = posix_getpwuid(fileowner($path . '/' . $f));
        $group = posix_getgrgid(filegroup($path . '/' . $f));
    } else {
        $owner = array('name' => '?');
        $group = array('name' => '?');
    }
    ?>
<tr>
<td><label><input type="checkbox" name="file[]" value="<?php 
    echo fm_enc($f);
    ?>"></label></td>
<td><div class="filename"><a href="<?php 
    echo $filelink;
    ?>" title="File info"><i class="<?php 
    echo $img;
    ?>"></i> <?php 
    echo fm_convert_win($f);
    ?></a><?php 
    echo $is_link ? ' &rarr; <i>' . readlink($path . '/' . $f) . '</i>' : '';
    ?></div></td>
<td><span class="gray" title="<?php 
    printf('%s bytes', $filesize_raw);
    ?>"><?php 
    echo $filesize;
    ?></span></td>
<td><?php 
    echo $modif;
    ?></td>
<?php 
    if (!FM_IS_WIN) {
        ?>
<td><a title="Change Permissions" href="?p=<?php 
        echo urlencode(FM_PATH);
        ?>&amp;chmod=<?php 
        echo urlencode($f);
        ?>"><?php 
        echo $perms;
        ?></a></td>
<td><?php 
        echo $owner['name'] . ':' . $group['name'];
        ?></td>
<?php 
    }
    ?>
<td>
<a title="Delete" href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>&amp;del=<?php 
    echo urlencode($f);
    ?>" onclick="return confirm('Delete file?');"><i class="icon-cross"></i></a>
<a title="Rename" href="#" onclick="rename('<?php 
    echo fm_enc(FM_PATH);
    ?>', '<?php 
    echo fm_enc($f);
    ?>');return false;"><i class="icon-rename"></i></a>
<a title="Copy to..." href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>&amp;copy=<?php 
    echo urlencode(trim("FM_PATH/" . $f, '/'));
    ?>"><i class="icon-copy"></i></a>
<a title="Direct link" href="<?php 
    echo "FM_ROOT_URL/FM_PATH/" . $f;
    ?>" target="_blank"><i class="icon-chain"></i></a>
<a title="Download" href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>&amp;dl=<?php 
    echo urlencode($f);
    ?>"><i class="icon-download"></i></a>
</td></tr>
    <?php 
    flush();
}
if (empty($folders) && empty($files)) {
    ?>
<tr><td></td><td colspan="<?php 
    echo !FM_IS_WIN ? '6' : '4';
    ?>"><em>Folder is empty</em></td></tr>
<?php 
} else {
    ?>
<tr><td class="gray"></td><td class="gray" colspan="<?php 
    echo !FM_IS_WIN ? '6' : '4';
    ?>">
Full size: <span title="<?php 
    printf('%s bytes', $all_files_size);
    ?>"><?php 
    echo fm_get_filesize($all_files_size);
    ?></span>,
files: <?php 
    echo $num_files;
    ?>,
folders: <?php 
    echo $num_folders;
    ?>
</td></tr>
<?php 
}
?>
</table>
<p class="path"><a href="#" onclick="select_all();return false;"><i class="icon-checkbox"></i> Select all</a> &nbsp;
<a href="#" onclick="unselect_all();return false;"><i class="icon-checkbox_uncheck"></i> Unselect all</a> &nbsp;
<a href="#" onclick="invert_all();return false;"><i class="icon-checkbox_invert"></i> Invert selection</a></p>
<p><input type="submit" name="delete" value="Delete" onclick="return confirm('Delete selected files and folders?')">
<input type="submit" name="zip" value="Pack" onclick="return confirm('Create archive?')">
<input type="submit" name="copy" value="Copy"></p>
</form>

<?php 
fm_show_footer();
//--- END
// Functions
/**
 * Delete  file or folder (recursively)
 * @param string $path
 * @return bool
 */
function fm_rdelete($path)
{
    if (is_link($path)) {
        return unlink($path);
    } elseif (is_dir($path)) {
        $objects = scandir($path);
        $ok = true;
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rdelete($path . '/' . $file)) {
                        $ok = false;
                    }
                }
            }
        }
        return $ok ? rmdir($path) : false;
    } elseif (is_file($path)) {
        return unlink($path);
    }
    return false;
}
/**
 * Recursive chmod
 * @param string $path
 * @param int $filemode
 * @param int $dirmode
 * @return bool
 * @todo Will use in mass chmod
 */
function fm_rchmod($path, $filemode, $dirmode)
{
    if (is_dir($path)) {
        if (!chmod($path, $dirmode)) {
            return false;
        }
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) {
                        return false;
                    }
                }
            }
        }
        return true;
    } elseif (is_link($path)) {
        return true;
    } elseif (is_file($path)) {
        return chmod($path, $filemode);
    }
    return false;
}
/**
 * Safely rename
 * @param string $old
 * @param string $new
 * @return bool|null
 */
function fm_rename($old, $new)
{
    return !file_exists($new) && file_exists($old) ? rename($old, $new) : null;
}
/**
 * Copy file or folder (recursively).
 * @param string $path
 * @param string $dest
 * @param bool $upd Update files
 * @param bool $force Create folder with same names instead file
 * @return bool
 */
function fm_rcopy($path, $dest, $upd = true, $force = true)
{
    if (is_dir($path)) {
        if (!fm_mkdir($dest, $force)) {
            return false;
        }
        $objects = scandir($path);
        $ok = true;
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) {
                        $ok = false;
                    }
                }
            }
        }
        return $ok;
    } elseif (is_file($path)) {
        return fm_copy($path, $dest, $upd);
    }
    return false;
}
/**
 * Safely create folder
 * @param string $dir
 * @param bool $force
 * @return bool
 */
function fm_mkdir($dir, $force)
{
    if (file_exists($dir)) {
        if (is_dir($dir)) {
            return $dir;
        } elseif (!$force) {
            return false;
        }
        unlink($dir);
    }
    return mkdir($dir, 0777, true);
}
/**
 * Safely copy file
 * @param string $f1
 * @param string $f2
 * @param bool $upd
 * @return bool
 */
function fm_copy($f1, $f2, $upd)
{
    $time1 = filemtime($f1);
    if (file_exists($f2)) {
        $time2 = filemtime($f2);
        if ($time2 >= $time1 && $upd) {
            return false;
        }
    }
    $ok = copy($f1, $f2);
    if ($ok) {
        touch($f2, $time1);
    }
    return $ok;
}
/**
 * Get mime type
 * @param string $file_path
 * @return mixed|string
 */
function fm_get_mime_type($file_path)
{
    if (function_exists('finfo_open')) {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime = finfo_file($finfo, $file_path);
        finfo_close($finfo);
        return $mime;
    } elseif (function_exists('mime_content_type')) {
        return mime_content_type($file_path);
    } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) {
        $file = escapeshellarg($file_path);
        $mime = shell_exec('file -bi ' . $file);
        return $mime;
    } else {
        return "--";
    }
}
/**
 * HTTP Redirect
 * @param string $url
 * @param int $code
 */
function fm_redirect($url, $code = 302)
{
    header('Location: ' . $url, true, $code);
    exit;
}
/**
 * Clean path
 * @param string $path
 * @return string
 */
function fm_clean_path($path)
{
    $path = trim($path);
    $path = trim($path, '\\/');
    $path = str_replace(array('../', '..\\'), '', $path);
    if ($path == '..') {
        $path = '';
    }
    return str_replace('\\', '/', $path);
}
/**
 * Get parent path
 * @param string $path
 * @return bool|string
 */
function fm_get_parent_path($path)
{
    $path = fm_clean_path($path);
    if ($path != '') {
        $array = explode('/', $path);
        if (count($array) > 1) {
            $array = array_slice($array, 0, -1);
            return implode('/', $array);
        }
        return "";
    }
    return false;
}
/**
 * Get nice filesize
 * @param int $size
 * @return string
 */
function fm_get_filesize($size)
{
    if ($size < 1000) {
        return sprintf('%s B', $size);
    } elseif ($size / 1024 < 1000) {
        return sprintf('%s KiB', round($size / 1024, 2));
    } elseif ($size / 1024 / 1024 < 1000) {
        return sprintf('%s MiB', round($size / 1024 / 1024, 2));
    } elseif ($size / 1024 / 1024 / 1024 < 1000) {
        return sprintf('%s GiB', round($size / 1024 / 1024 / 1024, 2));
    } else {
        return sprintf('%s TiB', round($size / 1024 / 1024 / 1024 / 1024, 2));
    }
}
/**
 * Get info about zip archive
 * @param string $path
 * @return array|bool
 */
function fm_get_zif_info($path)
{
    if (function_exists('zip_open')) {
        $arch = zip_open($path);
        if ($arch) {
            $filenames = array();
            while ($zip_entry = zip_read($arch)) {
                $zip_name = zip_entry_name($zip_entry);
                $zip_folder = substr($zip_name, -1) == '/';
                $filenames[] = array('name' => $zip_name, 'filesize' => zip_entry_filesize($zip_entry), 'compressed_size' => zip_entry_compressedsize($zip_entry), 'folder' => $zip_folder);
            }
            zip_close($arch);
            return $filenames;
        }
    }
    return false;
}
/**
 * Encode html entities
 * @param string $text
 * @return string
 */
function fm_enc($text)
{
    return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}
/**
 * Save message in session
 * @param string $msg
 * @param string $status
 */
function fm_set_msg($msg, $status = 'ok')
{
    $_SESSION['message'] = $msg;
    $_SESSION['status'] = $status;
}
/**
 * Check if string is in UTF-8
 * @param string $string
 * @return int
 */
function fm_is_utf8($string)
{
    return preg_match('//u', $string);
}
/**
 * Convert file name to UTF-8 in Windows
 * @param string $filename
 * @return string
 */
function fm_convert_win($filename)
{
    if (false) {
        $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename);
    }
    return $filename;
}
/**
 * Get CSS classname for file
 * @param string $path
 * @return string
 */
function fm_get_file_icon_class($path)
{
    // get extension
    $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
    switch ($ext) {
        case 'ico':
        case 'gif':
        case 'jpg':
        case 'jpeg':
        case 'jpc':
        case 'jp2':
        case 'jpx':
        case 'xbm':
        case 'wbmp':
        case 'png':
        case 'bmp':
        case 'tif':
        case 'tiff':
            $img = 'icon-file_image';
            break;
        case 'txt':
        case 'css':
        case 'ini':
        case 'conf':
        case 'log':
        case 'htaccess':
        case 'passwd':
        case 'ftpquota':
        case 'sql':
        case 'js':
        case 'json':
        case 'sh':
        case 'config':
        case 'twig':
        case 'tpl':
        case 'md':
        case 'gitignore':
        case 'less':
        case 'sass':
        case 'scss':
        case 'c':
        case 'cpp':
        case 'cs':
        case 'py':
        case 'map':
        case 'lock':
        case 'dtd':
            $img = 'icon-file_text';
            break;
        case 'zip':
        case 'rar':
        case 'gz':
        case 'tar':
        case '7z':
            $img = 'icon-file_zip';
            break;
        case 'php':
        case 'php4':
        case 'php5':
        case 'phps':
        case 'phtml':
            $img = 'icon-file_php';
            break;
        case 'htm':
        case 'html':
        case 'shtml':
        case 'xhtml':
            $img = 'icon-file_html';
            break;
        case 'xml':
        case 'xsl':
        case 'svg':
            $img = 'icon-file_code';
            break;
        case 'wav':
        case 'mp3':
        case 'mp2':
        case 'm4a':
        case 'aac':
        case 'ogg':
        case 'oga':
        case 'wma':
        case 'mka':
        case 'flac':
        case 'ac3':
        case 'tds':
            $img = 'icon-file_music';
            break;
        case 'm3u':
        case 'm3u8':
        case 'pls':
        case 'cue':
            $img = 'icon-file_playlist';
            break;
        case 'avi':
        case 'mpg':
        case 'mpeg':
        case 'mp4':
        case 'm4v':
        case 'flv':
        case 'f4v':
        case 'ogm':
        case 'ogv':
        case 'mov':
        case 'mkv':
        case '3gp':
        case 'asf':
        case 'wmv':
            $img = 'icon-file_film';
            break;
        case 'eml':
        case 'msg':
            $img = 'icon-file_outlook';
            break;
        case 'xls':
        case 'xlsx':
            $img = 'icon-file_excel';
            break;
        case 'csv':
            $img = 'icon-file_csv';
            break;
        case 'doc':
        case 'docx':
            $img = 'icon-file_word';
            break;
        case 'ppt':
        case 'pptx':
            $img = 'icon-file_powerpoint';
            break;
        case 'ttf':
        case 'ttc':
        case 'otf':
        case 'woff':
        case 'woff2':
        case 'eot':
        case 'fon':
            $img = 'icon-file_font';
            break;
        case 'pdf':
            $img = 'icon-file_pdf';
            break;
        case 'psd':
            $img = 'icon-file_photoshop';
            break;
        case 'ai':
        case 'eps':
            $img = 'icon-file_illustrator';
            break;
        case 'fla':
            $img = 'icon-file_flash';
            break;
        case 'swf':
            $img = 'icon-file_swf';
            break;
        case 'exe':
        case 'msi':
            $img = 'icon-file_application';
            break;
        case 'bat':
            $img = 'icon-file_terminal';
            break;
        default:
            $img = 'icon-document';
    }
    return $img;
}
/**
 * Get image files extensions
 * @return array
 */
function fm_get_image_exts()
{
    return array(0 => "ico", 1 => "gif", 2 => "jpg", 3 => "jpeg", 4 => "jpc", 5 => "jp2", 6 => "jpx", 7 => "xbm", 8 => "wbmp", 9 => "png", 10 => "bmp", 11 => "tif", 12 => "tiff", 13 => "psd");
}
/**
 * Get video files extensions
 * @return array
 */
function fm_get_video_exts()
{
    return array(0 => "webm", 1 => "mp4", 2 => "m4v", 3 => "ogm", 4 => "ogv", 5 => "mov");
}
/**
 * Get audio files extensions
 * @return array
 */
function fm_get_audio_exts()
{
    return array(0 => "wav", 1 => "mp3", 2 => "ogg", 3 => "m4a");
}
/**
 * Get text file extensions
 * @return array
 */
function fm_get_text_exts()
{
    return array(0 => "txt", 1 => "css", 2 => "ini", 3 => "conf", 4 => "log", 5 => "htaccess", 6 => "passwd", 7 => "ftpquota", 8 => "sql", 9 => "js", 10 => "json", 11 => "sh", 12 => "config", 13 => "php", 14 => "php4", 15 => "php5", 16 => "phps", 17 => "phtml", 18 => "htm", 19 => "html", 20 => "shtml", 21 => "xhtml", 22 => "xml", 23 => "xsl", 24 => "m3u", 25 => "m3u8", 26 => "pls", 27 => "cue", 28 => "eml", 29 => "msg", 30 => "csv", 31 => "bat", 32 => "twig", 33 => "tpl", 34 => "md", 35 => "gitignore", 36 => "less", 37 => "sass", 38 => "scss", 39 => "c", 40 => "cpp", 41 => "cs", 42 => "py", 43 => "map", 44 => "lock", 45 => "dtd", 46 => "svg");
}
/**
 * Get mime types of text files
 * @return array
 */
function fm_get_text_mimes()
{
    return array(0 => "application/xml", 1 => "application/javascript", 2 => "application/x-javascript", 3 => "image/svg+xml", 4 => "message/rfc822");
}
/**
 * Get file names of text files w/o extensions
 * @return array
 */
function fm_get_text_names()
{
    return array(0 => "license", 1 => "readme", 2 => "authors", 3 => "contributors", 4 => "changelog");
}
/**
 * Class to work with zip files (using ZipArchive)
 */
class FM_Zipper
{
    private $zip;
    public function __construct()
    {
        $this->zip = new ZipArchive();
    }
    /**
     * Create archive with name $filename and files $files (RELATIVE PATHS!)
     * @param string $filename
     * @param array|string $files
     * @return bool
     */
    public function create($filename, $files)
    {
        $res = $this->zip->open($filename, ZipArchive::CREATE);
        if ($res !== true) {
            return false;
        }
        if (is_array($files)) {
            foreach ($files as $f) {
                if (!$this->addFileOrDir($f)) {
                    $this->zip->close();
                    return false;
                }
            }
            $this->zip->close();
            return true;
        } else {
            if ($this->addFileOrDir($files)) {
                $this->zip->close();
                return true;
            }
            return false;
        }
    }
    /**
     * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
     * @param string $filename
     * @param string $path
     * @return bool
     */
    public function unzip($filename, $path)
    {
        $res = $this->zip->open($filename);
        if ($res !== true) {
            return false;
        }
        if ($this->zip->extractTo($path)) {
            $this->zip->close();
            return true;
        }
        return false;
    }
    /**
     * Add file/folder to archive
     * @param string $filename
     * @return bool
     */
    private function addFileOrDir($filename)
    {
        if (is_file($filename)) {
            return $this->zip->addFile($filename);
        } elseif (is_dir($filename)) {
            return $this->addDir($filename);
        }
        return false;
    }
    /**
     * Add folder recursively
     * @param string $path
     * @return bool
     */
    private function addDir($path)
    {
        if (!$this->zip->addEmptyDir($path)) {
            return false;
        }
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (is_dir($path . '/' . $file)) {
                        if (!$this->addDir($path . '/' . $file)) {
                            return false;
                        }
                    } elseif (is_file($path . '/' . $file)) {
                        if (!$this->zip->addFile($path . '/' . $file)) {
                            return false;
                        }
                    }
                }
            }
            return true;
        }
        return false;
    }
}
//--- templates functions
/**
 * Show nav block
 * @param string $path
 */
function fm_show_nav_path($path)
{
    ?>
<div class="path">
<div class="float-right">
<a title="Upload files" href="?p=<?php 
    echo urlencode(FM_PATH);
    ?>&amp;upload"><i class="icon-upload"></i></a>
<a title="New folder" href="#" onclick="newfolder('<?php 
    echo fm_enc(FM_PATH);
    ?>');return false;"><i class="icon-folder_add"></i></a>
<?php 
    if (FM_USE_AUTH) {
        ?><a title="Logout" href="?logout=1"><i class="icon-logout"></i></a><?php 
    }
    ?>
</div>
        <?php 
    $path = fm_clean_path($path);
    $root_url = "<a href='?p='><i class='icon-home' title='FM_ROOT_PATH'></i></a>";
    $sep = '<i class="icon-separator"></i>';
    if ($path != '') {
        $exploded = explode('/', $path);
        $count = count($exploded);
        $array = array();
        $parent = '';
        for ($i = 0; $i < $count; $i++) {
            $parent = trim($parent . '/' . $exploded[$i], '/');
            $parent_enc = urlencode($parent);
            $array[] = "<a href='?p={$parent_enc}'>" . fm_convert_win($exploded[$i]) . "</a>";
        }
        $root_url .= $sep . implode($sep, $array);
    }
    echo '<div class="break-word">' . $root_url . '</div>';
    ?>
</div>
<?php 
}
/**
 * Show message from session
 */
function fm_show_message()
{
    if (isset($_SESSION['message'])) {
        $class = isset($_SESSION['status']) ? $_SESSION['status'] : 'ok';
        echo '<p class="message ' . $class . '">' . $_SESSION['message'] . '</p>';
        unset($_SESSION['message']);
        unset($_SESSION['status']);
    }
}
/**
 * Show page header
 */
function fm_show_header()
{
    $sprites_ver = '20160315';
    header("Content-Type: text/html; charset=utf-8");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
    header("Pragma: no-cache");
    ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP File Manager</title>
<style>
html,body,div,span,p,pre,a,code,em,img,small,strong,ol,ul,li,form,label,table,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}
html{overflow-y:scroll}body{padding:0;font:13px/16px Tahoma,Arial,sans-serif;color:#222;background:#efefef}
input,select,textarea,button{font-size:inherit;font-family:inherit}
a{color:#296ea3;text-decoration:none}a:hover{color:#b00}img{vertical-align:middle;border:none}
a img{border:none}span.gray{color:#777}small{font-size:11px;color:#999}p{margin-bottom:10px}
ul{margin-left:2em;margin-bottom:10px}ul{list-style-type:none;margin-left:0}ul li{padding:3px 0}
table{border-collapse:collapse;border-spacing:0;margin-bottom:10px;width:100%}
th,td{padding:4px 7px;text-align:left;vertical-align:top;border:1px solid #ddd;background:#fff;white-space:nowrap}
th,td.gray{background-color:#eee}td.gray span{color:#222}
tr:hover td{background-color:#f5f5f5}tr:hover td.gray{background-color:#eee}
code,pre{display:block;margin-bottom:10px;font:13px/16px Consolas,'Courier New',Courier,monospace;border:1px dashed #ccc;padding:5px;overflow:auto}
pre.with-hljs{padding:0}
pre.with-hljs code{margin:0;border:0;overflow:visible}
code.maxheight,pre.maxheight{max-height:512px}input[type="checkbox"]{margin:0;padding:0}
#wrapper{max-width:1000px;min-width:400px;margin:10px auto}
.path{padding:4px 7px;border:1px solid #ddd;background-color:#fff;margin-bottom:10px}
.right{text-align:right}.center{text-align:center}.float-right{float:right}
.message{padding:4px 7px;border:1px solid #ddd;background-color:#fff}
.message.ok{border-color:green;color:green}
.message.error{border-color:red;color:red}
.message.alert{border-color:orange;color:orange}
.btn{border:0;background:none;padding:0;margin:0;font-weight:bold;color:#296ea3;cursor:pointer}.btn:hover{color:#b00}
.preview-img{max-width:100%;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC") repeat 0 0}
.preview-video{position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px}.preview-video video{position:absolute;width:100%;height:100%;left:0;top:0;background:#000}
[class*="icon-"]{display:inline-block;width:16px;height:16px;background:url("<?php 
    echo "FM_SELF_URL";
    ?>?img=sprites&amp;t=<?php 
    echo "20160315";
    ?>") no-repeat 0 0;vertical-align:bottom}
.icon-document{background-position:-16px 0}.icon-folder{background-position:-32px 0}
.icon-folder_add{background-position:-48px 0}.icon-upload{background-position:-64px 0}
.icon-arrow_up{background-position:-80px 0}.icon-home{background-position:-96px 0}
.icon-separator{background-position:-112px 0}.icon-cross{background-position:-128px 0}
.icon-copy{background-position:-144px 0}.icon-apply{background-position:-160px 0}
.icon-cancel{background-position:-176px 0}.icon-rename{background-position:-192px 0}
.icon-checkbox{background-position:-208px 0}.icon-checkbox_invert{background-position:-224px 0}
.icon-checkbox_uncheck{background-position:-240px 0}.icon-download{background-position:-256px 0}
.icon-goback{background-position:-272px 0}.icon-folder_open{background-position:-288px 0}
.icon-file_application{background-position:0 -16px}.icon-file_code{background-position:-16px -16px}
.icon-file_csv{background-position:-32px -16px}.icon-file_excel{background-position:-48px -16px}
.icon-file_film{background-position:-64px -16px}.icon-file_flash{background-position:-80px -16px}
.icon-file_font{background-position:-96px -16px}.icon-file_html{background-position:-112px -16px}
.icon-file_illustrator{background-position:-128px -16px}.icon-file_image{background-position:-144px -16px}
.icon-file_music{background-position:-160px -16px}.icon-file_outlook{background-position:-176px -16px}
.icon-file_pdf{background-position:-192px -16px}.icon-file_photoshop{background-position:-208px -16px}
.icon-file_php{background-position:-224px -16px}.icon-file_playlist{background-position:-240px -16px}
.icon-file_powerpoint{background-position:-256px -16px}.icon-file_swf{background-position:-272px -16px}
.icon-file_terminal{background-position:-288px -16px}.icon-file_text{background-position:-304px -16px}
.icon-file_word{background-position:-320px -16px}.icon-file_zip{background-position:-336px -16px}
.icon-logout{background-position:-304px 0}.icon-chain{background-position:-320px 0}
.icon-link_folder{background-position:-352px -16px}.icon-link_file{background-position:-368px -16px}
.compact-table{border:0;width:auto}.compact-table td,.compact-table th{width:100px;border:0;text-align:center}.compact-table tr:hover td{background-color:#fff}
.filename{max-width:420px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.break-word{word-wrap:break-word}
</style>
<link rel="icon" href="<?php 
    echo "FM_SELF_URL";
    ?>?img=favicon" type="image/png">
<link rel="shortcut icon" href="<?php 
    echo "FM_SELF_URL";
    ?>?img=favicon" type="image/png">
<?php 
    if (isset($_GET['view']) && FM_USE_HIGHLIGHTJS) {
        ?>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/styles/<?php 
        echo "FM_HIGHLIGHTJS_STYLE";
        ?>.min.css">
<?php 
    }
    ?>
</head>
<body>
<div id="wrapper">
<?php 
}
/**
 * Show page footer
 */
function fm_show_footer()
{
    ?>
<p class="center"><small><a href="https://github.com/alexantr/filemanager" target="_blank">PHP File Manager</a></small></p>
</div>
<script>
function newfolder(p){var n=prompt('New folder name','folder');if(n!==null&&n!==''){window.location.search='p='+encodeURIComponent(p)+'&new='+encodeURIComponent(n);}}
function rename(p,f){var n=prompt('New name',f);if(n!==null&&n!==''&&n!=f){window.location.search='p='+encodeURIComponent(p)+'&ren='+encodeURIComponent(f)+'&to='+encodeURIComponent(n);}}
function change_checkboxes(l,v){for(var i=l.length-1;i>=0;i--){l[i].checked=(typeof v==='boolean')?v:!l[i].checked;}}
function get_checkboxes(){var i=document.getElementsByName('file[]'),a=[];for(var j=i.length-1;j>=0;j--){if(i[j].type='checkbox'){a.push(i[j]);}}return a;}
function select_all(){var l=get_checkboxes();change_checkboxes(l,true);}
function unselect_all(){var l=get_checkboxes();change_checkboxes(l,false);}
function invert_all(){var l=get_checkboxes();change_checkboxes(l);}
function checkbox_toggle(){var l=get_checkboxes();l.push(this);change_checkboxes(l);}
</script>
<?php 
    if (isset($_GET['view']) && FM_USE_HIGHLIGHTJS) {
        ?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<?php 
    }
    ?>
</body>
</html>
<?php 
}
/**
 * Show image
 * @param string $img
 */
function fm_show_image($img)
{
    $modified_time = gmdate('D, d M Y 00:00:00') . ' GMT';
    $expires_time = gmdate('D, d M Y 00:00:00', strtotime('+1 day')) . ' GMT';
    $img = trim($img);
    $images = fm_get_images();
    $image = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAEElEQVR42mL4//8/A0CAAQAI/AL+26JNFgAAAABJRU5ErkJggg==';
    if (isset($images[$img])) {
        $image = $images[$img];
    }
    $image = base64_decode($image);
    if (function_exists('mb_strlen')) {
        $size = mb_strlen($image, '8bit');
    } else {
        $size = strlen($image);
    }
    if (function_exists('header_remove')) {
        header_remove('Cache-Control');
        header_remove('Pragma');
    } else {
        header('Cache-Control:');
        header('Pragma:');
    }
    header('Last-Modified: ' . $modified_time, true, 200);
    header('Expires: ' . $expires_time);
    header('Content-Length: ' . $size);
    header('Content-Type: image/png');
    echo $image;
    exit;
}
/**
 * Get base64-encoded images
 * @return array
 */
function fm_get_images()
{
    return array("favicon" => "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ\r\nbWFnZVJlYWR5ccllPAAAAZVJREFUeNqkk79Lw0AUx1+uidTQim4Waxfpnl1BcHMR6uLkIF0cpYOI\r\nf4KbOFcRwbGTc0HQSVQQXCqlFIXgFkhIyvWS870LaaPYH9CDy8vdfb+fey930aSUMEvT6VHVzw8x\r\nrKUX3N3Hj/8M+cZ6GcOtBPl6KY5iAA7KJzfVWrfbhUKhALZtQ6myDf1+X5nsuzjLUmUOnpa+v5r1\r\nZ4ZDDfsLiwER45xDEATgOI6KntfDd091GidzC8vZ4vH1QQ09+4MSMAMWRREKPMhmsyr6voYmrnb2\r\nPKEizdEabUaeFCDKCCHAdV0wTVNFznMgpVqGlZ2cipzHGtKSZwCIZJgJwxB38KHT6Sjx21V75Jcn\r\nLXmGAKTRpGVZUx2dAqQzSEqw9kqwuGqONTufPrw37D8lQFxCvjgPXIixANLEGfwuQacMOC4kZz+q\r\nGdhJS550BjpRCdCbAJCMJRkMASEIg+4Bxz4JwAwDSEueAYDLIM+QrOk6GHiRxjXSkJY8KUCvdXZ6\r\nkbuvNx+mOcbN9taGBlpLAWf9nX8EGADoCfqkKWV/cgAAAABJRU5ErkJggg==", "sprites" => "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\r\nRK5CYII=");
}

Execution traces

data/traces/debc700a8202d757067403d5766dab8e_trace-1676242012.0341.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-12 20:47:17.931961]
1	0	1	0.000160	393464
1	3	0	0.001919	794352	{main}	1		/var/www/html/uploads/fm.php	0	0
1		A						/var/www/html/uploads/fm.php	8	$use_auth = FALSE
1		A						/var/www/html/uploads/fm.php	12	$auth_users = ['fm_admin' => 'fm_admin']
1		A						/var/www/html/uploads/fm.php	16	$use_highlightjs = TRUE
1		A						/var/www/html/uploads/fm.php	19	$highlightjs_style = 'vs'
1		A						/var/www/html/uploads/fm.php	22	$default_timezone = 'Europe/Minsk'
1		A						/var/www/html/uploads/fm.php	25	$root_path = '/var/www/html'
1		A						/var/www/html/uploads/fm.php	29	$root_url = ''
1		A						/var/www/html/uploads/fm.php	32	$http_host = 'localhost'
1		A						/var/www/html/uploads/fm.php	35	$iconv_input_encoding = 'CP1251'
1		A						/var/www/html/uploads/fm.php	38	$datetime_format = 'd.m.y H:i'
2	4	0	0.002082	794352	set_time_limit	0		/var/www/html/uploads/fm.php	46	1	600
2	4	1	0.002104	794416
2	4	R			FALSE
2	5	0	0.002118	794384	date_default_timezone_set	0		/var/www/html/uploads/fm.php	48	1	'Europe/Minsk'
2	5	1	0.002137	794448
2	5	R			TRUE
2	6	0	0.002150	794400	ini_set	0		/var/www/html/uploads/fm.php	50	2	'default_charset'	'UTF-8'
2	6	1	0.002167	794504
2	6	R			'UTF-8'
2	7	0	0.002181	794400	version_compare	0		/var/www/html/uploads/fm.php	51	3	'7.2.34-37+ubuntu22.04.1+deb.sury.org+1'	'5.6.0'	'<'
2	7	1	0.002198	794496
2	7	R			FALSE
2	8	0	0.002211	794400	function_exists	0		/var/www/html/uploads/fm.php	54	1	'mb_regex_encoding'
2	8	1	0.002225	794440
2	8	R			FALSE
2	9	0	0.002238	794400	session_cache_limiter	0		/var/www/html/uploads/fm.php	58	1	''
2	9	1	0.002254	794472
2	9	R			'nocache'
2	10	0	0.002268	794400	session_name	0		/var/www/html/uploads/fm.php	59	1	'filemanager'
2	10	1	0.002282	794472
2	10	R			'PHPSESSID'
2	11	0	0.002296	794400	session_start	0		/var/www/html/uploads/fm.php	60	0
2	11	1	0.002382	794912
2	11	R			TRUE
1		A						/var/www/html/uploads/fm.php	68	$is_https = FALSE
2	12	0	0.002412	794912	rtrim	0		/var/www/html/uploads/fm.php	71	2	'/var/www/html'	'\\/'
2	12	1	0.002425	794984
2	12	R			'/var/www/html'
1		A						/var/www/html/uploads/fm.php	71	$root_path = '/var/www/html'
2	13	0	0.002450	794912	str_replace	0		/var/www/html/uploads/fm.php	72	3	'\\'	'/'	'/var/www/html'
2	13	1	0.002466	795008
2	13	R			'/var/www/html'
1		A						/var/www/html/uploads/fm.php	72	$root_path = '/var/www/html'
2	14	0	0.002490	794912	is_dir	0		/var/www/html/uploads/fm.php	73	1	'/var/www/html'
2	14	1	0.002509	794968
2	14	R			TRUE
2	15	0	0.002524	794928	fm_clean_path	1		/var/www/html/uploads/fm.php	79	1	''
3	16	0	0.002537	794928	trim	0		/var/www/html/uploads/fm.php	1259	1	''
3	16	1	0.002550	794960
3	16	R			''
2		A						/var/www/html/uploads/fm.php	1259	$path = ''
3	17	0	0.002573	794928	trim	0		/var/www/html/uploads/fm.php	1260	2	''	'\\/'
3	17	1	0.002585	795000
3	17	R			''
2		A						/var/www/html/uploads/fm.php	1260	$path = ''
3	18	0	0.002607	794928	str_replace	0		/var/www/html/uploads/fm.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	18	1	0.002622	795024
3	18	R			''
2		A						/var/www/html/uploads/fm.php	1261	$path = ''
3	19	0	0.002645	794928	str_replace	0		/var/www/html/uploads/fm.php	1265	3	'\\'	'/'	''
3	19	1	0.002659	795024
3	19	R			''
2	15	1	0.002672	794928
2	15	R			''
1		A						/var/www/html/uploads/fm.php	79	$root_url = ''
2	20	0	0.002694	794928	define	0		/var/www/html/uploads/fm.php	82	2	'FM_ROOT_PATH'	'/var/www/html'
2	20	1	0.002709	795032
2	20	R			TRUE
2	21	0	0.002724	795008	define	0		/var/www/html/uploads/fm.php	83	2	'FM_ROOT_URL'	'http://localhost'
2	21	1	0.002739	795112
2	21	R			TRUE
2	22	0	0.002752	795096	define	0		/var/www/html/uploads/fm.php	84	2	'FM_SELF_URL'	'http://localhost/uploads/fm.php'
2	22	1	0.002767	795200
2	22	R			TRUE
2	23	0	0.002781	795128	define	0		/var/www/html/uploads/fm.php	132	2	'FM_IS_WIN'	FALSE
2	23	1	0.002794	795232
2	23	R			TRUE
2	24	0	0.002819	795224	fm_redirect	1		/var/www/html/uploads/fm.php	136	2	'http://localhost/uploads/fm.php?p='	???
3	25	0	0.002835	795304	header	0		/var/www/html/uploads/fm.php	1248	3	'Location: http://localhost/uploads/fm.php?p='	TRUE	302
3	25	1	0.002854	795504
3	25	R			NULL
			0.002908	715968
TRACE END   [2023-02-12 20:47:17.934737]

data/traces/debc700a8202d757067403d5766dab8e_trace-1676242012.0396.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-12 20:47:17.937404]
1	0	1	0.000173	395720
1	3	0	0.002174	796608	{main}	1		/var/www/html/uploads/fm.php	0	0
1		A						/var/www/html/uploads/fm.php	8	$use_auth = FALSE
1		A						/var/www/html/uploads/fm.php	12	$auth_users = ['fm_admin' => 'fm_admin']
1		A						/var/www/html/uploads/fm.php	16	$use_highlightjs = TRUE
1		A						/var/www/html/uploads/fm.php	19	$highlightjs_style = 'vs'
1		A						/var/www/html/uploads/fm.php	22	$default_timezone = 'Europe/Minsk'
1		A						/var/www/html/uploads/fm.php	25	$root_path = '/var/www/html'
1		A						/var/www/html/uploads/fm.php	29	$root_url = ''
1		A						/var/www/html/uploads/fm.php	32	$http_host = 'localhost'
1		A						/var/www/html/uploads/fm.php	35	$iconv_input_encoding = 'CP1251'
1		A						/var/www/html/uploads/fm.php	38	$datetime_format = 'd.m.y H:i'
2	4	0	0.002351	796608	set_time_limit	0		/var/www/html/uploads/fm.php	46	1	600
2	4	1	0.002373	796672
2	4	R			FALSE
2	5	0	0.002392	796640	date_default_timezone_set	0		/var/www/html/uploads/fm.php	48	1	'Europe/Minsk'
2	5	1	0.002414	796704
2	5	R			TRUE
2	6	0	0.002431	796656	ini_set	0		/var/www/html/uploads/fm.php	50	2	'default_charset'	'UTF-8'
2	6	1	0.002455	796760
2	6	R			'UTF-8'
2	7	0	0.002473	796656	version_compare	0		/var/www/html/uploads/fm.php	51	3	'7.2.34-37+ubuntu22.04.1+deb.sury.org+1'	'5.6.0'	'<'
2	7	1	0.002525	796752
2	7	R			FALSE
2	8	0	0.002545	796656	function_exists	0		/var/www/html/uploads/fm.php	54	1	'mb_regex_encoding'
2	8	1	0.002563	796696
2	8	R			FALSE
2	9	0	0.002580	796656	session_cache_limiter	0		/var/www/html/uploads/fm.php	58	1	''
2	9	1	0.002599	796728
2	9	R			'nocache'
2	10	0	0.002617	796656	session_name	0		/var/www/html/uploads/fm.php	59	1	'filemanager'
2	10	1	0.002635	796728
2	10	R			'PHPSESSID'
2	11	0	0.002653	796656	session_start	0		/var/www/html/uploads/fm.php	60	0
2	11	1	0.002689	797064
2	11	R			TRUE
1		A						/var/www/html/uploads/fm.php	68	$is_https = FALSE
2	12	0	0.002723	797064	rtrim	0		/var/www/html/uploads/fm.php	71	2	'/var/www/html'	'\\/'
2	12	1	0.002741	797136
2	12	R			'/var/www/html'
1		A						/var/www/html/uploads/fm.php	71	$root_path = '/var/www/html'
2	13	0	0.002774	797064	str_replace	0		/var/www/html/uploads/fm.php	72	3	'\\'	'/'	'/var/www/html'
2	13	1	0.002794	797160
2	13	R			'/var/www/html'
1		A						/var/www/html/uploads/fm.php	72	$root_path = '/var/www/html'
2	14	0	0.002825	797064	is_dir	0		/var/www/html/uploads/fm.php	73	1	'/var/www/html'
2	14	1	0.002845	797120
2	14	R			TRUE
2	15	0	0.002863	797080	fm_clean_path	1		/var/www/html/uploads/fm.php	79	1	''
3	16	0	0.002880	797080	trim	0		/var/www/html/uploads/fm.php	1259	1	''
3	16	1	0.002895	797112
3	16	R			''
2		A						/var/www/html/uploads/fm.php	1259	$path = ''
3	17	0	0.002925	797080	trim	0		/var/www/html/uploads/fm.php	1260	2	''	'\\/'
3	17	1	0.002941	797152
3	17	R			''
2		A						/var/www/html/uploads/fm.php	1260	$path = ''
3	18	0	0.002970	797080	str_replace	0		/var/www/html/uploads/fm.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	18	1	0.002990	797176
3	18	R			''
2		A						/var/www/html/uploads/fm.php	1261	$path = ''
3	19	0	0.003021	797080	str_replace	0		/var/www/html/uploads/fm.php	1265	3	'\\'	'/'	''
3	19	1	0.003038	797176
3	19	R			''
2	15	1	0.003055	797080
2	15	R			''
1		A						/var/www/html/uploads/fm.php	79	$root_url = ''
2	20	0	0.003085	797080	define	0		/var/www/html/uploads/fm.php	82	2	'FM_ROOT_PATH'	'/var/www/html'
2	20	1	0.003104	797184
2	20	R			TRUE
2	21	0	0.003123	797160	define	0		/var/www/html/uploads/fm.php	83	2	'FM_ROOT_URL'	'http://localhost'
2	21	1	0.003143	797264
2	21	R			TRUE
2	22	0	0.003161	797248	define	0		/var/www/html/uploads/fm.php	84	2	'FM_SELF_URL'	'http://localhost/uploads/fm.php'
2	22	1	0.003179	797352
2	22	R			TRUE
2	23	0	0.003196	797280	define	0		/var/www/html/uploads/fm.php	132	2	'FM_IS_WIN'	FALSE
2	23	1	0.003214	797384
2	23	R			TRUE
1		A						/var/www/html/uploads/fm.php	140	$p = ''
2	24	0	0.003254	797312	fm_clean_path	1		/var/www/html/uploads/fm.php	143	1	''
3	25	0	0.003270	797312	trim	0		/var/www/html/uploads/fm.php	1259	1	''
3	25	1	0.003286	797344
3	25	R			''
2		A						/var/www/html/uploads/fm.php	1259	$path = ''
3	26	0	0.003315	797312	trim	0		/var/www/html/uploads/fm.php	1260	2	''	'\\/'
3	26	1	0.003332	797384
3	26	R			''
2		A						/var/www/html/uploads/fm.php	1260	$path = ''
3	27	0	0.003360	797312	str_replace	0		/var/www/html/uploads/fm.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	27	1	0.003379	797408
3	27	R			''
2		A						/var/www/html/uploads/fm.php	1261	$path = ''
3	28	0	0.003409	797312	str_replace	0		/var/www/html/uploads/fm.php	1265	3	'\\'	'/'	''
3	28	1	0.003426	797408
3	28	R			''
2	24	1	0.003443	797312
2	24	R			''
1		A						/var/www/html/uploads/fm.php	143	$p = ''
2	29	0	0.003472	797312	define	0		/var/www/html/uploads/fm.php	146	2	'FM_PATH'	''
2	29	1	0.003489	797416
2	29	R			TRUE
2	30	0	0.003505	797344	define	0		/var/www/html/uploads/fm.php	147	2	'FM_USE_AUTH'	FALSE
2	30	1	0.003523	797448
2	30	R			TRUE
2	31	0	0.003539	797376	define	0		/var/www/html/uploads/fm.php	149	2	'FM_ICONV_INPUT_ENC'	'CP1251'
2	31	1	0.003558	797480
2	31	R			TRUE
2	32	0	0.003575	797408	define	0		/var/www/html/uploads/fm.php	150	2	'FM_USE_HIGHLIGHTJS'	TRUE
2	32	1	0.003593	797512
2	32	R			TRUE
2	33	0	0.003609	797440	define	0		/var/www/html/uploads/fm.php	151	2	'FM_HIGHLIGHTJS_STYLE'	'vs'
2	33	1	0.003627	797544
2	33	R			TRUE
2	34	0	0.003643	797472	define	0		/var/www/html/uploads/fm.php	152	2	'FM_DATETIME_FORMAT'	'd.m.y H:i'
2	34	1	0.003662	797576
2	34	R			TRUE
1		A						/var/www/html/uploads/fm.php	567	$path = '/var/www/html'
2	35	0	0.003697	797504	is_dir	0		/var/www/html/uploads/fm.php	573	1	'/var/www/html'
2	35	1	0.003714	797544
2	35	R			TRUE
2	36	0	0.003732	797504	fm_get_parent_path	1		/var/www/html/uploads/fm.php	578	1	''
3	37	0	0.003749	797504	fm_clean_path	1		/var/www/html/uploads/fm.php	1275	1	''
4	38	0	0.003765	797504	trim	0		/var/www/html/uploads/fm.php	1259	1	''
4	38	1	0.003781	797536
4	38	R			''
3		A						/var/www/html/uploads/fm.php	1259	$path = ''
4	39	0	0.003811	797504	trim	0		/var/www/html/uploads/fm.php	1260	2	''	'\\/'
4	39	1	0.003828	797576
4	39	R			''
3		A						/var/www/html/uploads/fm.php	1260	$path = ''
4	40	0	0.003857	797504	str_replace	0		/var/www/html/uploads/fm.php	1261	3	[0 => '../', 1 => '..\\']	''	''
4	40	1	0.003877	797600
4	40	R			''
3		A						/var/www/html/uploads/fm.php	1261	$path = ''
4	41	0	0.003906	797504	str_replace	0		/var/www/html/uploads/fm.php	1265	3	'\\'	'/'	''
4	41	1	0.003924	797600
4	41	R			''
3	37	1	0.003941	797504
3	37	R			''
2		A						/var/www/html/uploads/fm.php	1275	$path = ''
2	36	1	0.003970	797504
2	36	R			FALSE
1		A						/var/www/html/uploads/fm.php	578	$parent = FALSE
2	42	0	0.004001	797504	is_readable	0		/var/www/html/uploads/fm.php	580	1	'/var/www/html'
2	42	1	0.004025	797544
2	42	R			TRUE
2	43	0	0.004043	797504	scandir	0		/var/www/html/uploads/fm.php	580	1	'/var/www/html'
2	43	1	0.004082	798008
2	43	R			[0 => '.', 1 => '..', 2 => 'uploads']
1		A						/var/www/html/uploads/fm.php	580	$objects = [0 => '.', 1 => '..', 2 => 'uploads']
1		A						/var/www/html/uploads/fm.php	581	$folders = []
1		A						/var/www/html/uploads/fm.php	582	$files = []
1		A						/var/www/html/uploads/fm.php	588	$new_path = '/var/www/html/uploads'
2	44	0	0.004165	798024	is_file	0		/var/www/html/uploads/fm.php	589	1	'/var/www/html/uploads'
2	44	1	0.004184	798072
2	44	R			FALSE
2	45	0	0.004201	798032	is_dir	0		/var/www/html/uploads/fm.php	591	1	'/var/www/html/uploads'
2	45	1	0.004217	798072
2	45	R			TRUE
1		A						/var/www/html/uploads/fm.php	592	$folders[] = 'uploads'
2	46	0	0.004250	798432	natcasesort	0		/var/www/html/uploads/fm.php	601	1	[0 => 'uploads']
2	46	1	0.004268	798464
2	46	R			TRUE
2	47	0	0.004287	798432	fm_show_header	1		/var/www/html/uploads/fm.php	948	0
2		A						/var/www/html/uploads/fm.php	1706	$sprites_ver = '20160315'
3	48	0	0.004323	798432	header	0		/var/www/html/uploads/fm.php	1707	1	'Content-Type: text/html; charset=utf-8'
3	48	1	0.004344	798608
3	48	R			NULL
3	49	0	0.004361	798576	header	0		/var/www/html/uploads/fm.php	1708	1	'Expires: Sat, 26 Jul 1997 05:00:00 GMT'
3	49	1	0.004382	798688
3	49	R			NULL
3	50	0	0.004399	798656	header	0		/var/www/html/uploads/fm.php	1709	1	'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
3	50	1	0.004422	798808
3	50	R			NULL
3	51	0	0.004440	798776	header	0		/var/www/html/uploads/fm.php	1710	1	'Pragma: no-cache'
3	51	1	0.004458	798872
3	51	R			NULL
2	47	1	0.004485	798808
2	52	0	0.004495	798808	fm_show_nav_path	1		/var/www/html/uploads/fm.php	949	1	''
3	53	0	0.004512	798808	urlencode	0		/var/www/html/uploads/fm.php	1662	1	''
3	53	1	0.004529	798872
3	53	R			''
3	54	0	0.004546	798808	fm_enc	1		/var/www/html/uploads/fm.php	1663	1	''
4	55	0	0.004562	798808	htmlspecialchars	0		/var/www/html/uploads/fm.php	1343	3	''	3	'UTF-8'
4	55	1	0.004582	799080
4	55	R			''
3	54	1	0.004598	798968
3	54	R			''
3	56	0	0.004616	798808	fm_clean_path	1		/var/www/html/uploads/fm.php	1667	1	''
4	57	0	0.004632	798808	trim	0		/var/www/html/uploads/fm.php	1259	1	''
4	57	1	0.004650	798840
4	57	R			''
3		A						/var/www/html/uploads/fm.php	1259	$path = ''
4	58	0	0.004681	798808	trim	0		/var/www/html/uploads/fm.php	1260	2	''	'\\/'
4	58	1	0.004697	798880
4	58	R			''
3		A						/var/www/html/uploads/fm.php	1260	$path = ''
4	59	0	0.004726	798808	str_replace	0		/var/www/html/uploads/fm.php	1261	3	[0 => '../', 1 => '..\\']	''	''
4	59	1	0.004742	798904
4	59	R			''
3		A						/var/www/html/uploads/fm.php	1261	$path = ''
4	60	0	0.004763	798808	str_replace	0		/var/www/html/uploads/fm.php	1265	3	'\\'	'/'	''
4	60	1	0.004777	798904
4	60	R			''
3	56	1	0.004789	798808
3	56	R			''
2		A						/var/www/html/uploads/fm.php	1667	$path = ''
2		A						/var/www/html/uploads/fm.php	1668	$root_url = '<a href=\'?p=\'><i class=\'icon-home\' title=\'/var/www/html\'></i></a>'
2		A						/var/www/html/uploads/fm.php	1669	$sep = '<i class="icon-separator"></i>'
2	52	1	0.004838	798808
2	61	0	0.004846	798808	fm_show_message	1		/var/www/html/uploads/fm.php	952	0
2	61	1	0.004858	798808
1		A						/var/www/html/uploads/fm.php	954	$num_files = 0
1		A						/var/www/html/uploads/fm.php	955	$num_folders = 1
1		A						/var/www/html/uploads/fm.php	956	$all_files_size = 0
2	62	0	0.004896	798808	fm_enc	1		/var/www/html/uploads/fm.php	959	1	''
3	63	0	0.004909	798808	htmlspecialchars	0		/var/www/html/uploads/fm.php	1343	3	''	3	'UTF-8'
3	63	1	0.004922	799080
3	63	R			''
2	62	1	0.004935	798968
2	62	R			''
2	64	0	0.004950	798856	is_link	0		/var/www/html/uploads/fm.php	975	1	'/var/www/html/uploads'
2	64	1	0.004965	798920
2	64	R			FALSE
1		A						/var/www/html/uploads/fm.php	975	$is_link = FALSE
1		A						/var/www/html/uploads/fm.php	976	$img = 'icon-folder'
2	65	0	0.005000	798880	filemtime	0		/var/www/html/uploads/fm.php	977	1	'/var/www/html/uploads'
2	65	1	0.005014	798920
2	65	R			1676242012
2	66	0	0.005026	798832	date	0		/var/www/html/uploads/fm.php	977	2	'd.m.y H:i'	1676242012
2	66	1	0.005069	800520
2	66	R			'13.02.23 01:46'
1		A						/var/www/html/uploads/fm.php	977	$modif = '13.02.23 01:46'
2	67	0	0.005099	800496	fileperms	0		/var/www/html/uploads/fm.php	978	1	'/var/www/html/uploads'
2	67	1	0.005112	800536
2	67	R			16895
2	68	0	0.005125	800448	decoct	0		/var/www/html/uploads/fm.php	978	1	16895
2	68	1	0.005138	800520
2	68	R			'40777'
2	69	0	0.005150	800480	substr	0		/var/www/html/uploads/fm.php	978	2	'40777'	-4
2	69	1	0.005163	800576
2	69	R			'0777'
1		A						/var/www/html/uploads/fm.php	978	$perms = '0777'
2	70	0	0.005187	800480	function_exists	0		/var/www/html/uploads/fm.php	979	1	'posix_getpwuid'
2	70	1	0.005205	800520
2	70	R			TRUE
2	71	0	0.005218	800480	function_exists	0		/var/www/html/uploads/fm.php	979	1	'posix_getgrgid'
2	71	1	0.005231	800520
2	71	R			TRUE
2	72	0	0.005244	800528	fileowner	0		/var/www/html/uploads/fm.php	980	1	'/var/www/html/uploads'
2	72	1	0.005256	800568
2	72	R			0
2	73	0	0.005268	800480	posix_getpwuid	0		/var/www/html/uploads/fm.php	980	1	0
2	73	1	0.005301	801280
2	73	R			['name' => 'root', 'passwd' => 'x', 'uid' => 0, 'gid' => 0, 'gecos' => 'root', 'dir' => '/root', 'shell' => '/bin/bash']
1		A						/var/www/html/uploads/fm.php	980	$owner = ['name' => 'root', 'passwd' => 'x', 'uid' => 0, 'gid' => 0, 'gecos' => 'root', 'dir' => '/root', 'shell' => '/bin/bash']
2	74	0	0.005349	801296	filegroup	0		/var/www/html/uploads/fm.php	981	1	'/var/www/html/uploads'
2	74	1	0.005366	801336
2	74	R			0
2	75	0	0.005379	801248	posix_getgrgid	0		/var/www/html/uploads/fm.php	981	1	0
2	75	1	0.005405	801904
2	75	R			['name' => 'root', 'passwd' => 'x', 'members' => [], 'gid' => 0]
1		A						/var/www/html/uploads/fm.php	981	$group = ['name' => 'root', 'passwd' => 'x', 'members' => [], 'gid' => 0]
2	76	0	0.005440	801872	fm_enc	1		/var/www/html/uploads/fm.php	988	1	'uploads'
3	77	0	0.005452	801872	htmlspecialchars	0		/var/www/html/uploads/fm.php	1343	3	'uploads'	3	'UTF-8'
3	77	1	0.005466	802144
3	77	R			'uploads'
2	76	1	0.005480	802032
2	76	R			'uploads'
2	78	0	0.005495	801912	trim	0		/var/www/html/uploads/fm.php	989	2	'/uploads'	'/'
2	78	1	0.005512	802016
2	78	R			'uploads'
2	79	0	0.005531	801904	urlencode	0		/var/www/html/uploads/fm.php	989	1	'uploads'
2	79	1	0.005548	801968
2	79	R			'uploads'
2	80	0	0.005565	801872	fm_convert_win	1		/var/www/html/uploads/fm.php	989	1	'uploads'
2	80	1	0.005581	801872
2	80	R			'uploads'
2	81	0	0.005601	801872	urlencode	0		/var/www/html/uploads/fm.php	992	1	''
2	81	1	0.005614	801936
2	81	R			''
2	82	0	0.005633	801872	urlencode	0		/var/www/html/uploads/fm.php	992	1	'uploads'
2	82	1	0.005661	801936
2	82	R			'uploads'
2	83	0	0.005686	801872	urlencode	0		/var/www/html/uploads/fm.php	996	1	''
2	83	1	0.005702	801936
2	83	R			''
2	84	0	0.005722	801872	urlencode	0		/var/www/html/uploads/fm.php	996	1	'uploads'
2	84	1	0.005753	801936
2	84	R			'uploads'
2	85	0	0.005776	801872	fm_enc	1		/var/www/html/uploads/fm.php	997	1	''
3	86	0	0.005793	801872	htmlspecialchars	0		/var/www/html/uploads/fm.php	1343	3	''	3	'UTF-8'
3	86	1	0.005808	802144
3	86	R			''
2	85	1	0.005821	802032
2	85	R			''
2	87	0	0.005834	801872	fm_enc	1		/var/www/html/uploads/fm.php	997	1	'uploads'
3	88	0	0.005846	801872	htmlspecialchars	0		/var/www/html/uploads/fm.php	1343	3	'uploads'	3	'UTF-8'
3	88	1	0.005866	802144
3	88	R			'uploads'
2	87	1	0.005883	802032
2	87	R			'uploads'
2	89	0	0.005898	801912	trim	0		/var/www/html/uploads/fm.php	998	2	'/uploads'	'/'
2	89	1	0.005910	802016
2	89	R			'uploads'
2	90	0	0.005923	801904	urlencode	0		/var/www/html/uploads/fm.php	998	1	'uploads'
2	90	1	0.005937	801968
2	90	R			'uploads'
2	91	0	0.005957	801872	flush	0		/var/www/html/uploads/fm.php	1002	0
2	91	1	0.006175	801872
2	91	R			NULL
2	92	0	0.006200	801872	printf	0		/var/www/html/uploads/fm.php	1049	2	'%s bytes'	0
2	92	1	0.006219	801936
2	92	R			7
2	93	0	0.006233	801872	fm_get_filesize	1		/var/www/html/uploads/fm.php	1049	1	0
3	94	0	0.006247	801872	sprintf	0		/var/www/html/uploads/fm.php	1295	2	'%s B'	0
3	94	1	0.006260	802256
3	94	R			'0 B'
2	93	1	0.006280	802192
2	93	R			'0 B'
2	95	0	0.006302	801872	fm_show_footer	1		/var/www/html/uploads/fm.php	1066	0
2	95	1	0.006319	801872
1	3	1	0.006336	801872
			0.006428	463592
TRACE END   [2023-02-12 20:47:17.943696]

data/traces/debc700a8202d757067403d5766dab8e_trace-1676259756.3976.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-13 01:43:02.295425]
1	0	1	0.000206	393512
1	3	0	0.002507	794400	{main}	1		/var/www/html/uploads/foxa.php	0	0
1		A						/var/www/html/uploads/foxa.php	8	$use_auth = FALSE
1		A						/var/www/html/uploads/foxa.php	12	$auth_users = ['fm_admin' => 'fm_admin']
1		A						/var/www/html/uploads/foxa.php	16	$use_highlightjs = TRUE
1		A						/var/www/html/uploads/foxa.php	19	$highlightjs_style = 'vs'
1		A						/var/www/html/uploads/foxa.php	22	$default_timezone = 'Europe/Minsk'
1		A						/var/www/html/uploads/foxa.php	25	$root_path = '/var/www/html'
1		A						/var/www/html/uploads/foxa.php	29	$root_url = ''
1		A						/var/www/html/uploads/foxa.php	32	$http_host = 'localhost'
1		A						/var/www/html/uploads/foxa.php	35	$iconv_input_encoding = 'CP1251'
1		A						/var/www/html/uploads/foxa.php	38	$datetime_format = 'd.m.y H:i'
2	4	0	0.002750	794400	set_time_limit	0		/var/www/html/uploads/foxa.php	46	1	600
2	4	1	0.002784	794464
2	4	R			FALSE
2	5	0	0.002811	794432	date_default_timezone_set	0		/var/www/html/uploads/foxa.php	48	1	'Europe/Minsk'
2	5	1	0.002843	794496
2	5	R			TRUE
2	6	0	0.002867	794448	ini_set	0		/var/www/html/uploads/foxa.php	50	2	'default_charset'	'UTF-8'
2	6	1	0.002891	794552
2	6	R			'UTF-8'
2	7	0	0.002914	794448	version_compare	0		/var/www/html/uploads/foxa.php	51	3	'7.2.34-37+ubuntu22.04.1+deb.sury.org+1'	'5.6.0'	'<'
2	7	1	0.002940	794544
2	7	R			FALSE
2	8	0	0.002965	794448	function_exists	0		/var/www/html/uploads/foxa.php	54	1	'mb_regex_encoding'
2	8	1	0.002989	794488
2	8	R			FALSE
2	9	0	0.003012	794448	session_cache_limiter	0		/var/www/html/uploads/foxa.php	58	1	''
2	9	1	0.003037	794520
2	9	R			'nocache'
2	10	0	0.003059	794448	session_name	0		/var/www/html/uploads/foxa.php	59	1	'filemanager'
2	10	1	0.003081	794520
2	10	R			'PHPSESSID'
2	11	0	0.003107	794448	session_start	0		/var/www/html/uploads/foxa.php	60	0
2	11	1	0.003222	794960
2	11	R			TRUE
1		A						/var/www/html/uploads/foxa.php	68	$is_https = FALSE
2	12	0	0.003270	794960	rtrim	0		/var/www/html/uploads/foxa.php	71	2	'/var/www/html'	'\\/'
2	12	1	0.003293	795032
2	12	R			'/var/www/html'
1		A						/var/www/html/uploads/foxa.php	71	$root_path = '/var/www/html'
2	13	0	0.003339	794960	str_replace	0		/var/www/html/uploads/foxa.php	72	3	'\\'	'/'	'/var/www/html'
2	13	1	0.003364	795056
2	13	R			'/var/www/html'
1		A						/var/www/html/uploads/foxa.php	72	$root_path = '/var/www/html'
2	14	0	0.003407	794960	is_dir	0		/var/www/html/uploads/foxa.php	73	1	'/var/www/html'
2	14	1	0.003437	795016
2	14	R			TRUE
2	15	0	0.003466	794976	fm_clean_path	1		/var/www/html/uploads/foxa.php	79	1	''
3	16	0	0.003486	794976	trim	0		/var/www/html/uploads/foxa.php	1259	1	''
3	16	1	0.003507	795008
3	16	R			''
2		A						/var/www/html/uploads/foxa.php	1259	$path = ''
3	17	0	0.003547	794976	trim	0		/var/www/html/uploads/foxa.php	1260	2	''	'\\/'
3	17	1	0.003568	795048
3	17	R			''
2		A						/var/www/html/uploads/foxa.php	1260	$path = ''
3	18	0	0.003609	794976	str_replace	0		/var/www/html/uploads/foxa.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	18	1	0.003634	795072
3	18	R			''
2		A						/var/www/html/uploads/foxa.php	1261	$path = ''
3	19	0	0.003679	794976	str_replace	0		/var/www/html/uploads/foxa.php	1265	3	'\\'	'/'	''
3	19	1	0.003702	795072
3	19	R			''
2	15	1	0.003727	794976
2	15	R			''
1		A						/var/www/html/uploads/foxa.php	79	$root_url = ''
2	20	0	0.003765	794976	define	0		/var/www/html/uploads/foxa.php	82	2	'FM_ROOT_PATH'	'/var/www/html'
2	20	1	0.003788	795080
2	20	R			TRUE
2	21	0	0.003815	795056	define	0		/var/www/html/uploads/foxa.php	83	2	'FM_ROOT_URL'	'http://localhost'
2	21	1	0.003839	795160
2	21	R			TRUE
2	22	0	0.003864	795152	define	0		/var/www/html/uploads/foxa.php	84	2	'FM_SELF_URL'	'http://localhost/uploads/foxa.php'
2	22	1	0.003887	795256
2	22	R			TRUE
2	23	0	0.003912	795184	define	0		/var/www/html/uploads/foxa.php	132	2	'FM_IS_WIN'	FALSE
2	23	1	0.003950	795288
2	23	R			TRUE
2	24	0	0.003973	795280	fm_redirect	1		/var/www/html/uploads/foxa.php	136	2	'http://localhost/uploads/foxa.php?p='	???
3	25	0	0.003997	795360	header	0		/var/www/html/uploads/foxa.php	1248	3	'Location: http://localhost/uploads/foxa.php?p='	TRUE	302
3	25	1	0.004024	795560
3	25	R			NULL
			0.004092	716000
TRACE END   [2023-02-13 01:43:02.299347]

data/traces/debc700a8202d757067403d5766dab8e_trace-1676259756.4041.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-13 01:43:02.301970]
1	0	1	0.000135	395752
1	3	0	0.001787	796640	{main}	1		/var/www/html/uploads/foxa.php	0	0
1		A						/var/www/html/uploads/foxa.php	8	$use_auth = FALSE
1		A						/var/www/html/uploads/foxa.php	12	$auth_users = ['fm_admin' => 'fm_admin']
1		A						/var/www/html/uploads/foxa.php	16	$use_highlightjs = TRUE
1		A						/var/www/html/uploads/foxa.php	19	$highlightjs_style = 'vs'
1		A						/var/www/html/uploads/foxa.php	22	$default_timezone = 'Europe/Minsk'
1		A						/var/www/html/uploads/foxa.php	25	$root_path = '/var/www/html'
1		A						/var/www/html/uploads/foxa.php	29	$root_url = ''
1		A						/var/www/html/uploads/foxa.php	32	$http_host = 'localhost'
1		A						/var/www/html/uploads/foxa.php	35	$iconv_input_encoding = 'CP1251'
1		A						/var/www/html/uploads/foxa.php	38	$datetime_format = 'd.m.y H:i'
2	4	0	0.002008	796640	set_time_limit	0		/var/www/html/uploads/foxa.php	46	1	600
2	4	1	0.002026	796704
2	4	R			FALSE
2	5	0	0.002041	796672	date_default_timezone_set	0		/var/www/html/uploads/foxa.php	48	1	'Europe/Minsk'
2	5	1	0.002057	796736
2	5	R			TRUE
2	6	0	0.002071	796688	ini_set	0		/var/www/html/uploads/foxa.php	50	2	'default_charset'	'UTF-8'
2	6	1	0.002086	796792
2	6	R			'UTF-8'
2	7	0	0.002099	796688	version_compare	0		/var/www/html/uploads/foxa.php	51	3	'7.2.34-37+ubuntu22.04.1+deb.sury.org+1'	'5.6.0'	'<'
2	7	1	0.002116	796784
2	7	R			FALSE
2	8	0	0.002129	796688	function_exists	0		/var/www/html/uploads/foxa.php	54	1	'mb_regex_encoding'
2	8	1	0.002143	796728
2	8	R			FALSE
2	9	0	0.002155	796688	session_cache_limiter	0		/var/www/html/uploads/foxa.php	58	1	''
2	9	1	0.002170	796760
2	9	R			'nocache'
2	10	0	0.002183	796688	session_name	0		/var/www/html/uploads/foxa.php	59	1	'filemanager'
2	10	1	0.002197	796760
2	10	R			'PHPSESSID'
2	11	0	0.002210	796688	session_start	0		/var/www/html/uploads/foxa.php	60	0
2	11	1	0.002236	797096
2	11	R			TRUE
1		A						/var/www/html/uploads/foxa.php	68	$is_https = FALSE
2	12	0	0.002262	797096	rtrim	0		/var/www/html/uploads/foxa.php	71	2	'/var/www/html'	'\\/'
2	12	1	0.002275	797168
2	12	R			'/var/www/html'
1		A						/var/www/html/uploads/foxa.php	71	$root_path = '/var/www/html'
2	13	0	0.002299	797096	str_replace	0		/var/www/html/uploads/foxa.php	72	3	'\\'	'/'	'/var/www/html'
2	13	1	0.002314	797192
2	13	R			'/var/www/html'
1		A						/var/www/html/uploads/foxa.php	72	$root_path = '/var/www/html'
2	14	0	0.002338	797096	is_dir	0		/var/www/html/uploads/foxa.php	73	1	'/var/www/html'
2	14	1	0.002353	797152
2	14	R			TRUE
2	15	0	0.002366	797112	fm_clean_path	1		/var/www/html/uploads/foxa.php	79	1	''
3	16	0	0.002379	797112	trim	0		/var/www/html/uploads/foxa.php	1259	1	''
3	16	1	0.002391	797144
3	16	R			''
2		A						/var/www/html/uploads/foxa.php	1259	$path = ''
3	17	0	0.002413	797112	trim	0		/var/www/html/uploads/foxa.php	1260	2	''	'\\/'
3	17	1	0.002426	797184
3	17	R			''
2		A						/var/www/html/uploads/foxa.php	1260	$path = ''
3	18	0	0.002447	797112	str_replace	0		/var/www/html/uploads/foxa.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	18	1	0.002463	797208
3	18	R			''
2		A						/var/www/html/uploads/foxa.php	1261	$path = ''
3	19	0	0.002485	797112	str_replace	0		/var/www/html/uploads/foxa.php	1265	3	'\\'	'/'	''
3	19	1	0.002499	797208
3	19	R			''
2	15	1	0.002511	797112
2	15	R			''
1		A						/var/www/html/uploads/foxa.php	79	$root_url = ''
2	20	0	0.002533	797112	define	0		/var/www/html/uploads/foxa.php	82	2	'FM_ROOT_PATH'	'/var/www/html'
2	20	1	0.002547	797216
2	20	R			TRUE
2	21	0	0.002561	797192	define	0		/var/www/html/uploads/foxa.php	83	2	'FM_ROOT_URL'	'http://localhost'
2	21	1	0.002576	797296
2	21	R			TRUE
2	22	0	0.002589	797288	define	0		/var/www/html/uploads/foxa.php	84	2	'FM_SELF_URL'	'http://localhost/uploads/foxa.php'
2	22	1	0.002604	797392
2	22	R			TRUE
2	23	0	0.002618	797320	define	0		/var/www/html/uploads/foxa.php	132	2	'FM_IS_WIN'	FALSE
2	23	1	0.002637	797424
2	23	R			TRUE
1		A						/var/www/html/uploads/foxa.php	140	$p = ''
2	24	0	0.002661	797352	fm_clean_path	1		/var/www/html/uploads/foxa.php	143	1	''
3	25	0	0.002673	797352	trim	0		/var/www/html/uploads/foxa.php	1259	1	''
3	25	1	0.002685	797384
3	25	R			''
2		A						/var/www/html/uploads/foxa.php	1259	$path = ''
3	26	0	0.002707	797352	trim	0		/var/www/html/uploads/foxa.php	1260	2	''	'\\/'
3	26	1	0.002719	797424
3	26	R			''
2		A						/var/www/html/uploads/foxa.php	1260	$path = ''
3	27	0	0.002741	797352	str_replace	0		/var/www/html/uploads/foxa.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	27	1	0.002756	797448
3	27	R			''
2		A						/var/www/html/uploads/foxa.php	1261	$path = ''
3	28	0	0.002778	797352	str_replace	0		/var/www/html/uploads/foxa.php	1265	3	'\\'	'/'	''
3	28	1	0.002791	797448
3	28	R			''
2	24	1	0.002803	797352
2	24	R			''
1		A						/var/www/html/uploads/foxa.php	143	$p = ''
2	29	0	0.002824	797352	define	0		/var/www/html/uploads/foxa.php	146	2	'FM_PATH'	''
2	29	1	0.002837	797456
2	29	R			TRUE
2	30	0	0.002850	797384	define	0		/var/www/html/uploads/foxa.php	147	2	'FM_USE_AUTH'	FALSE
2	30	1	0.002872	797488
2	30	R			TRUE
2	31	0	0.002885	797416	define	0		/var/www/html/uploads/foxa.php	149	2	'FM_ICONV_INPUT_ENC'	'CP1251'
2	31	1	0.002900	797520
2	31	R			TRUE
2	32	0	0.002912	797448	define	0		/var/www/html/uploads/foxa.php	150	2	'FM_USE_HIGHLIGHTJS'	TRUE
2	32	1	0.002926	797552
2	32	R			TRUE
2	33	0	0.002939	797480	define	0		/var/www/html/uploads/foxa.php	151	2	'FM_HIGHLIGHTJS_STYLE'	'vs'
2	33	1	0.002952	797584
2	33	R			TRUE
2	34	0	0.002964	797512	define	0		/var/www/html/uploads/foxa.php	152	2	'FM_DATETIME_FORMAT'	'd.m.y H:i'
2	34	1	0.002979	797616
2	34	R			TRUE
1		A						/var/www/html/uploads/foxa.php	567	$path = '/var/www/html'
2	35	0	0.003005	797544	is_dir	0		/var/www/html/uploads/foxa.php	573	1	'/var/www/html'
2	35	1	0.003018	797584
2	35	R			TRUE
2	36	0	0.003031	797544	fm_get_parent_path	1		/var/www/html/uploads/foxa.php	578	1	''
3	37	0	0.003044	797544	fm_clean_path	1		/var/www/html/uploads/foxa.php	1275	1	''
4	38	0	0.003057	797544	trim	0		/var/www/html/uploads/foxa.php	1259	1	''
4	38	1	0.003069	797576
4	38	R			''
3		A						/var/www/html/uploads/foxa.php	1259	$path = ''
4	39	0	0.003091	797544	trim	0		/var/www/html/uploads/foxa.php	1260	2	''	'\\/'
4	39	1	0.003103	797616
4	39	R			''
3		A						/var/www/html/uploads/foxa.php	1260	$path = ''
4	40	0	0.003125	797544	str_replace	0		/var/www/html/uploads/foxa.php	1261	3	[0 => '../', 1 => '..\\']	''	''
4	40	1	0.003140	797640
4	40	R			''
3		A						/var/www/html/uploads/foxa.php	1261	$path = ''
4	41	0	0.003162	797544	str_replace	0		/var/www/html/uploads/foxa.php	1265	3	'\\'	'/'	''
4	41	1	0.003176	797640
4	41	R			''
3	37	1	0.003188	797544
3	37	R			''
2		A						/var/www/html/uploads/foxa.php	1275	$path = ''
2	36	1	0.003210	797544
2	36	R			FALSE
1		A						/var/www/html/uploads/foxa.php	578	$parent = FALSE
2	42	0	0.003233	797544	is_readable	0		/var/www/html/uploads/foxa.php	580	1	'/var/www/html'
2	42	1	0.003250	797584
2	42	R			TRUE
2	43	0	0.003262	797544	scandir	0		/var/www/html/uploads/foxa.php	580	1	'/var/www/html'
2	43	1	0.003291	798048
2	43	R			[0 => '.', 1 => '..', 2 => 'uploads']
1		A						/var/www/html/uploads/foxa.php	580	$objects = [0 => '.', 1 => '..', 2 => 'uploads']
1		A						/var/www/html/uploads/foxa.php	581	$folders = []
1		A						/var/www/html/uploads/foxa.php	582	$files = []
1		A						/var/www/html/uploads/foxa.php	588	$new_path = '/var/www/html/uploads'
2	44	0	0.003354	798064	is_file	0		/var/www/html/uploads/foxa.php	589	1	'/var/www/html/uploads'
2	44	1	0.003369	798112
2	44	R			FALSE
2	45	0	0.003382	798072	is_dir	0		/var/www/html/uploads/foxa.php	591	1	'/var/www/html/uploads'
2	45	1	0.003393	798112
2	45	R			TRUE
1		A						/var/www/html/uploads/foxa.php	592	$folders[] = 'uploads'
2	46	0	0.003418	798472	natcasesort	0		/var/www/html/uploads/foxa.php	601	1	[0 => 'uploads']
2	46	1	0.003437	798504
2	46	R			TRUE
2	47	0	0.003451	798472	fm_show_header	1		/var/www/html/uploads/foxa.php	948	0
2		A						/var/www/html/uploads/foxa.php	1706	$sprites_ver = '20160315'
3	48	0	0.003474	798472	header	0		/var/www/html/uploads/foxa.php	1707	1	'Content-Type: text/html; charset=utf-8'
3	48	1	0.003491	798648
3	48	R			NULL
3	49	0	0.003503	798616	header	0		/var/www/html/uploads/foxa.php	1708	1	'Expires: Sat, 26 Jul 1997 05:00:00 GMT'
3	49	1	0.003519	798728
3	49	R			NULL
3	50	0	0.003532	798696	header	0		/var/www/html/uploads/foxa.php	1709	1	'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
3	50	1	0.003549	798848
3	50	R			NULL
3	51	0	0.003561	798816	header	0		/var/www/html/uploads/foxa.php	1710	1	'Pragma: no-cache'
3	51	1	0.003575	798912
3	51	R			NULL
2	47	1	0.003593	798848
2	52	0	0.003601	798848	fm_show_nav_path	1		/var/www/html/uploads/foxa.php	949	1	''
3	53	0	0.003614	798848	urlencode	0		/var/www/html/uploads/foxa.php	1662	1	''
3	53	1	0.003627	798912
3	53	R			''
3	54	0	0.003639	798848	fm_enc	1		/var/www/html/uploads/foxa.php	1663	1	''
4	55	0	0.003652	798848	htmlspecialchars	0		/var/www/html/uploads/foxa.php	1343	3	''	3	'UTF-8'
4	55	1	0.003667	799120
4	55	R			''
3	54	1	0.003679	799008
3	54	R			''
3	56	0	0.003693	798848	fm_clean_path	1		/var/www/html/uploads/foxa.php	1667	1	''
4	57	0	0.003705	798848	trim	0		/var/www/html/uploads/foxa.php	1259	1	''
4	57	1	0.003717	798880
4	57	R			''
3		A						/var/www/html/uploads/foxa.php	1259	$path = ''
4	58	0	0.003739	798848	trim	0		/var/www/html/uploads/foxa.php	1260	2	''	'\\/'
4	58	1	0.003752	798920
4	58	R			''
3		A						/var/www/html/uploads/foxa.php	1260	$path = ''
4	59	0	0.003773	798848	str_replace	0		/var/www/html/uploads/foxa.php	1261	3	[0 => '../', 1 => '..\\']	''	''
4	59	1	0.003788	798944
4	59	R			''
3		A						/var/www/html/uploads/foxa.php	1261	$path = ''
4	60	0	0.003811	798848	str_replace	0		/var/www/html/uploads/foxa.php	1265	3	'\\'	'/'	''
4	60	1	0.003825	798944
4	60	R			''
3	56	1	0.003837	798848
3	56	R			''
2		A						/var/www/html/uploads/foxa.php	1667	$path = ''
2		A						/var/www/html/uploads/foxa.php	1668	$root_url = '<a href=\'?p=\'><i class=\'icon-home\' title=\'/var/www/html\'></i></a>'
2		A						/var/www/html/uploads/foxa.php	1669	$sep = '<i class="icon-separator"></i>'
2	52	1	0.003885	798848
2	61	0	0.003893	798848	fm_show_message	1		/var/www/html/uploads/foxa.php	952	0
2	61	1	0.003904	798848
1		A						/var/www/html/uploads/foxa.php	954	$num_files = 0
1		A						/var/www/html/uploads/foxa.php	955	$num_folders = 1
1		A						/var/www/html/uploads/foxa.php	956	$all_files_size = 0
2	62	0	0.003942	798848	fm_enc	1		/var/www/html/uploads/foxa.php	959	1	''
3	63	0	0.003954	798848	htmlspecialchars	0		/var/www/html/uploads/foxa.php	1343	3	''	3	'UTF-8'
3	63	1	0.003967	799120
3	63	R			''
2	62	1	0.003980	799008
2	62	R			''
2	64	0	0.003993	798896	is_link	0		/var/www/html/uploads/foxa.php	975	1	'/var/www/html/uploads'
2	64	1	0.004008	798960
2	64	R			FALSE
1		A						/var/www/html/uploads/foxa.php	975	$is_link = FALSE
1		A						/var/www/html/uploads/foxa.php	976	$img = 'icon-folder'
2	65	0	0.004043	798920	filemtime	0		/var/www/html/uploads/foxa.php	977	1	'/var/www/html/uploads'
2	65	1	0.004056	798960
2	65	R			1676259756
2	66	0	0.004068	798872	date	0		/var/www/html/uploads/foxa.php	977	2	'd.m.y H:i'	1676259756
2	66	1	0.004107	800560
2	66	R			'13.02.23 06:42'
1		A						/var/www/html/uploads/foxa.php	977	$modif = '13.02.23 06:42'
2	67	0	0.004136	800536	fileperms	0		/var/www/html/uploads/foxa.php	978	1	'/var/www/html/uploads'
2	67	1	0.004148	800576
2	67	R			16895
2	68	0	0.004161	800488	decoct	0		/var/www/html/uploads/foxa.php	978	1	16895
2	68	1	0.004173	800560
2	68	R			'40777'
2	69	0	0.004186	800520	substr	0		/var/www/html/uploads/foxa.php	978	2	'40777'	-4
2	69	1	0.004203	800616
2	69	R			'0777'
1		A						/var/www/html/uploads/foxa.php	978	$perms = '0777'
2	70	0	0.004226	800520	function_exists	0		/var/www/html/uploads/foxa.php	979	1	'posix_getpwuid'
2	70	1	0.004240	800560
2	70	R			TRUE
2	71	0	0.004253	800520	function_exists	0		/var/www/html/uploads/foxa.php	979	1	'posix_getgrgid'
2	71	1	0.004266	800560
2	71	R			TRUE
2	72	0	0.004278	800568	fileowner	0		/var/www/html/uploads/foxa.php	980	1	'/var/www/html/uploads'
2	72	1	0.004291	800608
2	72	R			0
2	73	0	0.004303	800520	posix_getpwuid	0		/var/www/html/uploads/foxa.php	980	1	0
2	73	1	0.004333	801320
2	73	R			['name' => 'root', 'passwd' => 'x', 'uid' => 0, 'gid' => 0, 'gecos' => 'root', 'dir' => '/root', 'shell' => '/bin/bash']
1		A						/var/www/html/uploads/foxa.php	980	$owner = ['name' => 'root', 'passwd' => 'x', 'uid' => 0, 'gid' => 0, 'gecos' => 'root', 'dir' => '/root', 'shell' => '/bin/bash']
2	74	0	0.004374	801336	filegroup	0		/var/www/html/uploads/foxa.php	981	1	'/var/www/html/uploads'
2	74	1	0.004386	801376
2	74	R			0
2	75	0	0.004398	801288	posix_getgrgid	0		/var/www/html/uploads/foxa.php	981	1	0
2	75	1	0.004421	801944
2	75	R			['name' => 'root', 'passwd' => 'x', 'members' => [], 'gid' => 0]
1		A						/var/www/html/uploads/foxa.php	981	$group = ['name' => 'root', 'passwd' => 'x', 'members' => [], 'gid' => 0]
2	76	0	0.004455	801912	fm_enc	1		/var/www/html/uploads/foxa.php	988	1	'uploads'
3	77	0	0.004467	801912	htmlspecialchars	0		/var/www/html/uploads/foxa.php	1343	3	'uploads'	3	'UTF-8'
3	77	1	0.004481	802184
3	77	R			'uploads'
2	76	1	0.004495	802072
2	76	R			'uploads'
2	78	0	0.004509	801952	trim	0		/var/www/html/uploads/foxa.php	989	2	'/uploads'	'/'
2	78	1	0.004522	802056
2	78	R			'uploads'
2	79	0	0.004535	801944	urlencode	0		/var/www/html/uploads/foxa.php	989	1	'uploads'
2	79	1	0.004547	802008
2	79	R			'uploads'
2	80	0	0.004561	801912	fm_convert_win	1		/var/www/html/uploads/foxa.php	989	1	'uploads'
2	80	1	0.004574	801912
2	80	R			'uploads'
2	81	0	0.004588	801912	urlencode	0		/var/www/html/uploads/foxa.php	992	1	''
2	81	1	0.004600	801976
2	81	R			''
2	82	0	0.004613	801912	urlencode	0		/var/www/html/uploads/foxa.php	992	1	'uploads'
2	82	1	0.004625	801976
2	82	R			'uploads'
2	83	0	0.004639	801912	urlencode	0		/var/www/html/uploads/foxa.php	996	1	''
2	83	1	0.004651	801976
2	83	R			''
2	84	0	0.004664	801912	urlencode	0		/var/www/html/uploads/foxa.php	996	1	'uploads'
2	84	1	0.004676	801976
2	84	R			'uploads'
2	85	0	0.004688	801912	fm_enc	1		/var/www/html/uploads/foxa.php	997	1	''
3	86	0	0.004700	801912	htmlspecialchars	0		/var/www/html/uploads/foxa.php	1343	3	''	3	'UTF-8'
3	86	1	0.004714	802184
3	86	R			''
2	85	1	0.004726	802072
2	85	R			''
2	87	0	0.004739	801912	fm_enc	1		/var/www/html/uploads/foxa.php	997	1	'uploads'
3	88	0	0.004751	801912	htmlspecialchars	0		/var/www/html/uploads/foxa.php	1343	3	'uploads'	3	'UTF-8'
3	88	1	0.004764	802184
3	88	R			'uploads'
2	87	1	0.004777	802072
2	87	R			'uploads'
2	89	0	0.004791	801952	trim	0		/var/www/html/uploads/foxa.php	998	2	'/uploads'	'/'
2	89	1	0.004803	802056
2	89	R			'uploads'
2	90	0	0.004815	801944	urlencode	0		/var/www/html/uploads/foxa.php	998	1	'uploads'
2	90	1	0.004827	802008
2	90	R			'uploads'
2	91	0	0.004841	801912	flush	0		/var/www/html/uploads/foxa.php	1002	0
2	91	1	0.004988	801912
2	91	R			NULL
2	92	0	0.005006	801912	printf	0		/var/www/html/uploads/foxa.php	1049	2	'%s bytes'	0
2	92	1	0.005021	801976
2	92	R			7
2	93	0	0.005034	801912	fm_get_filesize	1		/var/www/html/uploads/foxa.php	1049	1	0
3	94	0	0.005048	801912	sprintf	0		/var/www/html/uploads/foxa.php	1295	2	'%s B'	0
3	94	1	0.005061	802296
3	94	R			'0 B'
2	93	1	0.005074	802232
2	93	R			'0 B'
2	95	0	0.005088	801912	fm_show_footer	1		/var/www/html/uploads/foxa.php	1066	0
2	95	1	0.005100	801912
1	3	1	0.005112	801912
			0.005166	463616
TRACE END   [2023-02-13 01:43:02.307026]

data/traces/debc700a8202d757067403d5766dab8e_trace-1676263008.1178.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-13 02:37:14.015667]
1	0	1	0.000149	393464
1	3	0	0.001893	794352	{main}	1		/var/www/html/uploads/m.php	0	0
1		A						/var/www/html/uploads/m.php	8	$use_auth = FALSE
1		A						/var/www/html/uploads/m.php	12	$auth_users = ['fm_admin' => 'fm_admin']
1		A						/var/www/html/uploads/m.php	16	$use_highlightjs = TRUE
1		A						/var/www/html/uploads/m.php	19	$highlightjs_style = 'vs'
1		A						/var/www/html/uploads/m.php	22	$default_timezone = 'Europe/Minsk'
1		A						/var/www/html/uploads/m.php	25	$root_path = '/var/www/html'
1		A						/var/www/html/uploads/m.php	29	$root_url = ''
1		A						/var/www/html/uploads/m.php	32	$http_host = 'localhost'
1		A						/var/www/html/uploads/m.php	35	$iconv_input_encoding = 'CP1251'
1		A						/var/www/html/uploads/m.php	38	$datetime_format = 'd.m.y H:i'
2	4	0	0.002028	794352	set_time_limit	0		/var/www/html/uploads/m.php	46	1	600
2	4	1	0.002045	794416
2	4	R			FALSE
2	5	0	0.002060	794384	date_default_timezone_set	0		/var/www/html/uploads/m.php	48	1	'Europe/Minsk'
2	5	1	0.002076	794448
2	5	R			TRUE
2	6	0	0.002090	794400	ini_set	0		/var/www/html/uploads/m.php	50	2	'default_charset'	'UTF-8'
2	6	1	0.002105	794504
2	6	R			'UTF-8'
2	7	0	0.002119	794400	version_compare	0		/var/www/html/uploads/m.php	51	3	'7.2.34-37+ubuntu22.04.1+deb.sury.org+1'	'5.6.0'	'<'
2	7	1	0.002136	794496
2	7	R			FALSE
2	8	0	0.002149	794400	function_exists	0		/var/www/html/uploads/m.php	54	1	'mb_regex_encoding'
2	8	1	0.002163	794440
2	8	R			FALSE
2	9	0	0.002176	794400	session_cache_limiter	0		/var/www/html/uploads/m.php	58	1	''
2	9	1	0.002190	794472
2	9	R			'nocache'
2	10	0	0.002204	794400	session_name	0		/var/www/html/uploads/m.php	59	1	'filemanager'
2	10	1	0.002218	794472
2	10	R			'PHPSESSID'
2	11	0	0.002231	794400	session_start	0		/var/www/html/uploads/m.php	60	0
2	11	1	0.002285	794912
2	11	R			TRUE
1		A						/var/www/html/uploads/m.php	68	$is_https = FALSE
2	12	0	0.002312	794912	rtrim	0		/var/www/html/uploads/m.php	71	2	'/var/www/html'	'\\/'
2	12	1	0.002326	794984
2	12	R			'/var/www/html'
1		A						/var/www/html/uploads/m.php	71	$root_path = '/var/www/html'
2	13	0	0.002350	794912	str_replace	0		/var/www/html/uploads/m.php	72	3	'\\'	'/'	'/var/www/html'
2	13	1	0.002366	795008
2	13	R			'/var/www/html'
1		A						/var/www/html/uploads/m.php	72	$root_path = '/var/www/html'
2	14	0	0.002390	794912	is_dir	0		/var/www/html/uploads/m.php	73	1	'/var/www/html'
2	14	1	0.002406	794968
2	14	R			TRUE
2	15	0	0.002420	794928	fm_clean_path	1		/var/www/html/uploads/m.php	79	1	''
3	16	0	0.002433	794928	trim	0		/var/www/html/uploads/m.php	1259	1	''
3	16	1	0.002445	794960
3	16	R			''
2		A						/var/www/html/uploads/m.php	1259	$path = ''
3	17	0	0.002468	794928	trim	0		/var/www/html/uploads/m.php	1260	2	''	'\\/'
3	17	1	0.002481	795000
3	17	R			''
2		A						/var/www/html/uploads/m.php	1260	$path = ''
3	18	0	0.002503	794928	str_replace	0		/var/www/html/uploads/m.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	18	1	0.002518	795024
3	18	R			''
2		A						/var/www/html/uploads/m.php	1261	$path = ''
3	19	0	0.002542	794928	str_replace	0		/var/www/html/uploads/m.php	1265	3	'\\'	'/'	''
3	19	1	0.002555	795024
3	19	R			''
2	15	1	0.002568	794928
2	15	R			''
1		A						/var/www/html/uploads/m.php	79	$root_url = ''
2	20	0	0.002591	794928	define	0		/var/www/html/uploads/m.php	82	2	'FM_ROOT_PATH'	'/var/www/html'
2	20	1	0.002605	795032
2	20	R			TRUE
2	21	0	0.002620	795008	define	0		/var/www/html/uploads/m.php	83	2	'FM_ROOT_URL'	'http://localhost'
2	21	1	0.002635	795112
2	21	R			TRUE
2	22	0	0.002648	795096	define	0		/var/www/html/uploads/m.php	84	2	'FM_SELF_URL'	'http://localhost/uploads/m.php'
2	22	1	0.002663	795200
2	22	R			TRUE
2	23	0	0.002677	795128	define	0		/var/www/html/uploads/m.php	132	2	'FM_IS_WIN'	FALSE
2	23	1	0.002690	795232
2	23	R			TRUE
2	24	0	0.002703	795224	fm_redirect	1		/var/www/html/uploads/m.php	136	2	'http://localhost/uploads/m.php?p='	???
3	25	0	0.002724	795304	header	0		/var/www/html/uploads/m.php	1248	3	'Location: http://localhost/uploads/m.php?p='	TRUE	302
3	25	1	0.002742	795504
3	25	R			NULL
			0.002779	715968
TRACE END   [2023-02-13 02:37:14.018327]

data/traces/debc700a8202d757067403d5766dab8e_trace-1676263008.1228.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-13 02:37:14.020589]
1	0	1	0.000120	395720
1	3	0	0.001841	796608	{main}	1		/var/www/html/uploads/m.php	0	0
1		A						/var/www/html/uploads/m.php	8	$use_auth = FALSE
1		A						/var/www/html/uploads/m.php	12	$auth_users = ['fm_admin' => 'fm_admin']
1		A						/var/www/html/uploads/m.php	16	$use_highlightjs = TRUE
1		A						/var/www/html/uploads/m.php	19	$highlightjs_style = 'vs'
1		A						/var/www/html/uploads/m.php	22	$default_timezone = 'Europe/Minsk'
1		A						/var/www/html/uploads/m.php	25	$root_path = '/var/www/html'
1		A						/var/www/html/uploads/m.php	29	$root_url = ''
1		A						/var/www/html/uploads/m.php	32	$http_host = 'localhost'
1		A						/var/www/html/uploads/m.php	35	$iconv_input_encoding = 'CP1251'
1		A						/var/www/html/uploads/m.php	38	$datetime_format = 'd.m.y H:i'
2	4	0	0.001981	796608	set_time_limit	0		/var/www/html/uploads/m.php	46	1	600
2	4	1	0.002000	796672
2	4	R			FALSE
2	5	0	0.002015	796640	date_default_timezone_set	0		/var/www/html/uploads/m.php	48	1	'Europe/Minsk'
2	5	1	0.002032	796704
2	5	R			TRUE
2	6	0	0.002046	796656	ini_set	0		/var/www/html/uploads/m.php	50	2	'default_charset'	'UTF-8'
2	6	1	0.002062	796760
2	6	R			'UTF-8'
2	7	0	0.002076	796656	version_compare	0		/var/www/html/uploads/m.php	51	3	'7.2.34-37+ubuntu22.04.1+deb.sury.org+1'	'5.6.0'	'<'
2	7	1	0.002093	796752
2	7	R			FALSE
2	8	0	0.002106	796656	function_exists	0		/var/www/html/uploads/m.php	54	1	'mb_regex_encoding'
2	8	1	0.002120	796696
2	8	R			FALSE
2	9	0	0.002133	796656	session_cache_limiter	0		/var/www/html/uploads/m.php	58	1	''
2	9	1	0.002148	796728
2	9	R			'nocache'
2	10	0	0.002162	796656	session_name	0		/var/www/html/uploads/m.php	59	1	'filemanager'
2	10	1	0.002175	796728
2	10	R			'PHPSESSID'
2	11	0	0.002189	796656	session_start	0		/var/www/html/uploads/m.php	60	0
2	11	1	0.002222	797064
2	11	R			TRUE
1		A						/var/www/html/uploads/m.php	68	$is_https = FALSE
2	12	0	0.002249	797064	rtrim	0		/var/www/html/uploads/m.php	71	2	'/var/www/html'	'\\/'
2	12	1	0.002263	797136
2	12	R			'/var/www/html'
1		A						/var/www/html/uploads/m.php	71	$root_path = '/var/www/html'
2	13	0	0.002287	797064	str_replace	0		/var/www/html/uploads/m.php	72	3	'\\'	'/'	'/var/www/html'
2	13	1	0.002303	797160
2	13	R			'/var/www/html'
1		A						/var/www/html/uploads/m.php	72	$root_path = '/var/www/html'
2	14	0	0.002328	797064	is_dir	0		/var/www/html/uploads/m.php	73	1	'/var/www/html'
2	14	1	0.002344	797120
2	14	R			TRUE
2	15	0	0.002358	797080	fm_clean_path	1		/var/www/html/uploads/m.php	79	1	''
3	16	0	0.002372	797080	trim	0		/var/www/html/uploads/m.php	1259	1	''
3	16	1	0.002384	797112
3	16	R			''
2		A						/var/www/html/uploads/m.php	1259	$path = ''
3	17	0	0.002407	797080	trim	0		/var/www/html/uploads/m.php	1260	2	''	'\\/'
3	17	1	0.002419	797152
3	17	R			''
2		A						/var/www/html/uploads/m.php	1260	$path = ''
3	18	0	0.002441	797080	str_replace	0		/var/www/html/uploads/m.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	18	1	0.002456	797176
3	18	R			''
2		A						/var/www/html/uploads/m.php	1261	$path = ''
3	19	0	0.002479	797080	str_replace	0		/var/www/html/uploads/m.php	1265	3	'\\'	'/'	''
3	19	1	0.002493	797176
3	19	R			''
2	15	1	0.002506	797080
2	15	R			''
1		A						/var/www/html/uploads/m.php	79	$root_url = ''
2	20	0	0.002528	797080	define	0		/var/www/html/uploads/m.php	82	2	'FM_ROOT_PATH'	'/var/www/html'
2	20	1	0.002543	797184
2	20	R			TRUE
2	21	0	0.002557	797160	define	0		/var/www/html/uploads/m.php	83	2	'FM_ROOT_URL'	'http://localhost'
2	21	1	0.002572	797264
2	21	R			TRUE
2	22	0	0.002586	797248	define	0		/var/www/html/uploads/m.php	84	2	'FM_SELF_URL'	'http://localhost/uploads/m.php'
2	22	1	0.002601	797352
2	22	R			TRUE
2	23	0	0.002615	797280	define	0		/var/www/html/uploads/m.php	132	2	'FM_IS_WIN'	FALSE
2	23	1	0.002628	797384
2	23	R			TRUE
1		A						/var/www/html/uploads/m.php	140	$p = ''
2	24	0	0.002661	797312	fm_clean_path	1		/var/www/html/uploads/m.php	143	1	''
3	25	0	0.002674	797312	trim	0		/var/www/html/uploads/m.php	1259	1	''
3	25	1	0.002686	797344
3	25	R			''
2		A						/var/www/html/uploads/m.php	1259	$path = ''
3	26	0	0.002708	797312	trim	0		/var/www/html/uploads/m.php	1260	2	''	'\\/'
3	26	1	0.002721	797384
3	26	R			''
2		A						/var/www/html/uploads/m.php	1260	$path = ''
3	27	0	0.002743	797312	str_replace	0		/var/www/html/uploads/m.php	1261	3	[0 => '../', 1 => '..\\']	''	''
3	27	1	0.002757	797408
3	27	R			''
2		A						/var/www/html/uploads/m.php	1261	$path = ''
3	28	0	0.002779	797312	str_replace	0		/var/www/html/uploads/m.php	1265	3	'\\'	'/'	''
3	28	1	0.002793	797408
3	28	R			''
2	24	1	0.002806	797312
2	24	R			''
1		A						/var/www/html/uploads/m.php	143	$p = ''
2	29	0	0.002827	797312	define	0		/var/www/html/uploads/m.php	146	2	'FM_PATH'	''
2	29	1	0.002841	797416
2	29	R			TRUE
2	30	0	0.002853	797344	define	0		/var/www/html/uploads/m.php	147	2	'FM_USE_AUTH'	FALSE
2	30	1	0.002867	797448
2	30	R			TRUE
2	31	0	0.002879	797376	define	0		/var/www/html/uploads/m.php	149	2	'FM_ICONV_INPUT_ENC'	'CP1251'
2	31	1	0.002894	797480
2	31	R			TRUE
2	32	0	0.002907	797408	define	0		/var/www/html/uploads/m.php	150	2	'FM_USE_HIGHLIGHTJS'	TRUE
2	32	1	0.002920	797512
2	32	R			TRUE
2	33	0	0.002933	797440	define	0		/var/www/html/uploads/m.php	151	2	'FM_HIGHLIGHTJS_STYLE'	'vs'
2	33	1	0.002947	797544
2	33	R			TRUE
2	34	0	0.002960	797472	define	0		/var/www/html/uploads/m.php	152	2	'FM_DATETIME_FORMAT'	'd.m.y H:i'
2	34	1	0.002974	797576
2	34	R			TRUE
1		A						/var/www/html/uploads/m.php	567	$path = '/var/www/html'
2	35	0	0.003004	797504	is_dir	0		/var/www/html/uploads/m.php	573	1	'/var/www/html'
2	35	1	0.003016	797544
2	35	R			TRUE
2	36	0	0.003030	797504	fm_get_parent_path	1		/var/www/html/uploads/m.php	578	1	''
3	37	0	0.003044	797504	fm_clean_path	1		/var/www/html/uploads/m.php	1275	1	''
4	38	0	0.003056	797504	trim	0		/var/www/html/uploads/m.php	1259	1	''
4	38	1	0.003069	797536
4	38	R			''
3		A						/var/www/html/uploads/m.php	1259	$path = ''
4	39	0	0.003092	797504	trim	0		/var/www/html/uploads/m.php	1260	2	''	'\\/'
4	39	1	0.003104	797576
4	39	R			''
3		A						/var/www/html/uploads/m.php	1260	$path = ''
4	40	0	0.003126	797504	str_replace	0		/var/www/html/uploads/m.php	1261	3	[0 => '../', 1 => '..\\']	''	''
4	40	1	0.003141	797600
4	40	R			''
3		A						/var/www/html/uploads/m.php	1261	$path = ''
4	41	0	0.003163	797504	str_replace	0		/var/www/html/uploads/m.php	1265	3	'\\'	'/'	''
4	41	1	0.003177	797600
4	41	R			''
3	37	1	0.003189	797504
3	37	R			''
2		A						/var/www/html/uploads/m.php	1275	$path = ''
2	36	1	0.003211	797504
2	36	R			FALSE
1		A						/var/www/html/uploads/m.php	578	$parent = FALSE
2	42	0	0.003235	797504	is_readable	0		/var/www/html/uploads/m.php	580	1	'/var/www/html'
2	42	1	0.003257	797544
2	42	R			TRUE
2	43	0	0.003304	797504	scandir	0		/var/www/html/uploads/m.php	580	1	'/var/www/html'
2	43	1	0.003347	798008
2	43	R			[0 => '.', 1 => '..', 2 => 'uploads']
1		A						/var/www/html/uploads/m.php	580	$objects = [0 => '.', 1 => '..', 2 => 'uploads']
1		A						/var/www/html/uploads/m.php	581	$folders = []
1		A						/var/www/html/uploads/m.php	582	$files = []
1		A						/var/www/html/uploads/m.php	588	$new_path = '/var/www/html/uploads'
2	44	0	0.003416	798024	is_file	0		/var/www/html/uploads/m.php	589	1	'/var/www/html/uploads'
2	44	1	0.003432	798072
2	44	R			FALSE
2	45	0	0.003445	798032	is_dir	0		/var/www/html/uploads/m.php	591	1	'/var/www/html/uploads'
2	45	1	0.003458	798072
2	45	R			TRUE
1		A						/var/www/html/uploads/m.php	592	$folders[] = 'uploads'
2	46	0	0.003484	798432	natcasesort	0		/var/www/html/uploads/m.php	601	1	[0 => 'uploads']
2	46	1	0.003498	798464
2	46	R			TRUE
2	47	0	0.003515	798432	fm_show_header	1		/var/www/html/uploads/m.php	948	0
2		A						/var/www/html/uploads/m.php	1706	$sprites_ver = '20160315'
3	48	0	0.003546	798432	header	0		/var/www/html/uploads/m.php	1707	1	'Content-Type: text/html; charset=utf-8'
3	48	1	0.003566	798608
3	48	R			NULL
3	49	0	0.003580	798576	header	0		/var/www/html/uploads/m.php	1708	1	'Expires: Sat, 26 Jul 1997 05:00:00 GMT'
3	49	1	0.003597	798688
3	49	R			NULL
3	50	0	0.003610	798656	header	0		/var/www/html/uploads/m.php	1709	1	'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
3	50	1	0.003629	798808
3	50	R			NULL
3	51	0	0.003642	798776	header	0		/var/www/html/uploads/m.php	1710	1	'Pragma: no-cache'
3	51	1	0.003656	798872
3	51	R			NULL
2	47	1	0.003681	798808
2	52	0	0.003690	798808	fm_show_nav_path	1		/var/www/html/uploads/m.php	949	1	''
3	53	0	0.003703	798808	urlencode	0		/var/www/html/uploads/m.php	1662	1	''
3	53	1	0.003717	798872
3	53	R			''
3	54	0	0.003731	798808	fm_enc	1		/var/www/html/uploads/m.php	1663	1	''
4	55	0	0.003744	798808	htmlspecialchars	0		/var/www/html/uploads/m.php	1343	3	''	3	'UTF-8'
4	55	1	0.003760	799080
4	55	R			''
3	54	1	0.003773	798968
3	54	R			''
3	56	0	0.003787	798808	fm_clean_path	1		/var/www/html/uploads/m.php	1667	1	''
4	57	0	0.003799	798808	trim	0		/var/www/html/uploads/m.php	1259	1	''
4	57	1	0.003812	798840
4	57	R			''
3		A						/var/www/html/uploads/m.php	1259	$path = ''
4	58	0	0.003834	798808	trim	0		/var/www/html/uploads/m.php	1260	2	''	'\\/'
4	58	1	0.003848	798880
4	58	R			''
3		A						/var/www/html/uploads/m.php	1260	$path = ''
4	59	0	0.003869	798808	str_replace	0		/var/www/html/uploads/m.php	1261	3	[0 => '../', 1 => '..\\']	''	''
4	59	1	0.003884	798904
4	59	R			''
3		A						/var/www/html/uploads/m.php	1261	$path = ''
4	60	0	0.003906	798808	str_replace	0		/var/www/html/uploads/m.php	1265	3	'\\'	'/'	''
4	60	1	0.003920	798904
4	60	R			''
3	56	1	0.003933	798808
3	56	R			''
2		A						/var/www/html/uploads/m.php	1667	$path = ''
2		A						/var/www/html/uploads/m.php	1668	$root_url = '<a href=\'?p=\'><i class=\'icon-home\' title=\'/var/www/html\'></i></a>'
2		A						/var/www/html/uploads/m.php	1669	$sep = '<i class="icon-separator"></i>'
2	52	1	0.003982	798808
2	61	0	0.003990	798808	fm_show_message	1		/var/www/html/uploads/m.php	952	0
2	61	1	0.004003	798808
1		A						/var/www/html/uploads/m.php	954	$num_files = 0
1		A						/var/www/html/uploads/m.php	955	$num_folders = 1
1		A						/var/www/html/uploads/m.php	956	$all_files_size = 0
2	62	0	0.004041	798808	fm_enc	1		/var/www/html/uploads/m.php	959	1	''
3	63	0	0.004052	798808	htmlspecialchars	0		/var/www/html/uploads/m.php	1343	3	''	3	'UTF-8'
3	63	1	0.004066	799080
3	63	R			''
2	62	1	0.004080	798968
2	62	R			''
2	64	0	0.004095	798856	is_link	0		/var/www/html/uploads/m.php	975	1	'/var/www/html/uploads'
2	64	1	0.004111	798920
2	64	R			FALSE
1		A						/var/www/html/uploads/m.php	975	$is_link = FALSE
1		A						/var/www/html/uploads/m.php	976	$img = 'icon-folder'
2	65	0	0.004163	798880	filemtime	0		/var/www/html/uploads/m.php	977	1	'/var/www/html/uploads'
2	65	1	0.004178	798920
2	65	R			1676263008
2	66	0	0.004192	798832	date	0		/var/www/html/uploads/m.php	977	2	'd.m.y H:i'	1676263008
2	66	1	0.004253	800520
2	66	R			'13.02.23 07:36'
1		A						/var/www/html/uploads/m.php	977	$modif = '13.02.23 07:36'
2	67	0	0.004285	800496	fileperms	0		/var/www/html/uploads/m.php	978	1	'/var/www/html/uploads'
2	67	1	0.004298	800536
2	67	R			16895
2	68	0	0.004312	800448	decoct	0		/var/www/html/uploads/m.php	978	1	16895
2	68	1	0.004325	800520
2	68	R			'40777'
2	69	0	0.004338	800480	substr	0		/var/www/html/uploads/m.php	978	2	'40777'	-4
2	69	1	0.004351	800576
2	69	R			'0777'
1		A						/var/www/html/uploads/m.php	978	$perms = '0777'
2	70	0	0.004376	800480	function_exists	0		/var/www/html/uploads/m.php	979	1	'posix_getpwuid'
2	70	1	0.004390	800520
2	70	R			TRUE
2	71	0	0.004404	800480	function_exists	0		/var/www/html/uploads/m.php	979	1	'posix_getgrgid'
2	71	1	0.004422	800520
2	71	R			TRUE
2	72	0	0.004435	800528	fileowner	0		/var/www/html/uploads/m.php	980	1	'/var/www/html/uploads'
2	72	1	0.004448	800568
2	72	R			0
2	73	0	0.004461	800480	posix_getpwuid	0		/var/www/html/uploads/m.php	980	1	0
2	73	1	0.004499	801280
2	73	R			['name' => 'root', 'passwd' => 'x', 'uid' => 0, 'gid' => 0, 'gecos' => 'root', 'dir' => '/root', 'shell' => '/bin/bash']
1		A						/var/www/html/uploads/m.php	980	$owner = ['name' => 'root', 'passwd' => 'x', 'uid' => 0, 'gid' => 0, 'gecos' => 'root', 'dir' => '/root', 'shell' => '/bin/bash']
2	74	0	0.004541	801296	filegroup	0		/var/www/html/uploads/m.php	981	1	'/var/www/html/uploads'
2	74	1	0.004555	801336
2	74	R			0
2	75	0	0.004568	801248	posix_getgrgid	0		/var/www/html/uploads/m.php	981	1	0
2	75	1	0.004591	801904
2	75	R			['name' => 'root', 'passwd' => 'x', 'members' => [], 'gid' => 0]
1		A						/var/www/html/uploads/m.php	981	$group = ['name' => 'root', 'passwd' => 'x', 'members' => [], 'gid' => 0]
2	76	0	0.004626	801872	fm_enc	1		/var/www/html/uploads/m.php	988	1	'uploads'
3	77	0	0.004639	801872	htmlspecialchars	0		/var/www/html/uploads/m.php	1343	3	'uploads'	3	'UTF-8'
3	77	1	0.004653	802144
3	77	R			'uploads'
2	76	1	0.004667	802032
2	76	R			'uploads'
2	78	0	0.004682	801912	trim	0		/var/www/html/uploads/m.php	989	2	'/uploads'	'/'
2	78	1	0.004695	802016
2	78	R			'uploads'
2	79	0	0.004709	801904	urlencode	0		/var/www/html/uploads/m.php	989	1	'uploads'
2	79	1	0.004721	801968
2	79	R			'uploads'
2	80	0	0.004736	801872	fm_convert_win	1		/var/www/html/uploads/m.php	989	1	'uploads'
2	80	1	0.004748	801872
2	80	R			'uploads'
2	81	0	0.004763	801872	urlencode	0		/var/www/html/uploads/m.php	992	1	''
2	81	1	0.004776	801936
2	81	R			''
2	82	0	0.004789	801872	urlencode	0		/var/www/html/uploads/m.php	992	1	'uploads'
2	82	1	0.004801	801936
2	82	R			'uploads'
2	83	0	0.004816	801872	urlencode	0		/var/www/html/uploads/m.php	996	1	''
2	83	1	0.004828	801936
2	83	R			''
2	84	0	0.004842	801872	urlencode	0		/var/www/html/uploads/m.php	996	1	'uploads'
2	84	1	0.004854	801936
2	84	R			'uploads'
2	85	0	0.004867	801872	fm_enc	1		/var/www/html/uploads/m.php	997	1	''
3	86	0	0.004879	801872	htmlspecialchars	0		/var/www/html/uploads/m.php	1343	3	''	3	'UTF-8'
3	86	1	0.004892	802144
3	86	R			''
2	85	1	0.004905	802032
2	85	R			''
2	87	0	0.004918	801872	fm_enc	1		/var/www/html/uploads/m.php	997	1	'uploads'
3	88	0	0.004930	801872	htmlspecialchars	0		/var/www/html/uploads/m.php	1343	3	'uploads'	3	'UTF-8'
3	88	1	0.004945	802144
3	88	R			'uploads'
2	87	1	0.004958	802032
2	87	R			'uploads'
2	89	0	0.004972	801912	trim	0		/var/www/html/uploads/m.php	998	2	'/uploads'	'/'
2	89	1	0.004984	802016
2	89	R			'uploads'
2	90	0	0.004998	801904	urlencode	0		/var/www/html/uploads/m.php	998	1	'uploads'
2	90	1	0.005009	801968
2	90	R			'uploads'
2	91	0	0.005024	801872	flush	0		/var/www/html/uploads/m.php	1002	0
2	91	1	0.005241	801872
2	91	R			NULL
2	92	0	0.005262	801872	printf	0		/var/www/html/uploads/m.php	1049	2	'%s bytes'	0
2	92	1	0.005279	801936
2	92	R			7
2	93	0	0.005293	801872	fm_get_filesize	1		/var/www/html/uploads/m.php	1049	1	0
3	94	0	0.005307	801872	sprintf	0		/var/www/html/uploads/m.php	1295	2	'%s B'	0
3	94	1	0.005321	802256
3	94	R			'0 B'
2	93	1	0.005334	802192
2	93	R			'0 B'
2	95	0	0.005349	801872	fm_show_footer	1		/var/www/html/uploads/m.php	1066	0
2	95	1	0.005362	801872
1	3	1	0.005376	801872
			0.005455	463592
TRACE END   [2023-02-13 02:37:14.025949]


Generated HTML code

<html><head>
<meta charset="utf-8">
<title>PHP File Manager</title>
<style>
html,body,div,span,p,pre,a,code,em,img,small,strong,ol,ul,li,form,label,table,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}
html{overflow-y:scroll}body{padding:0;font:13px/16px Tahoma,Arial,sans-serif;color:#222;background:#efefef}
input,select,textarea,button{font-size:inherit;font-family:inherit}
a{color:#296ea3;text-decoration:none}a:hover{color:#b00}img{vertical-align:middle;border:none}
a img{border:none}span.gray{color:#777}small{font-size:11px;color:#999}p{margin-bottom:10px}
ul{margin-left:2em;margin-bottom:10px}ul{list-style-type:none;margin-left:0}ul li{padding:3px 0}
table{border-collapse:collapse;border-spacing:0;margin-bottom:10px;width:100%}
th,td{padding:4px 7px;text-align:left;vertical-align:top;border:1px solid #ddd;background:#fff;white-space:nowrap}
th,td.gray{background-color:#eee}td.gray span{color:#222}
tr:hover td{background-color:#f5f5f5}tr:hover td.gray{background-color:#eee}
code,pre{display:block;margin-bottom:10px;font:13px/16px Consolas,'Courier New',Courier,monospace;border:1px dashed #ccc;padding:5px;overflow:auto}
pre.with-hljs{padding:0}
pre.with-hljs code{margin:0;border:0;overflow:visible}
code.maxheight,pre.maxheight{max-height:512px}input[type="checkbox"]{margin:0;padding:0}
#wrapper{max-width:1000px;min-width:400px;margin:10px auto}
.path{padding:4px 7px;border:1px solid #ddd;background-color:#fff;margin-bottom:10px}
.right{text-align:right}.center{text-align:center}.float-right{float:right}
.message{padding:4px 7px;border:1px solid #ddd;background-color:#fff}
.message.ok{border-color:green;color:green}
.message.error{border-color:red;color:red}
.message.alert{border-color:orange;color:orange}
.btn{border:0;background:none;padding:0;margin:0;font-weight:bold;color:#296ea3;cursor:pointer}.btn:hover{color:#b00}
.preview-img{max-width:100%;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC") repeat 0 0}
.preview-video{position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px}.preview-video video{position:absolute;width:100%;height:100%;left:0;top:0;background:#000}
[class*="icon-"]{display:inline-block;width:16px;height:16px;background:url("http://localhost/foxa.php?img=sprites&amp;t=20160315") no-repeat 0 0;vertical-align:bottom}
.icon-document{background-position:-16px 0}.icon-folder{background-position:-32px 0}
.icon-folder_add{background-position:-48px 0}.icon-upload{background-position:-64px 0}
.icon-arrow_up{background-position:-80px 0}.icon-home{background-position:-96px 0}
.icon-separator{background-position:-112px 0}.icon-cross{background-position:-128px 0}
.icon-copy{background-position:-144px 0}.icon-apply{background-position:-160px 0}
.icon-cancel{background-position:-176px 0}.icon-rename{background-position:-192px 0}
.icon-checkbox{background-position:-208px 0}.icon-checkbox_invert{background-position:-224px 0}
.icon-checkbox_uncheck{background-position:-240px 0}.icon-download{background-position:-256px 0}
.icon-goback{background-position:-272px 0}.icon-folder_open{background-position:-288px 0}
.icon-file_application{background-position:0 -16px}.icon-file_code{background-position:-16px -16px}
.icon-file_csv{background-position:-32px -16px}.icon-file_excel{background-position:-48px -16px}
.icon-file_film{background-position:-64px -16px}.icon-file_flash{background-position:-80px -16px}
.icon-file_font{background-position:-96px -16px}.icon-file_html{background-position:-112px -16px}
.icon-file_illustrator{background-position:-128px -16px}.icon-file_image{background-position:-144px -16px}
.icon-file_music{background-position:-160px -16px}.icon-file_outlook{background-position:-176px -16px}
.icon-file_pdf{background-position:-192px -16px}.icon-file_photoshop{background-position:-208px -16px}
.icon-file_php{background-position:-224px -16px}.icon-file_playlist{background-position:-240px -16px}
.icon-file_powerpoint{background-position:-256px -16px}.icon-file_swf{background-position:-272px -16px}
.icon-file_terminal{background-position:-288px -16px}.icon-file_text{background-position:-304px -16px}
.icon-file_word{background-position:-320px -16px}.icon-file_zip{background-position:-336px -16px}
.icon-logout{background-position:-304px 0}.icon-chain{background-position:-320px 0}
.icon-link_folder{background-position:-352px -16px}.icon-link_file{background-position:-368px -16px}
.compact-table{border:0;width:auto}.compact-table td,.compact-table th{width:100px;border:0;text-align:center}.compact-table tr:hover td{background-color:#fff}
.filename{max-width:420px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.break-word{word-wrap:break-word}
</style>
<link rel="icon" href="http://localhost/foxa.php?img=favicon" type="image/png">
<link rel="shortcut icon" href="http://localhost/foxa.php?img=favicon" type="image/png">
</head>
<body>
<div id="wrapper">
<div class="path">
<div class="float-right">
<a title="Upload files" href="?p=&amp;upload"><i class="icon-upload"></i></a>
<a title="New folder" href="#" onclick="newfolder('');return false;"><i class="icon-folder_add"></i></a>
</div>
        <div class="break-word"><a href="?p="><i class="icon-home" title="/var/www/html"></i></a></div></div>
<form action="" method="post">
<input type="hidden" name="p" value="">
<input type="hidden" name="group" value="1">
<table><tbody><tr>
<th style="width:3%"><label><input type="checkbox" title="Invert selection" onclick="checkbox_toggle()"></label></th>
<th>Name</th><th style="width:10%">Size</th>
<th style="width:12%">Modified</th>
<th style="width:6%">Perms</th><th style="width:10%">Owner</th><th style="width:13%"></th></tr>
<tr>
<td><label><input type="checkbox" name="file[]" value="beneri.se_malware_analysis"></label></td>
<td><div class="filename"><a href="?p=&amp;view=beneri.se_malware_analysis" title="File info"><i class="icon-document"></i> beneri.se_malware_analysis</a></div></td>
<td><span class="gray" title="0 bytes">0 B</span></td>
<td>13.02.23 06:42</td>
<td><a title="Change Permissions" href="?p=&amp;chmod=beneri.se_malware_analysis">0644</a></td>
<td>root:root</td>
<td>
<a title="Delete" href="?p=&amp;del=beneri.se_malware_analysis" onclick="return confirm('Delete file?');"><i class="icon-cross"></i></a>
<a title="Rename" href="#" onclick="rename('', 'beneri.se_malware_analysis');return false;"><i class="icon-rename"></i></a>
<a title="Copy to..." href="?p=&amp;copy=beneri.se_malware_analysis"><i class="icon-copy"></i></a>
<a title="Direct link" href="http://localhost/beneri.se_malware_analysis" target="_blank"><i class="icon-chain"></i></a>
<a title="Download" href="?p=&amp;dl=beneri.se_malware_analysis"><i class="icon-download"></i></a>
</td></tr>
    <tr>
<td><label><input type="checkbox" name="file[]" value="foxa.php"></label></td>
<td><div class="filename"><a href="?p=&amp;view=foxa.php" title="File info"><i class="icon-file_php"></i> foxa.php</a></div></td>
<td><span class="gray" title="72220 bytes">70.53 KiB</span></td>
<td>13.02.23 06:42</td>
<td><a title="Change Permissions" href="?p=&amp;chmod=foxa.php">0664</a></td>
<td>osboxes:osboxes</td>
<td>
<a title="Delete" href="?p=&amp;del=foxa.php" onclick="return confirm('Delete file?');"><i class="icon-cross"></i></a>
<a title="Rename" href="#" onclick="rename('', 'foxa.php');return false;"><i class="icon-rename"></i></a>
<a title="Copy to..." href="?p=&amp;copy=foxa.php"><i class="icon-copy"></i></a>
<a title="Direct link" href="http://localhost/foxa.php" target="_blank"><i class="icon-chain"></i></a>
<a title="Download" href="?p=&amp;dl=foxa.php"><i class="icon-download"></i></a>
</td></tr>
    <tr><td class="gray"></td><td class="gray" colspan="6">
Full size: <span title="72220 bytes">70.53 KiB</span>,
files: 2,
folders: 0</td></tr>
</tbody></table>
<p class="path"><a href="#" onclick="select_all();return false;"><i class="icon-checkbox"></i> Select all</a> &nbsp;
<a href="#" onclick="unselect_all();return false;"><i class="icon-checkbox_uncheck"></i> Unselect all</a> &nbsp;
<a href="#" onclick="invert_all();return false;"><i class="icon-checkbox_invert"></i> Invert selection</a></p>
<p><input type="submit" name="delete" value="Delete" onclick="return confirm('Delete selected files and folders?')">
<input type="submit" name="zip" value="Pack" onclick="return confirm('Create archive?')">
<input type="submit" name="copy" value="Copy"></p>
</form>

<p class="center"><small><a href="https://github.com/alexantr/filemanager" target="_blank">PHP File Manager</a></small></p>
</div>
<script>
function newfolder(p){var n=prompt('New folder name','folder');if(n!==null&&n!==''){window.location.search='p='+encodeURIComponent(p)+'&new='+encodeURIComponent(n);}}
function rename(p,f){var n=prompt('New name',f);if(n!==null&&n!==''&&n!=f){window.location.search='p='+encodeURIComponent(p)+'&ren='+encodeURIComponent(f)+'&to='+encodeURIComponent(n);}}
function change_checkboxes(l,v){for(var i=l.length-1;i>=0;i--){l[i].checked=(typeof v==='boolean')?v:!l[i].checked;}}
function get_checkboxes(){var i=document.getElementsByName('file[]'),a=[];for(var j=i.length-1;j>=0;j--){if(i[j].type='checkbox'){a.push(i[j]);}}return a;}
function select_all(){var l=get_checkboxes();change_checkboxes(l,true);}
function unselect_all(){var l=get_checkboxes();change_checkboxes(l,false);}
function invert_all(){var l=get_checkboxes();change_checkboxes(l);}
function checkbox_toggle(){var l=get_checkboxes();l.push(this);change_checkboxes(l);}
</script>


</body></html>

Original PHP code

<?php
/**
 * PHP File Manager (2017-08-07)
 * https://github.com/alexantr/filemanager
 */

// Auth with login/password (set true/false to enable/disable it)
$use_auth = false;

// Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
$auth_users = array(
    'fm_admin' => 'fm_admin',
);

// Enable highlight.js (https://highlightjs.org/) on view's page
$use_highlightjs = true;

// highlight.js style
$highlightjs_style = 'vs';

// Default timezone for date() and time() - http://php.net/manual/en/timezones.php
$default_timezone = 'Europe/Minsk'; // UTC+3

// Root path for file manager
$root_path = $_SERVER['DOCUMENT_ROOT'];

// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
// Will not working if $root_path will be outside of server document root
$root_url = '';

// Server hostname. Can set manually if wrong
$http_host = $_SERVER['HTTP_HOST'];

// input encoding for iconv
$iconv_input_encoding = 'CP1251';

// date() format for file modification date
$datetime_format = 'd.m.y H:i';

//--- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL

// if fm included
if (defined('FM_EMBED')) {
    $use_auth = false;
} else {
    @set_time_limit(600);

    date_default_timezone_set($default_timezone);

    ini_set('default_charset', 'UTF-8');
    if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) {
        mb_internal_encoding('UTF-8');
    }
    if (function_exists('mb_regex_encoding')) {
        mb_regex_encoding('UTF-8');
    }

    session_cache_limiter('');
    session_name('filemanager');
    session_start();
}

if (empty($auth_users)) {
    $use_auth = false;
}

$is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)
    || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';

// clean and check $root_path
$root_path = rtrim($root_path, '\\/');
$root_path = str_replace('\\', '/', $root_path);
if (!@is_dir($root_path)) {
    echo "<h1>Root path \"{$root_path}\" not found!</h1>";
    exit;
}

// clean $root_url
$root_url = fm_clean_path($root_url);

// abs path for site
defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path);
defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : ''));
defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']);

// logout
if (isset($_GET['logout'])) {
    unset($_SESSION['logged']);
    fm_redirect(FM_SELF_URL);
}

// Show image here
if (isset($_GET['img'])) {
    fm_show_image($_GET['img']);
}

// Auth
if ($use_auth) {
    if (isset($_SESSION['logged'], $auth_users[$_SESSION['logged']])) {
        // Logged
    } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'])) {
        // Logging In
        sleep(1);
        if (isset($auth_users[$_POST['fm_usr']]) && $_POST['fm_pwd'] === $auth_users[$_POST['fm_usr']]) {
            $_SESSION['logged'] = $_POST['fm_usr'];
            fm_set_msg('You are logged in');
            fm_redirect(FM_SELF_URL . '?p=');
        } else {
            unset($_SESSION['logged']);
            fm_set_msg('Wrong password', 'error');
            fm_redirect(FM_SELF_URL);
        }
    } else {
        // Form
        unset($_SESSION['logged']);
        fm_show_header();
        fm_show_message();
        ?>
        <div class="path">
            <form action="" method="post" style="margin:10px;text-align:center">
                <input name="fm_usr" value="" placeholder="Username" required>
                <input type="password" name="fm_pwd" value="" placeholder="Password" required>
                <input type="submit" value="Login">
            </form>
        </div>
        <?php
        fm_show_footer();
        exit;
    }
}

define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\');

// always use ?p=
if (!isset($_GET['p'])) {
    fm_redirect(FM_SELF_URL . '?p=');
}

// get path
$p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : '');

// clean path
$p = fm_clean_path($p);

// instead globals vars
define('FM_PATH', $p);
define('FM_USE_AUTH', $use_auth);

defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding);
defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs);
defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style);
defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format);

unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style);

/*************************** ACTIONS ***************************/

// Delete file / folder
if (isset($_GET['del'])) {
    $del = $_GET['del'];
    $del = fm_clean_path($del);
    $del = str_replace('/', '', $del);
    if ($del != '' && $del != '..' && $del != '.') {
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }
        $is_dir = is_dir($path . '/' . $del);
        if (fm_rdelete($path . '/' . $del)) {
            $msg = $is_dir ? 'Folder <b>%s</b> deleted' : 'File <b>%s</b> deleted';
            fm_set_msg(sprintf($msg, $del));
        } else {
            $msg = $is_dir ? 'Folder <b>%s</b> not deleted' : 'File <b>%s</b> not deleted';
            fm_set_msg(sprintf($msg, $del), 'error');
        }
    } else {
        fm_set_msg('Wrong file or folder name', 'error');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Create folder
if (isset($_GET['new'])) {
    $new = $_GET['new'];
    $new = fm_clean_path($new);
    $new = str_replace('/', '', $new);
    if ($new != '' && $new != '..' && $new != '.') {
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }
        if (fm_mkdir($path . '/' . $new, false) === true) {
            fm_set_msg(sprintf('Folder <b>%s</b> created', $new));
        } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
            fm_set_msg(sprintf('Folder <b>%s</b> already exists', $new), 'alert');
        } else {
            fm_set_msg(sprintf('Folder <b>%s</b> not created', $new), 'error');
        }
    } else {
        fm_set_msg('Wrong folder name', 'error');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Copy folder / file
if (isset($_GET['copy'], $_GET['finish'])) {
    // from
    $copy = $_GET['copy'];
    $copy = fm_clean_path($copy);
    // empty path
    if ($copy == '') {
        fm_set_msg('Source path not defined', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }
    // abs path from
    $from = FM_ROOT_PATH . '/' . $copy;
    // abs path to
    $dest = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $dest .= '/' . FM_PATH;
    }
    $dest .= '/' . basename($from);
    // move?
    $move = isset($_GET['move']);
    // copy/move
    if ($from != $dest) {
        $msg_from = trim(FM_PATH . '/' . basename($from), '/');
        if ($move) {
            $rename = fm_rename($from, $dest);
            if ($rename) {
                fm_set_msg(sprintf('Moved from <b>%s</b> to <b>%s</b>', $copy, $msg_from));
            } elseif ($rename === null) {
                fm_set_msg('File or folder with this path already exists', 'alert');
            } else {
                fm_set_msg(sprintf('Error while moving from <b>%s</b> to <b>%s</b>', $copy, $msg_from), 'error');
            }
        } else {
            if (fm_rcopy($from, $dest)) {
                fm_set_msg(sprintf('Copyied from <b>%s</b> to <b>%s</b>', $copy, $msg_from));
            } else {
                fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', $copy, $msg_from), 'error');
            }
        }
    } else {
        fm_set_msg('Paths must be not equal', 'alert');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Mass copy files/ folders
if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'])) {
    // from
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    // to
    $copy_to_path = FM_ROOT_PATH;
    $copy_to = fm_clean_path($_POST['copy_to']);
    if ($copy_to != '') {
        $copy_to_path .= '/' . $copy_to;
    }
    if ($path == $copy_to_path) {
        fm_set_msg('Paths must be not equal', 'alert');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }
    if (!is_dir($copy_to_path)) {
        if (!fm_mkdir($copy_to_path, true)) {
            fm_set_msg('Unable to create destination folder', 'error');
            fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
        }
    }
    // move?
    $move = isset($_POST['move']);
    // copy/move
    $errors = 0;
    $files = $_POST['file'];
    if (is_array($files) && count($files)) {
        foreach ($files as $f) {
            if ($f != '') {
                // abs path from
                $from = $path . '/' . $f;
                // abs path to
                $dest = $copy_to_path . '/' . $f;
                // do
                if ($move) {
                    $rename = fm_rename($from, $dest);
                    if ($rename === false) {
                        $errors++;
                    }
                } else {
                    if (!fm_rcopy($from, $dest)) {
                        $errors++;
                    }
                }
            }
        }
        if ($errors == 0) {
            $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied';
            fm_set_msg($msg);
        } else {
            $msg = $move ? 'Error while moving items' : 'Error while copying items';
            fm_set_msg($msg, 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Rename
if (isset($_GET['ren'], $_GET['to'])) {
    // old name
    $old = $_GET['ren'];
    $old = fm_clean_path($old);
    $old = str_replace('/', '', $old);
    // new name
    $new = $_GET['to'];
    $new = fm_clean_path($new);
    $new = str_replace('/', '', $new);
    // path
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    // rename
    if ($old != '' && $new != '') {
        if (fm_rename($path . '/' . $old, $path . '/' . $new)) {
            fm_set_msg(sprintf('Renamed from <b>%s</b> to <b>%s</b>', $old, $new));
        } else {
            fm_set_msg(sprintf('Error while renaming from <b>%s</b> to <b>%s</b>', $old, $new), 'error');
        }
    } else {
        fm_set_msg('Names not set', 'error');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Download
if (isset($_GET['dl'])) {
    $dl = $_GET['dl'];
    $dl = fm_clean_path($dl);
    $dl = str_replace('/', '', $dl);
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    if ($dl != '' && is_file($path . '/' . $dl)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="' . basename($path . '/' . $dl) . '"');
        header('Content-Transfer-Encoding: binary');
        header('Connection: Keep-Alive');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($path . '/' . $dl));
        readfile($path . '/' . $dl);
        exit;
    } else {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }
}

// Upload
if (isset($_POST['upl'])) {
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $errors = 0;
    $uploads = 0;
    $total = count($_FILES['upload']['name']);

    for ($i = 0; $i < $total; $i++) {
        $tmp_name = $_FILES['upload']['tmp_name'][$i];
        if (empty($_FILES['upload']['error'][$i]) && !empty($tmp_name) && $tmp_name != 'none') {
            if (move_uploaded_file($tmp_name, $path . '/' . $_FILES['upload']['name'][$i])) {
                $uploads++;
            } else {
                $errors++;
            }
        }
    }

    if ($errors == 0 && $uploads > 0) {
        fm_set_msg(sprintf('All files uploaded to <b>%s</b>', $path));
    } elseif ($errors == 0 && $uploads == 0) {
        fm_set_msg('Nothing uploaded', 'alert');
    } else {
        fm_set_msg(sprintf('Error while uploading files. Uploaded files: %s', $uploads), 'error');
    }

    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Mass deleting
if (isset($_POST['group'], $_POST['delete'])) {
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $errors = 0;
    $files = $_POST['file'];
    if (is_array($files) && count($files)) {
        foreach ($files as $f) {
            if ($f != '') {
                $new_path = $path . '/' . $f;
                if (!fm_rdelete($new_path)) {
                    $errors++;
                }
            }
        }
        if ($errors == 0) {
            fm_set_msg('Selected files and folder deleted');
        } else {
            fm_set_msg('Error while deleting items', 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }

    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Pack files
if (isset($_POST['group'], $_POST['zip'])) {
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    if (!class_exists('ZipArchive')) {
        fm_set_msg('Operations with archives are not available', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    $files = $_POST['file'];
    if (!empty($files)) {
        chdir($path);

        if (count($files) == 1) {
            $one_file = reset($files);
            $one_file = basename($one_file);
            $zipname = $one_file . '_' . date('ymd_His') . '.zip';
        } else {
            $zipname = 'archive_' . date('ymd_His') . '.zip';
        }

        $zipper = new FM_Zipper();
        $res = $zipper->create($zipname, $files);

        if ($res) {
            fm_set_msg(sprintf('Archive <b>%s</b> created', $zipname));
        } else {
            fm_set_msg('Archive not created', 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }

    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Unpack
if (isset($_GET['unzip'])) {
    $unzip = $_GET['unzip'];
    $unzip = fm_clean_path($unzip);
    $unzip = str_replace('/', '', $unzip);

    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    if (!class_exists('ZipArchive')) {
        fm_set_msg('Operations with archives are not available', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    if ($unzip != '' && is_file($path . '/' . $unzip)) {
        $zip_path = $path . '/' . $unzip;

        //to folder
        $tofolder = '';
        if (isset($_GET['tofolder'])) {
            $tofolder = pathinfo($zip_path, PATHINFO_FILENAME);
            if (fm_mkdir($path . '/' . $tofolder, true)) {
                $path .= '/' . $tofolder;
            }
        }

        $zipper = new FM_Zipper();
        $res = $zipper->unzip($zip_path, $path);

        if ($res) {
            fm_set_msg('Archive unpacked');
        } else {
            fm_set_msg('Archive not unpacked', 'error');
        }

    } else {
        fm_set_msg('File not found', 'error');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Change Perms (not for Windows)
if (isset($_POST['chmod']) && !FM_IS_WIN) {
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $file = $_POST['chmod'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    $mode = 0;
    if (!empty($_POST['ur'])) {
        $mode |= 0400;
    }
    if (!empty($_POST['uw'])) {
        $mode |= 0200;
    }
    if (!empty($_POST['ux'])) {
        $mode |= 0100;
    }
    if (!empty($_POST['gr'])) {
        $mode |= 0040;
    }
    if (!empty($_POST['gw'])) {
        $mode |= 0020;
    }
    if (!empty($_POST['gx'])) {
        $mode |= 0010;
    }
    if (!empty($_POST['or'])) {
        $mode |= 0004;
    }
    if (!empty($_POST['ow'])) {
        $mode |= 0002;
    }
    if (!empty($_POST['ox'])) {
        $mode |= 0001;
    }

    if (@chmod($path . '/' . $file, $mode)) {
        fm_set_msg('Permissions changed');
    } else {
        fm_set_msg('Permissions not changed', 'error');
    }

    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

/*************************** /ACTIONS ***************************/

// get current path
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
    $path .= '/' . FM_PATH;
}

// check path
if (!is_dir($path)) {
    fm_redirect(FM_SELF_URL . '?p=');
}

// get parent folder
$parent = fm_get_parent_path(FM_PATH);

$objects = is_readable($path) ? scandir($path) : array();
$folders = array();
$files = array();
if (is_array($objects)) {
    foreach ($objects as $file) {
        if ($file == '.' || $file == '..') {
            continue;
        }
        $new_path = $path . '/' . $file;
        if (is_file($new_path)) {
            $files[] = $file;
        } elseif (is_dir($new_path) && $file != '.' && $file != '..') {
            $folders[] = $file;
        }
    }
}

if (!empty($files)) {
    natcasesort($files);
}
if (!empty($folders)) {
    natcasesort($folders);
}

// upload form
if (isset($_GET['upload'])) {
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    ?>
    <div class="path">
        <p><b>Uploading files</b></p>
        <p class="break-word">Destination folder: <?php echo fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH) ?></p>
        <form action="" method="post" enctype="multipart/form-data">
            <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
            <input type="hidden" name="upl" value="1">
            <input type="file" name="upload[]"><br>
            <input type="file" name="upload[]"><br>
            <input type="file" name="upload[]"><br>
            <input type="file" name="upload[]"><br>
            <input type="file" name="upload[]"><br>
            <br>
            <p>
                <button class="btn"><i class="icon-apply"></i> Upload</button> &nbsp;
                <b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="icon-cancel"></i> Cancel</a></b>
            </p>
        </form>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// copy form POST
if (isset($_POST['copy'])) {
    $copy_files = $_POST['file'];
    if (!is_array($copy_files) || empty($copy_files)) {
        fm_set_msg('Nothing selected', 'alert');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    ?>
    <div class="path">
        <p><b>Copying</b></p>
        <form action="" method="post">
            <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
            <input type="hidden" name="finish" value="1">
            <?php
            foreach ($copy_files as $cf) {
                echo '<input type="hidden" name="file[]" value="' . fm_enc($cf) . '">' . PHP_EOL;
            }
            ?>
            <p class="break-word">Files: <b><?php echo implode('</b>, <b>', $copy_files) ?></b></p>
            <p class="break-word">Source folder: <?php echo fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH) ?><br>
                <label for="inp_copy_to">Destination folder:</label>
                <?php echo FM_ROOT_PATH ?>/<input name="copy_to" id="inp_copy_to" value="<?php echo fm_enc(FM_PATH) ?>">
            </p>
            <p><label><input type="checkbox" name="move" value="1"> Move</label></p>
            <p>
                <button class="btn"><i class="icon-apply"></i> Copy</button> &nbsp;
                <b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="icon-cancel"></i> Cancel</a></b>
            </p>
        </form>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// copy form
if (isset($_GET['copy']) && !isset($_GET['finish'])) {
    $copy = $_GET['copy'];
    $copy = fm_clean_path($copy);
    if ($copy == '' || !file_exists(FM_ROOT_PATH . '/' . $copy)) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    ?>
    <div class="path">
        <p><b>Copying</b></p>
        <p class="break-word">
            Source path: <?php echo fm_convert_win(FM_ROOT_PATH . '/' . $copy) ?><br>
            Destination folder: <?php echo fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH) ?>
        </p>
        <p>
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode($copy) ?>&amp;finish=1"><i class="icon-apply"></i> Copy</a></b> &nbsp;
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode($copy) ?>&amp;finish=1&amp;move=1"><i class="icon-apply"></i> Move</a></b> &nbsp;
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="icon-cancel"></i> Cancel</a></b>
        </p>
        <p><i>Select folder:</i></p>
        <ul class="folders break-word">
            <?php
            if ($parent !== false) {
                ?>
                <li><a href="?p=<?php echo urlencode($parent) ?>&amp;copy=<?php echo urlencode($copy) ?>"><i class="icon-arrow_up"></i> ..</a></li>
            <?php
            }
            foreach ($folders as $f) {
                ?>
                <li><a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>&amp;copy=<?php echo urlencode($copy) ?>"><i class="icon-folder"></i> <?php echo fm_convert_win($f) ?></a></li>
            <?php
            }
            ?>
        </ul>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// file viewer
if (isset($_GET['view'])) {
    $file = $_GET['view'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || !is_file($path . '/' . $file)) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path

    $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
    $file_path = $path . '/' . $file;

    $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
    $mime_type = fm_get_mime_type($file_path);
    $filesize = filesize($file_path);

    $is_zip = false;
    $is_image = false;
    $is_audio = false;
    $is_video = false;
    $is_text = false;

    $view_title = 'File';
    $filenames = false; // for zip
    $content = ''; // for text

    if ($ext == 'zip') {
        $is_zip = true;
        $view_title = 'Archive';
        $filenames = fm_get_zif_info($file_path);
    } elseif (in_array($ext, fm_get_image_exts())) {
        $is_image = true;
        $view_title = 'Image';
    } elseif (in_array($ext, fm_get_audio_exts())) {
        $is_audio = true;
        $view_title = 'Audio';
    } elseif (in_array($ext, fm_get_video_exts())) {
        $is_video = true;
        $view_title = 'Video';
    } elseif (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
        $is_text = true;
        $content = file_get_contents($file_path);
    }

    ?>
    <div class="path">
        <p class="break-word"><b><?php echo $view_title ?> "<?php echo fm_convert_win($file) ?>"</b></p>
        <p class="break-word">
            Full path: <?php echo fm_convert_win($file_path) ?><br>
            File size: <?php echo fm_get_filesize($filesize) ?><?php if ($filesize >= 1000): ?> (<?php echo sprintf('%s bytes', $filesize) ?>)<?php endif; ?><br>
            MIME-type: <?php echo $mime_type ?><br>
            <?php
            // ZIP info
            if ($is_zip && $filenames !== false) {
                $total_files = 0;
                $total_comp = 0;
                $total_uncomp = 0;
                foreach ($filenames as $fn) {
                    if (!$fn['folder']) {
                        $total_files++;
                    }
                    $total_comp += $fn['compressed_size'];
                    $total_uncomp += $fn['filesize'];
                }
                ?>
                Files in archive: <?php echo $total_files ?><br>
                Total size: <?php echo fm_get_filesize($total_uncomp) ?><br>
                Size in archive: <?php echo fm_get_filesize($total_comp) ?><br>
                Compression: <?php echo round(($total_comp / $total_uncomp) * 100) ?>%<br>
                <?php
            }
            // Image info
            if ($is_image) {
                $image_size = getimagesize($file_path);
                echo 'Image sizes: ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
            }
            // Text info
            if ($is_text) {
                $is_utf8 = fm_is_utf8($content);
                if (function_exists('iconv')) {
                    if (!$is_utf8) {
                        $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content);
                    }
                }
                echo 'Charset: ' . ($is_utf8 ? 'utf-8' : '8 bit') . '<br>';
            }
            ?>
        </p>
        <p>
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;dl=<?php echo urlencode($file) ?>"><i class="icon-download"></i> Download</a></b> &nbsp;
            <b><a href="<?php echo $file_url ?>" target="_blank"><i class="icon-chain"></i> Open</a></b> &nbsp;
            <?php
            // ZIP actions
            if ($is_zip && $filenames !== false) {
                $zip_name = pathinfo($file_path, PATHINFO_FILENAME);
                ?>
                <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;unzip=<?php echo urlencode($file) ?>"><i class="icon-apply"></i> Unpack</a></b> &nbsp;
                <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;unzip=<?php echo urlencode($file) ?>&amp;tofolder=1" title="Unpack to <?php echo fm_enc($zip_name) ?>"><i class="icon-apply"></i>
                    Unpack to folder</a></b> &nbsp;
                <?php
            }
            ?>
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="icon-goback"></i> Back</a></b>
        </p>
        <?php
        if ($is_zip) {
            // ZIP content
            if ($filenames !== false) {
                echo '<code class="maxheight">';
                foreach ($filenames as $fn) {
                    if ($fn['folder']) {
                        echo '<b>' . $fn['name'] . '</b><br>';
                    } else {
                        echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')<br>';
                    }
                }
                echo '</code>';
            } else {
                echo '<p>Error while fetching archive info</p>';
            }
        } elseif ($is_image) {
            // Image content
            if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico'))) {
                echo '<p><img src="' . $file_url . '" alt="" class="preview-img"></p>';
            }
        } elseif ($is_audio) {
            // Audio content
            echo '<p><audio src="' . $file_url . '" controls preload="metadata"></audio></p>';
        } elseif ($is_video) {
            // Video content
            echo '<div class="preview-video"><video src="' . $file_url . '" width="640" height="360" controls preload="metadata"></video></div>';
        } elseif ($is_text) {
            if (FM_USE_HIGHLIGHTJS) {
                // highlight
                $hljs_classes = array(
                    'shtml' => 'xml',
                    'htaccess' => 'apache',
                    'phtml' => 'php',
                    'lock' => 'json',
                    'svg' => 'xml',
                );
                $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext;
                if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) {
                    $hljs_class = 'nohighlight';
                }
                $content = '<pre class="with-hljs"><code class="' . $hljs_class . '">' . fm_enc($content) . '</code></pre>';
            } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) {
                // php highlight
                $content = highlight_string($content, true);
            } else {
                $content = '<pre>' . fm_enc($content) . '</pre>';
            }
            echo $content;
        }
        ?>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// chmod (not for Windows)
if (isset($_GET['chmod']) && !FM_IS_WIN) {
    $file = $_GET['chmod'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path

    $file_url = FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file;
    $file_path = $path . '/' . $file;

    $mode = fileperms($path . '/' . $file);

    ?>
    <div class="path">
        <p><b>Change Permissions</b></p>
        <p>
            Full path: <?php echo $file_path ?><br>
        </p>
        <form action="" method="post">
            <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
            <input type="hidden" name="chmod" value="<?php echo fm_enc($file) ?>">

            <table class="compact-table">
                <tr>
                    <td></td>
                    <td><b>Owner</b></td>
                    <td><b>Group</b></td>
                    <td><b>Other</b></td>
                </tr>
                <tr>
                    <td style="text-align: right"><b>Read</b></td>
                    <td><label><input type="checkbox" name="ur" value="1"<?php echo ($mode & 00400) ? ' checked' : '' ?>></label></td>
                    <td><label><input type="checkbox" name="gr" value="1"<?php echo ($mode & 00040) ? ' checked' : '' ?>></label></td>
                    <td><label><input type="checkbox" name="or" value="1"<?php echo ($mode & 00004) ? ' checked' : '' ?>></label></td>
                </tr>
                <tr>
                    <td style="text-align: right"><b>Write</b></td>
                    <td><label><input type="checkbox" name="uw" value="1"<?php echo ($mode & 00200) ? ' checked' : '' ?>></label></td>
                    <td><label><input type="checkbox" name="gw" value="1"<?php echo ($mode & 00020) ? ' checked' : '' ?>></label></td>
                    <td><label><input type="checkbox" name="ow" value="1"<?php echo ($mode & 00002) ? ' checked' : '' ?>></label></td>
                </tr>
                <tr>
                    <td style="text-align: right"><b>Execute</b></td>
                    <td><label><input type="checkbox" name="ux" value="1"<?php echo ($mode & 00100) ? ' checked' : '' ?>></label></td>
                    <td><label><input type="checkbox" name="gx" value="1"<?php echo ($mode & 00010) ? ' checked' : '' ?>></label></td>
                    <td><label><input type="checkbox" name="ox" value="1"<?php echo ($mode & 00001) ? ' checked' : '' ?>></label></td>
                </tr>
            </table>

            <p>
                <button class="btn"><i class="icon-apply"></i> Change</button> &nbsp;
                <b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="icon-cancel"></i> Cancel</a></b>
            </p>

        </form>

    </div>
    <?php
    fm_show_footer();
    exit;
}

//--- FILEMANAGER MAIN
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path

// messages
fm_show_message();

$num_files = count($files);
$num_folders = count($folders);
$all_files_size = 0;
?>
<form action="" method="post">
<input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
<input type="hidden" name="group" value="1">
<table><tr>
<th style="width:3%"><label><input type="checkbox" title="Invert selection" onclick="checkbox_toggle()"></label></th>
<th>Name</th><th style="width:10%">Size</th>
<th style="width:12%">Modified</th>
<?php if (!FM_IS_WIN): ?><th style="width:6%">Perms</th><th style="width:10%">Owner</th><?php endif; ?>
<th style="width:13%"></th></tr>
<?php
// link to parent folder
if ($parent !== false) {
    ?>
<tr><td></td><td colspan="<?php echo !FM_IS_WIN ? '6' : '4' ?>"><a href="?p=<?php echo urlencode($parent) ?>"><i class="icon-arrow_up"></i> ..</a></td></tr>
<?php
}
foreach ($folders as $f) {
    $is_link = is_link($path . '/' . $f);
    $img = $is_link ? 'icon-link_folder' : 'icon-folder';
    $modif = date(FM_DATETIME_FORMAT, filemtime($path . '/' . $f));
    $perms = substr(decoct(fileperms($path . '/' . $f)), -4);
    if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
        $owner = posix_getpwuid(fileowner($path . '/' . $f));
        $group = posix_getgrgid(filegroup($path . '/' . $f));
    } else {
        $owner = array('name' => '?');
        $group = array('name' => '?');
    }
    ?>
<tr>
<td><label><input type="checkbox" name="file[]" value="<?php echo fm_enc($f) ?>"></label></td>
<td><div class="filename"><a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="<?php echo $img ?>"></i> <?php echo fm_convert_win($f) ?></a><?php echo ($is_link ? ' &rarr; <i>' . readlink($path . '/' . $f) . '</i>' : '') ?></div></td>
<td>Folder</td><td><?php echo $modif ?></td>
<?php if (!FM_IS_WIN): ?>
<td><a title="Change Permissions" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a></td>
<td><?php echo $owner['name'] . ':' . $group['name'] ?></td>
<?php endif; ?>
<td>
<a title="Delete" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;del=<?php echo urlencode($f) ?>" onclick="return confirm('Delete folder?');"><i class="icon-cross"></i></a>
<a title="Rename" href="#" onclick="rename('<?php echo fm_enc(FM_PATH) ?>', '<?php echo fm_enc($f) ?>');return false;"><i class="icon-rename"></i></a>
<a title="Copy to..." href="?p=&amp;copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="icon-copy"></i></a>
<a title="Direct link" href="<?php echo FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/' ?>" target="_blank"><i class="icon-chain"></i></a>
</td></tr>
    <?php
    flush();
}

foreach ($files as $f) {
    $is_link = is_link($path . '/' . $f);
    $img = $is_link ? 'icon-link_file' : fm_get_file_icon_class($path . '/' . $f);
    $modif = date(FM_DATETIME_FORMAT, filemtime($path . '/' . $f));
    $filesize_raw = filesize($path . '/' . $f);
    $filesize = fm_get_filesize($filesize_raw);
    $filelink = '?p=' . urlencode(FM_PATH) . '&amp;view=' . urlencode($f);
    $all_files_size += $filesize_raw;
    $perms = substr(decoct(fileperms($path . '/' . $f)), -4);
    if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
        $owner = posix_getpwuid(fileowner($path . '/' . $f));
        $group = posix_getgrgid(filegroup($path . '/' . $f));
    } else {
        $owner = array('name' => '?');
        $group = array('name' => '?');
    }
    ?>
<tr>
<td><label><input type="checkbox" name="file[]" value="<?php echo fm_enc($f) ?>"></label></td>
<td><div class="filename"><a href="<?php echo $filelink ?>" title="File info"><i class="<?php echo $img ?>"></i> <?php echo fm_convert_win($f) ?></a><?php echo ($is_link ? ' &rarr; <i>' . readlink($path . '/' . $f) . '</i>' : '') ?></div></td>
<td><span class="gray" title="<?php printf('%s bytes', $filesize_raw) ?>"><?php echo $filesize ?></span></td>
<td><?php echo $modif ?></td>
<?php if (!FM_IS_WIN): ?>
<td><a title="Change Permissions" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a></td>
<td><?php echo $owner['name'] . ':' . $group['name'] ?></td>
<?php endif; ?>
<td>
<a title="Delete" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;del=<?php echo urlencode($f) ?>" onclick="return confirm('Delete file?');"><i class="icon-cross"></i></a>
<a title="Rename" href="#" onclick="rename('<?php echo fm_enc(FM_PATH) ?>', '<?php echo fm_enc($f) ?>');return false;"><i class="icon-rename"></i></a>
<a title="Copy to..." href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="icon-copy"></i></a>
<a title="Direct link" href="<?php echo FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f ?>" target="_blank"><i class="icon-chain"></i></a>
<a title="Download" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;dl=<?php echo urlencode($f) ?>"><i class="icon-download"></i></a>
</td></tr>
    <?php
    flush();
}

if (empty($folders) && empty($files)) {
    ?>
<tr><td></td><td colspan="<?php echo !FM_IS_WIN ? '6' : '4' ?>"><em>Folder is empty</em></td></tr>
<?php
} else {
    ?>
<tr><td class="gray"></td><td class="gray" colspan="<?php echo !FM_IS_WIN ? '6' : '4' ?>">
Full size: <span title="<?php printf('%s bytes', $all_files_size) ?>"><?php echo fm_get_filesize($all_files_size) ?></span>,
files: <?php echo $num_files ?>,
folders: <?php echo $num_folders ?>
</td></tr>
<?php
}
?>
</table>
<p class="path"><a href="#" onclick="select_all();return false;"><i class="icon-checkbox"></i> Select all</a> &nbsp;
<a href="#" onclick="unselect_all();return false;"><i class="icon-checkbox_uncheck"></i> Unselect all</a> &nbsp;
<a href="#" onclick="invert_all();return false;"><i class="icon-checkbox_invert"></i> Invert selection</a></p>
<p><input type="submit" name="delete" value="Delete" onclick="return confirm('Delete selected files and folders?')">
<input type="submit" name="zip" value="Pack" onclick="return confirm('Create archive?')">
<input type="submit" name="copy" value="Copy"></p>
</form>

<?php
fm_show_footer();

//--- END

// Functions

/**
 * Delete  file or folder (recursively)
 * @param string $path
 * @return bool
 */
function fm_rdelete($path)
{
    if (is_link($path)) {
        return unlink($path);
    } elseif (is_dir($path)) {
        $objects = scandir($path);
        $ok = true;
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rdelete($path . '/' . $file)) {
                        $ok = false;
                    }
                }
            }
        }
        return ($ok) ? rmdir($path) : false;
    } elseif (is_file($path)) {
        return unlink($path);
    }
    return false;
}

/**
 * Recursive chmod
 * @param string $path
 * @param int $filemode
 * @param int $dirmode
 * @return bool
 * @todo Will use in mass chmod
 */
function fm_rchmod($path, $filemode, $dirmode)
{
    if (is_dir($path)) {
        if (!chmod($path, $dirmode)) {
            return false;
        }
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) {
                        return false;
                    }
                }
            }
        }
        return true;
    } elseif (is_link($path)) {
        return true;
    } elseif (is_file($path)) {
        return chmod($path, $filemode);
    }
    return false;
}

/**
 * Safely rename
 * @param string $old
 * @param string $new
 * @return bool|null
 */
function fm_rename($old, $new)
{
    return (!file_exists($new) && file_exists($old)) ? rename($old, $new) : null;
}

/**
 * Copy file or folder (recursively).
 * @param string $path
 * @param string $dest
 * @param bool $upd Update files
 * @param bool $force Create folder with same names instead file
 * @return bool
 */
function fm_rcopy($path, $dest, $upd = true, $force = true)
{
    if (is_dir($path)) {
        if (!fm_mkdir($dest, $force)) {
            return false;
        }
        $objects = scandir($path);
        $ok = true;
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) {
                        $ok = false;
                    }
                }
            }
        }
        return $ok;
    } elseif (is_file($path)) {
        return fm_copy($path, $dest, $upd);
    }
    return false;
}

/**
 * Safely create folder
 * @param string $dir
 * @param bool $force
 * @return bool
 */
function fm_mkdir($dir, $force)
{
    if (file_exists($dir)) {
        if (is_dir($dir)) {
            return $dir;
        } elseif (!$force) {
            return false;
        }
        unlink($dir);
    }
    return mkdir($dir, 0777, true);
}

/**
 * Safely copy file
 * @param string $f1
 * @param string $f2
 * @param bool $upd
 * @return bool
 */
function fm_copy($f1, $f2, $upd)
{
    $time1 = filemtime($f1);
    if (file_exists($f2)) {
        $time2 = filemtime($f2);
        if ($time2 >= $time1 && $upd) {
            return false;
        }
    }
    $ok = copy($f1, $f2);
    if ($ok) {
        touch($f2, $time1);
    }
    return $ok;
}

/**
 * Get mime type
 * @param string $file_path
 * @return mixed|string
 */
function fm_get_mime_type($file_path)
{
    if (function_exists('finfo_open')) {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime = finfo_file($finfo, $file_path);
        finfo_close($finfo);
        return $mime;
    } elseif (function_exists('mime_content_type')) {
        return mime_content_type($file_path);
    } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) {
        $file = escapeshellarg($file_path);
        $mime = shell_exec('file -bi ' . $file);
        return $mime;
    } else {
        return '--';
    }
}

/**
 * HTTP Redirect
 * @param string $url
 * @param int $code
 */
function fm_redirect($url, $code = 302)
{
    header('Location: ' . $url, true, $code);
    exit;
}

/**
 * Clean path
 * @param string $path
 * @return string
 */
function fm_clean_path($path)
{
    $path = trim($path);
    $path = trim($path, '\\/');
    $path = str_replace(array('../', '..\\'), '', $path);
    if ($path == '..') {
        $path = '';
    }
    return str_replace('\\', '/', $path);
}

/**
 * Get parent path
 * @param string $path
 * @return bool|string
 */
function fm_get_parent_path($path)
{
    $path = fm_clean_path($path);
    if ($path != '') {
        $array = explode('/', $path);
        if (count($array) > 1) {
            $array = array_slice($array, 0, -1);
            return implode('/', $array);
        }
        return '';
    }
    return false;
}

/**
 * Get nice filesize
 * @param int $size
 * @return string
 */
function fm_get_filesize($size)
{
    if ($size < 1000) {
        return sprintf('%s B', $size);
    } elseif (($size / 1024) < 1000) {
        return sprintf('%s KiB', round(($size / 1024), 2));
    } elseif (($size / 1024 / 1024) < 1000) {
        return sprintf('%s MiB', round(($size / 1024 / 1024), 2));
    } elseif (($size / 1024 / 1024 / 1024) < 1000) {
        return sprintf('%s GiB', round(($size / 1024 / 1024 / 1024), 2));
    } else {
        return sprintf('%s TiB', round(($size / 1024 / 1024 / 1024 / 1024), 2));
    }
}

/**
 * Get info about zip archive
 * @param string $path
 * @return array|bool
 */
function fm_get_zif_info($path)
{
    if (function_exists('zip_open')) {
        $arch = zip_open($path);
        if ($arch) {
            $filenames = array();
            while ($zip_entry = zip_read($arch)) {
                $zip_name = zip_entry_name($zip_entry);
                $zip_folder = substr($zip_name, -1) == '/';
                $filenames[] = array(
                    'name' => $zip_name,
                    'filesize' => zip_entry_filesize($zip_entry),
                    'compressed_size' => zip_entry_compressedsize($zip_entry),
                    'folder' => $zip_folder
                    //'compression_method' => zip_entry_compressionmethod($zip_entry),
                );
            }
            zip_close($arch);
            return $filenames;
        }
    }
    return false;
}

/**
 * Encode html entities
 * @param string $text
 * @return string
 */
function fm_enc($text)
{
    return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}

/**
 * Save message in session
 * @param string $msg
 * @param string $status
 */
function fm_set_msg($msg, $status = 'ok')
{
    $_SESSION['message'] = $msg;
    $_SESSION['status'] = $status;
}

/**
 * Check if string is in UTF-8
 * @param string $string
 * @return int
 */
function fm_is_utf8($string)
{
    return preg_match('//u', $string);
}

/**
 * Convert file name to UTF-8 in Windows
 * @param string $filename
 * @return string
 */
function fm_convert_win($filename)
{
    if (FM_IS_WIN && function_exists('iconv')) {
        $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename);
    }
    return $filename;
}

/**
 * Get CSS classname for file
 * @param string $path
 * @return string
 */
function fm_get_file_icon_class($path)
{
    // get extension
    $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));

    switch ($ext) {
        case 'ico': case 'gif': case 'jpg': case 'jpeg': case 'jpc': case 'jp2':
        case 'jpx': case 'xbm': case 'wbmp': case 'png': case 'bmp': case 'tif':
        case 'tiff':
            $img = 'icon-file_image';
            break;
        case 'txt': case 'css': case 'ini': case 'conf': case 'log': case 'htaccess':
        case 'passwd': case 'ftpquota': case 'sql': case 'js': case 'json': case 'sh':
        case 'config': case 'twig': case 'tpl': case 'md': case 'gitignore':
        case 'less': case 'sass': case 'scss': case 'c': case 'cpp': case 'cs': case 'py':
        case 'map': case 'lock': case 'dtd':
            $img = 'icon-file_text';
            break;
        case 'zip': case 'rar': case 'gz': case 'tar': case '7z':
            $img = 'icon-file_zip';
            break;
        case 'php': case 'php4': case 'php5': case 'phps': case 'phtml':
            $img = 'icon-file_php';
            break;
        case 'htm': case 'html': case 'shtml': case 'xhtml':
            $img = 'icon-file_html';
            break;
        case 'xml': case 'xsl': case 'svg':
            $img = 'icon-file_code';
            break;
        case 'wav': case 'mp3': case 'mp2': case 'm4a': case 'aac': case 'ogg':
        case 'oga': case 'wma': case 'mka': case 'flac': case 'ac3': case 'tds':
            $img = 'icon-file_music';
            break;
        case 'm3u': case 'm3u8': case 'pls': case 'cue':
            $img = 'icon-file_playlist';
            break;
        case 'avi': case 'mpg': case 'mpeg': case 'mp4': case 'm4v': case 'flv':
        case 'f4v': case 'ogm': case 'ogv': case 'mov': case 'mkv': case '3gp':
        case 'asf': case 'wmv':
            $img = 'icon-file_film';
            break;
        case 'eml': case 'msg':
            $img = 'icon-file_outlook';
            break;
        case 'xls': case 'xlsx':
            $img = 'icon-file_excel';
            break;
        case 'csv':
            $img = 'icon-file_csv';
            break;
        case 'doc': case 'docx':
            $img = 'icon-file_word';
            break;
        case 'ppt': case 'pptx':
            $img = 'icon-file_powerpoint';
            break;
        case 'ttf': case 'ttc': case 'otf': case 'woff':case 'woff2': case 'eot': case 'fon':
            $img = 'icon-file_font';
            break;
        case 'pdf':
            $img = 'icon-file_pdf';
            break;
        case 'psd':
            $img = 'icon-file_photoshop';
            break;
        case 'ai': case 'eps':
            $img = 'icon-file_illustrator';
            break;
        case 'fla':
            $img = 'icon-file_flash';
            break;
        case 'swf':
            $img = 'icon-file_swf';
            break;
        case 'exe': case 'msi':
            $img = 'icon-file_application';
            break;
        case 'bat':
            $img = 'icon-file_terminal';
            break;
        default:
            $img = 'icon-document';
    }

    return $img;
}

/**
 * Get image files extensions
 * @return array
 */
function fm_get_image_exts()
{
    return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd');
}

/**
 * Get video files extensions
 * @return array
 */
function fm_get_video_exts()
{
    return array('webm', 'mp4', 'm4v', 'ogm', 'ogv', 'mov');
}

/**
 * Get audio files extensions
 * @return array
 */
function fm_get_audio_exts()
{
    return array('wav', 'mp3', 'ogg', 'm4a');
}

/**
 * Get text file extensions
 * @return array
 */
function fm_get_text_exts()
{
    return array(
        'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'json', 'sh', 'config',
        'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue',
        'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py',
        'map', 'lock', 'dtd', 'svg',
    );
}

/**
 * Get mime types of text files
 * @return array
 */
function fm_get_text_mimes()
{
    return array(
        'application/xml',
        'application/javascript',
        'application/x-javascript',
        'image/svg+xml',
        'message/rfc822',
    );
}

/**
 * Get file names of text files w/o extensions
 * @return array
 */
function fm_get_text_names()
{
    return array(
        'license',
        'readme',
        'authors',
        'contributors',
        'changelog',
    );
}

/**
 * Class to work with zip files (using ZipArchive)
 */
class FM_Zipper
{
    private $zip;

    public function __construct()
    {
        $this->zip = new ZipArchive();
    }

    /**
     * Create archive with name $filename and files $files (RELATIVE PATHS!)
     * @param string $filename
     * @param array|string $files
     * @return bool
     */
    public function create($filename, $files)
    {
        $res = $this->zip->open($filename, ZipArchive::CREATE);
        if ($res !== true) {
            return false;
        }
        if (is_array($files)) {
            foreach ($files as $f) {
                if (!$this->addFileOrDir($f)) {
                    $this->zip->close();
                    return false;
                }
            }
            $this->zip->close();
            return true;
        } else {
            if ($this->addFileOrDir($files)) {
                $this->zip->close();
                return true;
            }
            return false;
        }
    }

    /**
     * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
     * @param string $filename
     * @param string $path
     * @return bool
     */
    public function unzip($filename, $path)
    {
        $res = $this->zip->open($filename);
        if ($res !== true) {
            return false;
        }
        if ($this->zip->extractTo($path)) {
            $this->zip->close();
            return true;
        }
        return false;
    }

    /**
     * Add file/folder to archive
     * @param string $filename
     * @return bool
     */
    private function addFileOrDir($filename)
    {
        if (is_file($filename)) {
            return $this->zip->addFile($filename);
        } elseif (is_dir($filename)) {
            return $this->addDir($filename);
        }
        return false;
    }

    /**
     * Add folder recursively
     * @param string $path
     * @return bool
     */
    private function addDir($path)
    {
        if (!$this->zip->addEmptyDir($path)) {
            return false;
        }
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (is_dir($path . '/' . $file)) {
                        if (!$this->addDir($path . '/' . $file)) {
                            return false;
                        }
                    } elseif (is_file($path . '/' . $file)) {
                        if (!$this->zip->addFile($path . '/' . $file)) {
                            return false;
                        }
                    }
                }
            }
            return true;
        }
        return false;
    }
}

//--- templates functions

/**
 * Show nav block
 * @param string $path
 */
function fm_show_nav_path($path)
{
    ?>
<div class="path">
<div class="float-right">
<a title="Upload files" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;upload"><i class="icon-upload"></i></a>
<a title="New folder" href="#" onclick="newfolder('<?php echo fm_enc(FM_PATH) ?>');return false;"><i class="icon-folder_add"></i></a>
<?php if (FM_USE_AUTH): ?><a title="Logout" href="?logout=1"><i class="icon-logout"></i></a><?php endif; ?>
</div>
        <?php
        $path = fm_clean_path($path);
        $root_url = "<a href='?p='><i class='icon-home' title='" . FM_ROOT_PATH . "'></i></a>";
        $sep = '<i class="icon-separator"></i>';
        if ($path != '') {
            $exploded = explode('/', $path);
            $count = count($exploded);
            $array = array();
            $parent = '';
            for ($i = 0; $i < $count; $i++) {
                $parent = trim($parent . '/' . $exploded[$i], '/');
                $parent_enc = urlencode($parent);
                $array[] = "<a href='?p={$parent_enc}'>" . fm_convert_win($exploded[$i]) . "</a>";
            }
            $root_url .= $sep . implode($sep, $array);
        }
        echo '<div class="break-word">' . $root_url . '</div>';
        ?>
</div>
<?php
}

/**
 * Show message from session
 */
function fm_show_message()
{
    if (isset($_SESSION['message'])) {
        $class = isset($_SESSION['status']) ? $_SESSION['status'] : 'ok';
        echo '<p class="message ' . $class . '">' . $_SESSION['message'] . '</p>';
        unset($_SESSION['message']);
        unset($_SESSION['status']);
    }
}

/**
 * Show page header
 */
function fm_show_header()
{
    $sprites_ver = '20160315';
    header("Content-Type: text/html; charset=utf-8");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
    header("Pragma: no-cache");
    ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP File Manager</title>
<style>
html,body,div,span,p,pre,a,code,em,img,small,strong,ol,ul,li,form,label,table,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}
html{overflow-y:scroll}body{padding:0;font:13px/16px Tahoma,Arial,sans-serif;color:#222;background:#efefef}
input,select,textarea,button{font-size:inherit;font-family:inherit}
a{color:#296ea3;text-decoration:none}a:hover{color:#b00}img{vertical-align:middle;border:none}
a img{border:none}span.gray{color:#777}small{font-size:11px;color:#999}p{margin-bottom:10px}
ul{margin-left:2em;margin-bottom:10px}ul{list-style-type:none;margin-left:0}ul li{padding:3px 0}
table{border-collapse:collapse;border-spacing:0;margin-bottom:10px;width:100%}
th,td{padding:4px 7px;text-align:left;vertical-align:top;border:1px solid #ddd;background:#fff;white-space:nowrap}
th,td.gray{background-color:#eee}td.gray span{color:#222}
tr:hover td{background-color:#f5f5f5}tr:hover td.gray{background-color:#eee}
code,pre{display:block;margin-bottom:10px;font:13px/16px Consolas,'Courier New',Courier,monospace;border:1px dashed #ccc;padding:5px;overflow:auto}
pre.with-hljs{padding:0}
pre.with-hljs code{margin:0;border:0;overflow:visible}
code.maxheight,pre.maxheight{max-height:512px}input[type="checkbox"]{margin:0;padding:0}
#wrapper{max-width:1000px;min-width:400px;margin:10px auto}
.path{padding:4px 7px;border:1px solid #ddd;background-color:#fff;margin-bottom:10px}
.right{text-align:right}.center{text-align:center}.float-right{float:right}
.message{padding:4px 7px;border:1px solid #ddd;background-color:#fff}
.message.ok{border-color:green;color:green}
.message.error{border-color:red;color:red}
.message.alert{border-color:orange;color:orange}
.btn{border:0;background:none;padding:0;margin:0;font-weight:bold;color:#296ea3;cursor:pointer}.btn:hover{color:#b00}
.preview-img{max-width:100%;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC") repeat 0 0}
.preview-video{position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px}.preview-video video{position:absolute;width:100%;height:100%;left:0;top:0;background:#000}
[class*="icon-"]{display:inline-block;width:16px;height:16px;background:url("<?php echo FM_SELF_URL ?>?img=sprites&amp;t=<?php echo $sprites_ver ?>") no-repeat 0 0;vertical-align:bottom}
.icon-document{background-position:-16px 0}.icon-folder{background-position:-32px 0}
.icon-folder_add{background-position:-48px 0}.icon-upload{background-position:-64px 0}
.icon-arrow_up{background-position:-80px 0}.icon-home{background-position:-96px 0}
.icon-separator{background-position:-112px 0}.icon-cross{background-position:-128px 0}
.icon-copy{background-position:-144px 0}.icon-apply{background-position:-160px 0}
.icon-cancel{background-position:-176px 0}.icon-rename{background-position:-192px 0}
.icon-checkbox{background-position:-208px 0}.icon-checkbox_invert{background-position:-224px 0}
.icon-checkbox_uncheck{background-position:-240px 0}.icon-download{background-position:-256px 0}
.icon-goback{background-position:-272px 0}.icon-folder_open{background-position:-288px 0}
.icon-file_application{background-position:0 -16px}.icon-file_code{background-position:-16px -16px}
.icon-file_csv{background-position:-32px -16px}.icon-file_excel{background-position:-48px -16px}
.icon-file_film{background-position:-64px -16px}.icon-file_flash{background-position:-80px -16px}
.icon-file_font{background-position:-96px -16px}.icon-file_html{background-position:-112px -16px}
.icon-file_illustrator{background-position:-128px -16px}.icon-file_image{background-position:-144px -16px}
.icon-file_music{background-position:-160px -16px}.icon-file_outlook{background-position:-176px -16px}
.icon-file_pdf{background-position:-192px -16px}.icon-file_photoshop{background-position:-208px -16px}
.icon-file_php{background-position:-224px -16px}.icon-file_playlist{background-position:-240px -16px}
.icon-file_powerpoint{background-position:-256px -16px}.icon-file_swf{background-position:-272px -16px}
.icon-file_terminal{background-position:-288px -16px}.icon-file_text{background-position:-304px -16px}
.icon-file_word{background-position:-320px -16px}.icon-file_zip{background-position:-336px -16px}
.icon-logout{background-position:-304px 0}.icon-chain{background-position:-320px 0}
.icon-link_folder{background-position:-352px -16px}.icon-link_file{background-position:-368px -16px}
.compact-table{border:0;width:auto}.compact-table td,.compact-table th{width:100px;border:0;text-align:center}.compact-table tr:hover td{background-color:#fff}
.filename{max-width:420px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.break-word{word-wrap:break-word}
</style>
<link rel="icon" href="<?php echo FM_SELF_URL ?>?img=favicon" type="image/png">
<link rel="shortcut icon" href="<?php echo FM_SELF_URL ?>?img=favicon" type="image/png">
<?php if (isset($_GET['view']) && FM_USE_HIGHLIGHTJS): ?>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/styles/<?php echo FM_HIGHLIGHTJS_STYLE ?>.min.css">
<?php endif; ?>
</head>
<body>
<div id="wrapper">
<?php
}

/**
 * Show page footer
 */
function fm_show_footer()
{
    ?>
<p class="center"><small><a href="https://github.com/alexantr/filemanager" target="_blank">PHP File Manager</a></small></p>
</div>
<script>
function newfolder(p){var n=prompt('New folder name','folder');if(n!==null&&n!==''){window.location.search='p='+encodeURIComponent(p)+'&new='+encodeURIComponent(n);}}
function rename(p,f){var n=prompt('New name',f);if(n!==null&&n!==''&&n!=f){window.location.search='p='+encodeURIComponent(p)+'&ren='+encodeURIComponent(f)+'&to='+encodeURIComponent(n);}}
function change_checkboxes(l,v){for(var i=l.length-1;i>=0;i--){l[i].checked=(typeof v==='boolean')?v:!l[i].checked;}}
function get_checkboxes(){var i=document.getElementsByName('file[]'),a=[];for(var j=i.length-1;j>=0;j--){if(i[j].type='checkbox'){a.push(i[j]);}}return a;}
function select_all(){var l=get_checkboxes();change_checkboxes(l,true);}
function unselect_all(){var l=get_checkboxes();change_checkboxes(l,false);}
function invert_all(){var l=get_checkboxes();change_checkboxes(l);}
function checkbox_toggle(){var l=get_checkboxes();l.push(this);change_checkboxes(l);}
</script>
<?php if (isset($_GET['view']) && FM_USE_HIGHLIGHTJS): ?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<?php endif; ?>
</body>
</html>
<?php
}

/**
 * Show image
 * @param string $img
 */
function fm_show_image($img)
{
    $modified_time = gmdate('D, d M Y 00:00:00') . ' GMT';
    $expires_time = gmdate('D, d M Y 00:00:00', strtotime('+1 day')) . ' GMT';

    $img = trim($img);
    $images = fm_get_images();
    $image = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAEElEQVR42mL4//8/A0CAAQAI/AL+26JNFgAAAABJRU5ErkJggg==';
    if (isset($images[$img])) {
        $image = $images[$img];
    }
    $image = base64_decode($image);
    if (function_exists('mb_strlen')) {
        $size = mb_strlen($image, '8bit');
    } else {
        $size = strlen($image);
    }

    if (function_exists('header_remove')) {
        header_remove('Cache-Control');
        header_remove('Pragma');
    } else {
        header('Cache-Control:');
        header('Pragma:');
    }

    header('Last-Modified: ' . $modified_time, true, 200);
    header('Expires: ' . $expires_time);
    header('Content-Length: ' . $size);
    header('Content-Type: image/png');
    echo $image;

    exit;
}

/**
 * Get base64-encoded images
 * @return array
 */
function fm_get_images()
{
    return array(
        'favicon' => 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAZVJREFUeNqkk79Lw0AUx1+uidTQim4Waxfpnl1BcHMR6uLkIF0cpYOI
f4KbOFcRwbGTc0HQSVQQXCqlFIXgFkhIyvWS870LaaPYH9CDy8vdfb+fey930aSUMEvT6VHVzw8x
rKUX3N3Hj/8M+cZ6GcOtBPl6KY5iAA7KJzfVWrfbhUKhALZtQ6myDf1+X5nsuzjLUmUOnpa+v5r1
Z4ZDDfsLiwER45xDEATgOI6KntfDd091GidzC8vZ4vH1QQ09+4MSMAMWRREKPMhmsyr6voYmrnb2
PKEizdEabUaeFCDKCCHAdV0wTVNFznMgpVqGlZ2cipzHGtKSZwCIZJgJwxB38KHT6Sjx21V75Jcn
LXmGAKTRpGVZUx2dAqQzSEqw9kqwuGqONTufPrw37D8lQFxCvjgPXIixANLEGfwuQacMOC4kZz+q
GdhJS550BjpRCdCbAJCMJRkMASEIg+4Bxz4JwAwDSEueAYDLIM+QrOk6GHiRxjXSkJY8KUCvdXZ6
kbuvNx+mOcbN9taGBlpLAWf9nX8EGADoCfqkKWV/cgAAAABJRU5ErkJggg==',
        'sprites' => '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
RK5CYII=',
    );
}