Created
January 31, 2015 23:12
-
-
Save sevir/bbfa3b66dae047978696 to your computer and use it in GitHub Desktop.
CodeIgniter/Creamture Log Viewer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Enhaced Log viewer for CodeIgniter | |
* SeViR @2015 | |
* based in old version of 2010 | |
*/ | |
class Viewer{ | |
//Please for security set your external ip | |
private static $allow_ips = array( | |
'127.0.0.1', | |
'84.124.50.10' | |
); | |
//default logs path | |
private static $log_path = '../application/logs/'; | |
private static $initialized = false; | |
public static $assets = array( | |
'error_icon' => 'data:image/gif;base64,R0lGODlhEAAQAPQfAOaQhNFiTfrUzPrq5vWEZ/KnmfN9YedxW+3FvPCXhOmJe8NPNuySheKmmctZQ/ePd+uBa/i0ovOypvSupO94Xviiifq8qPrAs+NgVN19b96hle+fkuuvov///+doWQAAACH5BAUAAB8ALAAAAAAQABAAQAWV4CeOZClSkUGtQue9XuGIw5NYBNF1hmEph8EIEVBMFC9FIbNAlAQPSCESKUAgAtKjUOkZdqsDI3EQSQ6Rw2uHaRcCjdKgEVgsHBqh6TO4PHIPF3okAgQ3FTkVFgwHWSIXEDgEXx0rKAccJxGTKzsHagcyIhAbCRSfGxMvGAoAATQHRi8MDG4ZDoMfRAEAGxuuTXvCJCEAOw%3D%3D', | |
'load_icon' => 'data:image/gif;base64,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', | |
'debug_icon' => 'data:image/gif;base64,R0lGODlhEAAPAMQfAP3shv/12vvcS+vCc/vgXt6yPOvFeuuiJ+uaFOvLivraQuvJhfzhY+upN+ueHPvdUuvAbvzfWvveVv70zuu+aeu3Wbx8EuuwR/3vof7xsv3umP7yv/ziZv/24////////yH5BAEAAB8ALAAAAAAQAA8AAAVz4CeOn+eRKOklyZmqSdct7ustHcd1Ro16htyO4hsBhRxGoFIsDXIFC2NyKXqeuighsmn4PJAcIxqRZA61q5ixlTwEGLQI3GGwo2+BxnE62tt5CgoAfEABARMTGxkZGBoAkHwlFBUXDQcOCJqbaSaenyYiIQA7', | |
'info_icon' => 'data:image/gif;base64,R0lGODlhEAAQAPU/AD5xtKvE4Xqlx6bC3YWr0+Tr9LvL4mmVwz1XkZ282klhlI2qzZC00muYxVJronKdzGih1P7//1uc06K+3LLJ5ZuqyF2Esr3T6NDc6kaKxXahz3mk0maQvk2Rz1R7rZ674JKz2uPo78bd8vT3++bw+Up3tL3G2Yyy2fX4+5i001uKuVKQxZO41Juu0pe62GKKuWiTwWKXyH2p1tTg7miczTxco6HG5KTJ56jM6khmo3KWvnidxDyDwaC/4F6Rv////yH5BAUAAD8ALAAAAAAQABAAQAavwJ9wSCwKeRRNo3GYjThQWAAhJElOFNkmENBsJoRSYWioCRK7l0WXEiBMRZEE0uN+YpkLUfIBaR4PExNLDQQuDkIJPgEHMAYRERgWFikeFUUhFQ4ICA4VIUZVOBAdHRI2JEYiHScGHwQEIAEEAHpCNzQUGxoaIyiAGgMqLUIZug9LkI0wDQE1QisJBEwwTi/XOyyIPwUlBBMcLyqTFgsCCqBkORYsAwMMHgpwofRDQQA7', | |
'favicon' => 'data:image/png;base64,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' | |
); | |
private function __construct() {} | |
private static function initialize() | |
{ | |
if (self::$initialized) | |
return; | |
self::disable_ob(); | |
if (file_exists(dirname( __FILE__).'/system/logs/')){ | |
self::$log_path = dirname( __FILE__).'/system/logs/'; | |
}else if (file_exists(dirname( __FILE__).'/../application/logs/')){ | |
self::$log_path = dirname( __FILE__).'/../application/logs/'; | |
} | |
self::$initialized = true; | |
} | |
//reads all log file | |
public static function readLog($file){ | |
self::initialize(); | |
echo '<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">'; | |
echo '<style>pre:empty, pre:nth-of-type(1){ display:none; }body{margin: 60px 20px 20px 20px;}</style>'; | |
if(strpos($file, './') !== FALSE) die('invalid access'); | |
if (file_exists(self::$log_path.$file)){ | |
echo '<pre>'.str_replace( | |
array( | |
'ERROR -', | |
'INFO -', | |
'DEBUG -' | |
), | |
array( | |
'</pre><pre class="alert alert-warning"><img alt="error" src="'.self::$assets['error_icon'].'" />', | |
'</pre><pre class="info"><img alt="info" src="'.self::$assets['info_icon'].'" />', | |
'</pre><pre class="debug"><img alt="debug" src="'.self::$assets['debug_icon'].'" />', | |
),file_get_contents(self::$log_path.$file) | |
).'</pre>'; | |
} | |
} | |
//Check if you access from a valid IP | |
public static function checkAccess(){ | |
self::initialize(); | |
return in_array($_SERVER['REMOTE_ADDR'], self::$allow_ips); | |
} | |
//rename the old logfile | |
public static function clearLog(){ | |
self::initialize(); | |
$the_file = 'log-'.date('Y-m-d').'.php'; | |
if (file_exists(self::$log_path.$the_file)) rename(self::$log_path.$the_file,self::$log_path.str_replace('.php', '', $the_file).'_'.date('Gis').'.php'); | |
header('Location: '.str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI'])); | |
} | |
//compress logs in a ZipFile and it removes them | |
public static function compressLogs(){ | |
self::initialize(); | |
$log_files = glob(self::$log_path.'*.php'); | |
$zip = new ZipArchive(); | |
$zip->open(self::$log_path.'backup_'.date('Y-m-d').'_'.date('Gis').'.zip',ZIPARCHIVE::OVERWRITE); | |
foreach($log_files as $file) { | |
$zip->addFile($file,str_replace(dirname($file), '', $file)); | |
} | |
$zip->close(); | |
foreach($log_files as $file) { | |
unlink($file); | |
} | |
header('Location: '.str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI'])); | |
} | |
//compress logs and download it | |
public static function downloadLogs(){ | |
self::initialize(); | |
$log_files = glob(self::$log_path.'*.php'); | |
$zipname = self::$log_path.'backup_'.date('Y-m-d').'_'.date('Gis').'.zip'; | |
$zip = new ZipArchive(); | |
$zip->open($zipname,ZIPARCHIVE::OVERWRITE); | |
foreach($log_files as $file) { | |
$zip->addFile($file,str_replace(dirname($file), '', $file)); | |
} | |
$zip->close(); | |
header('Content-disposition: attachment; filename='.str_replace(dirname($zipname), '', $zipname)); | |
header('Content-type: application/octet-stream'); | |
readfile($zipname); | |
unlink($zipname); | |
} | |
//download a zip log backup file | |
public static function downloadFile($file){ | |
self::initialize(); | |
if((strpos($file, './') !== FALSE) || (strpos($file,'.zip') === FALSE)) die('invalid access'); | |
header('Content-disposition: attachment; filename='.$file); | |
header('Content-type: application/octet-stream'); | |
readfile(self::$log_path.$file); | |
} | |
//get list of logs and zip backups | |
public static function getFiles(){ | |
$log_files = glob(self::$log_path.'*.php'); | |
usort( | |
$log_files, | |
create_function('$a,$b', 'return filemtime($b) - filemtime($a);') | |
); | |
$backups_files = glob(self::$log_path.'*.zip'); | |
usort( | |
$backups_files, | |
create_function('$a,$b', 'return filemtime($b) - filemtime($a);') | |
); | |
return array( | |
'logs'=> $log_files, | |
'backups'=> $backups_files | |
); | |
} | |
//hide progress | |
public static function stopProgress(){ | |
?> | |
<script type="text/javascript"> | |
window.top.document.getElementById('progress').style.display = 'none'; | |
window.scrollTo(0,document.body.scrollHeight); | |
</script> | |
<?php | |
} | |
public static function disable_ob() { | |
// Turn off output buffering | |
ini_set('output_buffering', 'off'); | |
// Turn off PHP output compression | |
ini_set('zlib.output_compression', false); | |
// Implicitly flush the buffer(s) | |
ini_set('implicit_flush', true); | |
ob_implicit_flush(true); | |
// Clear, and turn off output buffering | |
while (ob_get_level() > 0) { | |
// Get the curent level | |
$level = ob_get_level(); | |
// End the buffering | |
ob_end_clean(); | |
// If the current level has not changed, abort | |
if (ob_get_level() == $level) break; | |
} | |
// Disable apache output buffering/compression | |
if (function_exists('apache_setenv')) { | |
apache_setenv('no-gzip', '1'); | |
apache_setenv('dont-vary', '1'); | |
} | |
} | |
public static function realtime(){ | |
echo '<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">'; | |
?> | |
<style type="text/css">pre:empty, pre:nth-of-type(1){ display:none;}body{margin: 60px 20px 20px 20px;}</style> | |
<script type="text/javascript"> | |
setInterval(function(){ | |
window.scrollBy(0,200); | |
}, 300); | |
</script> | |
<?php | |
$the_file = self::$log_path.'log-'.date('Y-m-d').'.php'; | |
if ( file_exists($the_file)){ | |
ini_set('max_execution_time', 0); | |
$lastpos = 0; | |
while (true) { | |
usleep(300000); //0.3 s | |
clearstatcache(false, $the_file); | |
$len = filesize($the_file); | |
if ($len < $lastpos) { | |
//file deleted or reset | |
$lastpos = $len; | |
} | |
elseif ($len > $lastpos) { | |
$f = fopen($the_file, "rb"); | |
if ($f === false) | |
die(); | |
fseek($f, $lastpos); | |
while (!feof($f)) { | |
$buffer = fread($f, 4096); | |
echo '<pre>'.str_replace( | |
array( | |
'ERROR -', | |
'INFO -', | |
'DEBUG -' | |
), | |
array( | |
'</pre><pre class="alert alert-warning"><img alt="error" src="'.self::$assets['error_icon'].'" />', | |
'</pre><pre class="info"><img alt="info" src="'.self::$assets['info_icon'].'" />', | |
'</pre><pre class="debug"><img alt="debug" src="'.self::$assets['debug_icon'].'" />', | |
),$buffer | |
).'</pre>'; | |
flush(); | |
} | |
$lastpos = ftell($f); | |
fclose($f); | |
} | |
} | |
}else{ | |
echo 'No today log found'; | |
} | |
} | |
} | |
if (!Viewer::checkAccess()) die('Your IP ('.$_SERVER['REMOTE_ADDR'].') is not allowed'); | |
if (isset($_GET['q'])){ | |
$query = $_GET['q']; | |
switch ($query) { | |
case 'phpinfo': | |
echo '<style>body{margin: 60px 20px 20px 20px;}</style>'; | |
phpinfo(); Viewer::stopProgress(); die(); | |
break; | |
case 'file': | |
if(isset($_GET['f'])){ | |
Viewer::readLog($_GET['f']); | |
} | |
Viewer::stopProgress(); | |
die(); | |
break; | |
case 'download': | |
if(isset($_GET['f'])){ | |
Viewer::downloadFile($_GET['f']); | |
} | |
die(); | |
break; | |
case 'clear': | |
Viewer::clearLog(); | |
die(); | |
break; | |
case 'downloadzip': | |
Viewer::downloadLogs(); | |
die(); | |
break; | |
case 'backup': | |
Viewer::compressLogs(); | |
die(); | |
break; | |
case 'realtime': | |
Viewer::realtime(); | |
flush(); | |
die(); | |
break; | |
default: | |
echo "no action available";Viewer::stopProgress();die(); | |
break; | |
} | |
} | |
$files = Viewer::getFiles(); | |
//And now the main view | |
?> | |
<html> | |
<head> | |
<title>Log Viewer for CodeIgniter</title> | |
<link rel='icon' type='image/png' href='<?php echo Viewer::$assets['favicon'];?>'> | |
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"> | |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> | |
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> | |
<script> | |
$(function(){ | |
$("a.action").click(function(){ | |
$("#progress").show(); | |
$("#content").attr('src', $(this).attr("data-href") ); | |
}); | |
$("#logfilter, #backupfilter").click(function(){ | |
return false; | |
}).keyup(function(){ | |
if(this.value==''){ | |
$("#"+this.id+" div").show(); | |
}else{ | |
filtertext = this.value; | |
$("#"+$(this).attr("data-id")+" div").each(function(){ | |
console.log($("a:first",this).html()); | |
console.log(filtertext); | |
if($("a:first",this).html().indexOf(filtertext) > -1){ | |
$(this).show(); | |
}else{ | |
$(this).hide(); | |
} | |
}); | |
} | |
}); | |
}); | |
</script> | |
<style> | |
.pr-info{ | |
padding-top: 5px; | |
padding-left: 10px; | |
} | |
.pr-info span{ | |
display: block; | |
font-size: 9px; | |
} | |
#backupfiles div, #logfiles div{ | |
font-size: 10px; | |
margin-left: 10px; | |
} | |
#backupfiles, #logfiles{ | |
max-height: 200px; | |
} | |
#content{ | |
position:absolute; | |
width: 100%; | |
height: 100%; | |
border: none; | |
} | |
#progress{ | |
display:none; | |
} | |
#logfilter, #backupfilter{ | |
margin: 5px 10px; | |
font-size: 10px; | |
height: 25px; | |
} | |
body{ | |
margin:0; | |
} | |
</style> | |
</head> | |
<body> | |
<nav class="navbar navbar-default navbar-fixed-top"> | |
<div class="container-fluid"> | |
<!-- Brand and toggle get grouped for better mobile display --> | |
<div class="navbar-header"> | |
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> | |
<span class="sr-only">Toggle navigation</span> | |
<span class="icon-bar"></span> | |
<span class="icon-bar"></span> | |
<span class="icon-bar"></span> | |
</button> | |
<a class="navbar-brand" title="refresh" href="<?=$_SERVER['QUERY_STRING'].$_SERVER['REQUEST_URI']; ?>">Log Viewer for CodeIgniter</a> | |
</div> | |
<!-- Collect the nav links, forms, and other content for toggling --> | |
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | |
<ul class="nav navbar-nav navbar-fixed"> | |
<li class="pr-info"> | |
<span><strong><?php echo $_SERVER["SERVER_NAME"]?></strong></span> | |
<span>server ip: <?php echo gethostbyname ( $_SERVER["SERVER_NAME"] )?></span> | |
<span>my ip: <?php echo $_SERVER['REMOTE_ADDR'];?></span> | |
</li> | |
<!-- DEPRECATED | |
<li><a title="backup and clear this log file" href="<?php echo str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']).'?q=clear&f=';?>">Clear</a></li> | |
--> | |
<li><a title="rename today log and create a new" href="<?php echo str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']).'?q=clear';?>">Clear</a></li> | |
<li><a title="compress into a zip file and download all logs" target="_blank" href="<?php echo str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']).'?q=downloadzip';?>">Download</a></li> | |
<li><a title="backup into a zip file all logs and removes them" href="<?php echo str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']).'?q=backup';?>">Backup</a></li> | |
<li class="dropdown"> | |
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Logs files<span class="caret"></span></a> | |
<ul class="dropdown-menu" role="menu"> | |
<li> | |
<a href="#">Log files</a> | |
<div class="form-group"> | |
<input id="logfilter" data-id="logfiles" type="text" class="form-control" placeholder="Filter for..."> | |
</div><!-- /input-group --> | |
</li> | |
<li id="logfiles"> | |
<?php foreach ($files['logs'] as $file): ?> | |
<div class="filelink"><a class="action log" href="#log" data-href="<?php echo str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']).'?q=file&f='.basename($file);?>"><?=basename($file)?></a></div> | |
<?php endforeach ?> | |
</li> | |
<li class="divider"></li> | |
<li> | |
<a href="#">Backup files</a> | |
<div class="form-group"> | |
<input id="backupfilter" data-id="backupfiles" type="text" class="form-control" placeholder="Filter for..."/> | |
</div><!-- /input-group --> | |
</li> | |
<li id="backupfiles"> | |
<?php foreach ($files['backups'] as $file): ?> | |
<div class="filelink"><a target="_blank" href="<?php echo str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']).'?q=download&f='.basename($file);?>"><?=basename($file)?></a></div> | |
<?php endforeach ?> | |
</li> | |
</ul> | |
</li> | |
<li class="dropdown"> | |
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Extra info<span class="caret"></span></a> | |
<ul class="dropdown-menu" role="menu"> | |
<li><a class="action" href="#phpinfo" data-href="<?php echo str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']).'?q=phpinfo'?>">Show phpinfo()</a></li> | |
</ul> | |
</li> | |
<li id="progress"><a href="#"><img src="<?php echo Viewer::$assets['load_icon'];?>"></a></li> | |
</ul> | |
</div><!-- /.navbar-collapse --> | |
</div><!-- /.container-fluid --> | |
</nav> | |
<div class=""> | |
<iframe id="content" src="<?php echo str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']).'?q=realtime'?>"></iframe> | |
</div> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment