Jump to:
Screenshot
Attributes
Encoding
<?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>
<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>
<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);
?>&copy=<?php
echo urlencode($copy);
?>&finish=1"><i class="icon-apply"></i> Copy</a></b>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&copy=<?php
echo urlencode($copy);
?>&finish=1&move=1"><i class="icon-apply"></i> Move</a></b>
<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);
?>&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, '/'));
?>&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);
?>&dl=<?php
echo urlencode($file);
?>"><i class="icon-download"></i> Download</a></b>
<b><a href="<?php
echo $file_url;
?>" target="_blank"><i class="icon-chain"></i> Open</a></b>
<?php
// ZIP actions
if ($is_zip && $filenames !== false) {
$zip_name = pathinfo($file_path, PATHINFO_FILENAME);
?>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&unzip=<?php
echo urlencode($file);
?>"><i class="icon-apply"></i> Unpack</a></b>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&unzip=<?php
echo urlencode($file);
?>&tofolder=1" title="Unpack to <?php
echo fm_enc($zip_name);
?>"><i class="icon-apply"></i>
Unpack to folder</a></b>
<?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>
<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 ? ' → <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);
?>&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);
?>&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=&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) . '&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 ? ' → <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);
?>&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);
?>&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);
?>&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);
?>&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>
<a href="#" onclick="unselect_all();return false;"><i class="icon-checkbox_uncheck"></i> Unselect all</a>
<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);
?>&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&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=");
}
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.xtVersion: 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.xtVersion: 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.xtVersion: 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.xtVersion: 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.xtVersion: 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]
<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&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=&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=&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=&chmod=beneri.se_malware_analysis">0644</a></td>
<td>root:root</td>
<td>
<a title="Delete" href="?p=&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=&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=&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=&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=&chmod=foxa.php">0664</a></td>
<td>osboxes:osboxes</td>
<td>
<a title="Delete" href="?p=&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=&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=&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>
<a href="#" onclick="unselect_all();return false;"><i class="icon-checkbox_uncheck"></i> Unselect all</a>
<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>
<?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>
<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>
<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) ?>&copy=<?php echo urlencode($copy) ?>&finish=1"><i class="icon-apply"></i> Copy</a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode($copy) ?>&finish=1&move=1"><i class="icon-apply"></i> Move</a></b>
<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) ?>&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, '/')) ?>&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) ?>&dl=<?php echo urlencode($file) ?>"><i class="icon-download"></i> Download</a></b>
<b><a href="<?php echo $file_url ?>" target="_blank"><i class="icon-chain"></i> Open</a></b>
<?php
// ZIP actions
if ($is_zip && $filenames !== false) {
$zip_name = pathinfo($file_path, PATHINFO_FILENAME);
?>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&unzip=<?php echo urlencode($file) ?>"><i class="icon-apply"></i> Unpack</a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&unzip=<?php echo urlencode($file) ?>&tofolder=1" title="Unpack to <?php echo fm_enc($zip_name) ?>"><i class="icon-apply"></i>
Unpack to folder</a></b>
<?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>
<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 ? ' → <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) ?>&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) ?>&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=&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) . '&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 ? ' → <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) ?>&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) ?>&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) ?>&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) ?>&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>
<a href="#" onclick="unselect_all();return false;"><i class="icon-checkbox_uncheck"></i> Unselect all</a>
<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) ?>&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&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=',
);
}