Files
AtomicOld/scan.php
2026-02-14 19:34:54 +03:00

183 lines
7.0 KiB
PHP

<?php ///
header('Content-Type: text/html; charset=utf-8');
if (isset($_POST['path'])) {
echo file_get_contents($_POST['path']);
exit();
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Hunter :: FRANKIE MAKERS</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/superhero/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/styles/default.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/styles/railscasts.min.css" />
<style>
ul, li, pre {display: block; padding: 0; margin: 0; border: none;}
pre {font-size:12px; line-height: 1em;}
ul {margin-top: 30px;}
.data-link:hover span {color: #fff!important;}
</style>
</head>
<body style="margin: 20px;">
<?php
define('BASE_NAME', basename(__file__));
$search = ($_GET) ? stripslashes($_GET['q']) : '';
?>
<form class="pull-right" action="/scan.php" method="get">
<div style="display: table;">
<div style="display: table-cell; vertical-align: middle;">
<input type="text" class="form-control" style="width: 320px;" name="q" value="<?php echo htmlspecialchars($search); ?>">
</div>
<div style="display: table-cell; vertical-align: middle;">
<input type="submit" class="btn btn-info" value="go">
</div>
</div>
</form>
<?php
$droot = $_SERVER["DOCUMENT_ROOT"];
$files = new ArrayObject;
$defaultColor = '#ff0000';
$colors = array(
'#ffff00',
'#ffee00',
'#ffdd00',
'#ffcc00',
'#ffbb00',
'#ffaa00',
'#ff8800',
'#ff6600',
'#ff4400',
'#ff2200',
'#ff0000');
$extensions = array(
'php',
'js',
'css',
'less',
'scss',
'tpl');
function printOutput($extension)
{
global $files, $colors;
if (isset($files[$extension]) && $files[$extension]) {
$i = 0;
echo '<ul>';
echo '<li>' . strtoupper($extension) . ':</li>';
foreach ($files[$extension] as $file) {
echo '<li>';
echo '<span class="data-link" data-path="' . $file['path'] . '">';
foreach ($file['parts'] as $part) {
$i++;
if (!isset($colors[$i])) $colors[$i] = $defaultColor;
echo '<span style="color:' . $colors[$i] . ';">/' . $part . '</span>';
}
$entries = '';
foreach ($file['entries'] as $entry) $entries .= '<pre><code class="' . $extension . '">' . htmlentities($entry) . '</code></pre>';
echo ' (<small>countEntries = </small>' . $file['count'] . '<small>, countLinesInFile = </small>' . $file['lines'] . ' )</span> <span class="open"><i class="fa fa-eye text-primary" aria-hidden="true"></i></span> <div class="entries" style="display:none;">' . $entries . '</div></li>';
$i = 0;
}
echo '</ul>';
}
}
function getLinesWithString($file, $str)
{
$entries = array();
foreach ($file as $lineNumber => $line) {
$lineNumber++;
if (strpos($line, $str) !== false) {
$entries[] = $lineNumber . ' :: ' . $line;
}
}
return $entries;
}
if ($search):
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__file__)), RecursiveIteratorIterator::SELF_FIRST);
foreach ($objects as $path => $object) {
$info = pathinfo($path);
$basename = $info['basename'];
$extension = $info['extension'];
if ($basename != BASE_NAME && in_array($extension, $extensions)) {
$source = file_get_contents($path);
$file = file($path);
if (strpos($source, $search) !== false) {
$_path = str_replace($_SERVER["DOCUMENT_ROOT"], '', $path);
$entries = getLinesWithString($file, $search);
$countLines = count($file);
$countEntries = substr_count($source, $search);
$parts = explode('/', trim($_path, '/'));
$files[$extension][] = array(
'count' => $countEntries,
'parts' => $parts,
'path' => $path,
'lines' => $countLines,
'entries' => $entries);
}
}
}
foreach ($extensions as $extension) printOutput($extension);
endif;
?>
<div class="text-center"><small>FRANKIE MAKERS :: Hunter - Substring hunting</small></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/ace.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/mode-php.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/mode-javascript.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/mode-css.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/mode-less.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/theme-idle_fingers.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/ext-beautify.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/languages/php.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/languages/javascript.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/languages/css.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/languages/less.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script type="text/javascript">
var i = 0;
$('.data-link').each(function() {
i++;
$(this).parent().find('.open').css('cursor', 'pointer').click(function() {
$(this).next().toggle();
});
$(this).css('cursor', 'pointer').click(function() {
$this = $(this);
if ($this.hasClass('lock')) {
$this.parent().next().toggle();
return;
}
$this.addClass('lock');
$this.parent().after('<textarea id="editor' + i + '"></textarea>');
var editor = ace.edit("editor" + i);
editor.setTheme("ace/theme/idle_fingers");
editor.setOptions({ maxLines: Infinity });
var PHPMode = ace.require("ace/mode/php").Mode;
var JSMode = ace.require("ace/mode/javascript").Mode;
var CSSMode = ace.require("ace/mode/css").Mode;
var LESSMode = ace.require("ace/mode/less").Mode;
editor.session.setMode(new PHPMode());
$.ajax({
type: "POST",
url: "scan.php",
data: { path: $this.attr('data-path') }
}).done(function( data ) {
editor.setValue(data);
});
});
});
</script>
</body>
</html>