3&&time()-$log[$_SERVER[‘REMOTE_ADDR’]][‘time’]$value){if(time()-$value[‘time’]>86400){unset($log[$key]);$log_updated=true;}}if(isset($log_updated)){file_put_contents(LOG_FILE,serialize($log));}}session_set_cookie_params(1440,dirname($_SERVER[‘REQUEST_URI’]));session_name(‘pheditor’);session_start();if(empty(PASSWORD)===false&&(isset($_SESSION[‘pheditor_admin’])===false||$_SESSION[‘pheditor_admin’]!==true)){if(isset($_POST[‘pheditor_password’])&&empty($_POST[‘pheditor_password’])===false){if(hash(‘sha512’,$_POST[‘pheditor_password’])===PASSWORD){$_SESSION[‘pheditor_admin’]=true;redirect();}else{$error=’The entry password is not correct.’;$log=file_exists(LOG_FILE)?unserialize(file_get_contents(LOG_FILE)):array();if(isset($log[$_SERVER[‘REMOTE_ADDR’]])===false){$log[$_SERVER[‘REMOTE_ADDR’]]=array(‘num’=>0,’time’=>0);}$log[$_SERVER[‘REMOTE_ADDR’]][‘num’]+= 1;$log[$_SERVER[‘REMOTE_ADDR’]][‘time’]=time();file_put_contents(LOG_FILE,serialize($log));}}die(‘Pheditor

Pheditor

‘.(isset($error)?’

‘.$error.’

‘:null).’

document.getElementById(“pheditor_password”).focus();’);}if(isset($_GET[‘logout’])){unset($_SESSION[‘pheditor_admin’]);redirect();}if(isset($_POST[‘action’])){if(isset($_POST[‘file’])&&empty($_POST[‘file’])===false){$formats=explode(‘,’,EDITABLE_FORMATS);if(($position=strrpos($_POST[‘file’],’.’))!==false){$extension=substr($_POST[‘file’],$position+1);}else{$extension=null;}if(empty(EDITABLE_FORMATS)===false&&empty($extension)===false&&in_array(strtolower($extension),$formats)!==true){die(‘INVALID_EDITABLE_FORMAT’);}if(strpos($_POST[‘file’],’../’)!==false||strpos($_POST[‘file’],’..\”)!==false){die(‘INVALID_FILE_PATH’);}}switch($_POST[‘action’]){case ‘open’:$_POST[‘file’]=urldecode($_POST[‘file’]);if(isset($_POST[‘file’])&&file_exists(MAIN_DIR.$_POST[‘file’])){echo file_get_contents(MAIN_DIR.$_POST[‘file’]);}break;case ‘save’:$file=MAIN_DIR.$_POST[‘file’];if(isset($_POST[‘file’])&&isset($_POST[‘data’])&&(file_exists($file)===false||is_writable($file))){if(file_exists($file)===false){file_put_contents($file,$_POST[‘data’]);echo ‘success|File saved successfully’;}elseif(is_writable($file)===false){echo ‘danger|File is not writable’;}else{if(file_exists($_POST[‘file’])){file_to_history($file);}file_put_contents($file,$_POST[‘data’]);echo ‘success|File saved successfully’;}}break;case ‘make-dir’:$dir=MAIN_DIR.$_POST[‘dir’];if(file_exists($dir)===false){mkdir($dir);echo ‘success|Directory created successfully’;}else{echo ‘warning|Directory already exists’;}break;case ‘reload’:echo files(MAIN_DIR);break;case ‘password’:if(isset($_POST[‘password’])&&empty($_POST[‘password’])===false){$contents=file(__FILE__);foreach($contents as $key=>$line){if(strpos($line,’define(\’PASSWORD\”)!==false){$contents[$key]=”define(‘PASSWORD’, ‘”.hash(‘sha512’,$_POST[‘password’]).”‘);\n”;break;}}file_put_contents(__FILE__,implode($contents));echo ‘Password changed successfully.’;}break;case ‘delete’:if(isset($_POST[‘path’])&&file_exists(MAIN_DIR.$_POST[‘path’])){$path=MAIN_DIR.$_POST[‘path’];if($_POST[‘path’]==’/’){echo ‘danger|Unable to delete main directory’;}elseif(is_dir($path)){if(count(scandir($path))!==2){echo ‘danger|Directory is not empty’;}elseif(is_writable($path)===false){echo ‘danger|Unable to delete directory’;}else{rmdir($path);echo ‘success|Directory deleted successfully’;}}else{file_to_history($path);if(is_writable($path)){unlink($path);echo ‘success|File deleted successfully’;}else{echo ‘danger|Unable to delete file’;}}}break;case ‘rename’:if(isset($_POST[‘path’])&&file_exists(MAIN_DIR.$_POST[‘path’])&&isset($_POST[‘name’])&&empty($_POST[‘name’])===false){$path=MAIN_DIR.$_POST[‘path’];$new_path=str_replace(basename($path),”,dirname($path)).DS.$_POST[‘name’];if($_POST[‘path’]==’/’){echo ‘danger|Unable to rename main directory’;}elseif(is_dir($path)){if(is_writable($path)===false){echo ‘danger|Unable to rename directory’;}else{rename($path,$new_path);echo ‘success|Directory renamed successfully’;}}else{file_to_history($path);if(is_writable($path)){rename($path,$new_path);echo ‘success|File renamed successfully’;}else{echo ‘danger|Unable to rename file’;}}}break;}exit;}function files($dir,$first=true){$data=”;if($first===true){$data.=’
  • ‘.basename($dir).’‘;}$formats=empty(EDITABLE_FORMATS)?[]:explode(‘,’,EDITABLE_FORMATS);$data.=’
      ‘;$files=array_slice(scandir($dir),2);asort($files);foreach($files as $key=>$file){if((SHOW_PHP_SELF===false&&$dir.DS.$file==__FILE__)||(SHOW_HIDDEN_FILES===false&&substr($file,0,1)===’.’)){continue;}if(is_dir($dir.DS.$file)){$dir_path=str_replace(MAIN_DIR.DS,”,$dir.DS.$file);$data.=’
    • ‘.$file.’‘.files($dir.DS.$file,false).’
    • ‘;}else{$file_path=str_replace(MAIN_DIR.DS,”,$dir.DS.$file);$is_editable=count($formats)<1||strpos($file,'.')===false||in_array(substr($file,strrpos($file,'.')+1),$formats);$data.='
    • ‘.$file.’
    • ‘;}}$data.=’
    ‘;if($first===true){$data.=’
‘;}return $data;}function redirect($address=null){if(empty($address)){$address=$_SERVER[‘PHP_SELF’];}header(‘Location: ‘.$address);exit;}function file_to_history($file){if(is_numeric(MAX_HISTORY_FILES)&&MAX_HISTORY_FILES>0){$file_dir=dirname($file);$file_name=basename($file);$file_history_dir=HISTORY_PATH.DS.str_replace(MAIN_DIR,”,$file_dir);foreach([HISTORY_PATH,$file_history_dir]as $dir){if(file_exists($dir)===false||is_dir($dir)===false){mkdir($dir);}}$history_files=scandir($file_history_dir);foreach($history_files as $key=>$history_file){if(in_array($history_file,[‘.’,’..’,’.DS_Store’])){unset($history_files[$key]);}}$history_files=array_values($history_files);if(count($history_files)>= MAX_HISTORY_FILES){foreach($history_files as $key=>$history_file){if($keyPheditorh1, h1 a, h1 a:hover { margin: 0; padding: 0; color: #444; cursor: default; text-decoration: none; } #files { padding: 20px 10px; margin-bottom: 10px; } #files > div { overflow: auto; } #path { margin-left: 10px; } .dropdown-item.close { font-size: 1em !important; font-weight: normal; opacity: 1; } .alert { display: none; position: fixed; top: 10px; right: 10px; cursor: pointer; }var editor, modes = { “js”: “javascript”, “json”: “javascript”, “md”: “text/x-markdown” }; function alertBox(message, className) { $(“.alert”).removeClass(“alert-success alert-warning alert-danger”); $(“.alert”).html(message).addClass(“alert-” + className).fadeIn(); setTimeout(function(){ $(“.alert”).fadeOut(); }, 5000); } function reloadFiles() { $.post(“”, { action: “reload” }, function(data){ $(“#files > div”).jstree(“destroy”); $(“#files > div”).html(data); $(“#files > div”).jstree(); $(“#files > div a:first”).click(); $(“#path”).html(“”); window.location.hash = “/”; }); } $(function(){ editor = CodeMirror.fromTextArea($(“#editor”)[0], { lineNumbers: true, mode: “application/x-httpd-php”, indentUnit: 4, indentWithTabs: true, lineWrapping: true }); $(“#files > div”).jstree({ state: { key: “pheditor” }, plugins: [ “state” ] }); $(“#files”).on(“click”, “a.open-file”, function(event){ event.preventDefault(); var file = $(this).attr(“data-file”), _this = $(this); window.location.hash = file; $.post(“”, { action: “open”, file: encodeURIComponent(file) }, function(data){ editor.setValue(data); editor.setOption(“mode”, “application/x-httpd-php”); if (file.lastIndexOf(“.”) > 0) { var extension = file.substring(file.lastIndexOf(“.”) + 1); if (modes[extension]) { editor.setOption(“mode”, modes[extension]); } } $(“#editor”).attr(“data-file”, file); $(“#path”).html(file); $(“.dropdown”).find(“.save, .delete, .rename, .reopen, .close”).removeClass(“disabled”); }); }); $(“#files”).on(“dblclick”, “a[data-file]”, function(event){ event.preventDefault(); window.open(“” + $(this).attr(“data-file”)); }); $(“#files”).on(“click”, “a.open-dir”, function(event){ event.preventDefault(); var dir = $(this).attr(“data-dir”), _this = $(this); window.location.hash = dir; editor.setValue(“”); $(“#path”).html(dir); $(“.dropdown”).find(“.save, .reopen, .close”).addClass(“disabled”); $(“.dropdown”).find(“.delete, .rename”).removeClass(“disabled”); }); if (window.location.hash.length > 1) { var hash = window.location.hash.substring(1); setTimeout(function(){ $(“#files a[data-file=\”” + hash + “\”], #files a[data-dir=\”” + hash + “\”]”).click(); }, 500); } $(“a.change-password”).click(function(){ var password = prompt(“Please enter new password:”); if (password != null && password.length > 0) { $.post(“”, { action: “password”, password: password }, function(data) { alert(data); }); } }); $(“.dropdown .new-file”).click(function(){ var path = $(“#path”).html(); if (path.length > 0) { var name = prompt(“Please enter file name:”, “new-file”), end = path.substring(path.length – 1), file = “”; if (name != null && name.length > 0) { if (end == “/”) { file = path + name; } else { file = path.substring(0, path.lastIndexOf(“/”) + 1) + name; } $.post(“”, { action: “save”, file: file, data: “” }, function(data){ data = data.split(“|”); alertBox(data[1], data[0]); if (data[0] == “success”) { reloadFiles(); } }); } } else { alertBox(“Please select a file or directory”, “warning”); } }); $(“.dropdown .new-dir”).click(function(){ var path = $(“#path”).html(); if (path.length > 0) { var name = prompt(“Please enter directory name:”, “new-dir”), end = path.substring(path.length – 1), dir = “”; if (name != null && name.length > 0) { if (end == “/”) { dir = path + name; } else { dir = path.substring(0, path.lastIndexOf(“/”) + 1) + name; } $.post(“”, { action: “make-dir”, dir: dir }, function(data){ data = data.split(“|”); alertBox(data[1], data[0]); if (data[0] == “success”) { reloadFiles(); } }); } } else { alertBox(“Please select a file or directory”, “warning”); } }); $(“.dropdown .save”).click(function(){ var path = $(“#path”).html(), data = editor.getValue(); if (path.length > 0) { $.post(“”, { action: “save”, file: path, data: data }, function(data){ data = data.split(“|”); alertBox(data[1], data[0]); }); } else { alertBox(“Please select a file”, “warning”); } }); $(“.dropdown .close”).click(function(){ editor.setValue(“”); $(“#files > div a:first”).click(); $(“.dropdown”).find(“.save, .delete, .rename, .reopen, .close”).addClass(“disabled”); }); $(“.dropdown .delete”).click(function(){ var path = $(“#path”).html(); if (path.length > 0) { if (confirm(“Are you sure to delete this file?”)) { $.post(“”, { action: “delete”, path: path }, function(data){ data = data.split(“|”); alertBox(data[1], data[0]); if (data[0] == “success”) { reloadFiles(); } }); } } else { alertBox(“Please select a file or directory”, “warning”); } }); $(“.dropdown .rename”).click(function(){ var path = $(“#path”).html(); if (path.length > 0) { var name = prompt(“Please enter new name:”, “new-name”); if (name != null && name.length > 0) { $.post(“”, { action: “rename”, path: path, name: name }, function(data){ data = data.split(“|”); alertBox(data[1], data[0]); if (data[0] == “success”) { reloadFiles(); } }); } } else { alertBox(“Please select a file or directory”, “warning”); } }); $(“.dropdown .reopen”).click(function(){ var path = $(“#path”).html(); if (path.length > 0) { $(“#files a[data-file=\”” + path + “\”], #files a[data-dir=\”” + path + “\”]”).click(); } }); $(window).resize(function(){ if (window.innerWidth >= 720) { var height = window.innerHeight – $(“.CodeMirror”)[0].getBoundingClientRect().top – 20; $(“#files, .CodeMirror”).css(“height”, height + “px”); } else { $(“#files > div, .CodeMirror”).css(“height”, “”); } }); $(window).resize(); $(“.alert”).click(function(){ $(this).fadeOut(); }); $(document).bind(“keyup keydown”, function(event){ if ((event.ctrlKey || event.metaKey) && event.shiftKey) { if (event.keyCode == 78) { $(“.dropdown .new-file”).click(); event.preventDefault(); return false; } else if (event.keyCode == 83) { $(“.dropdown .save”).click(); event.preventDefault(); return false; } } }); $(document).bind(“keyup”, function(event){ if (event.keyCode == 27) { if (document.activeElement.tagName.toLowerCase() == “textarea”) { $(“.jstree-clicked”).focus(); } else { editor.focus(); } } }); });

<a href="http://github.com/hamidsamak/pheditor" target="_blank" title="Pheditor”>Pheditor

Password <a href="?logout=1″ class=”btn btn-sm btn-danger”>Logout

Leave a Reply

Your email address will not be published. Required fields are marked *