рдорд╛рдЗрдХреНрд░реЛ-рдЯреВрд▓: рдХреЗрдВрджреНрд░реАрдХреГрдд рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдлреЛрдВрдЯреЗрд▓реЛ рдЖрдЗрдХрди рджрд░реНрд╢рдХ

рдХреБрдЫ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдПрдХ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХрдИ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЖрдЬ рдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рджреЛ рдорд╛рдЗрдХреНрд░реЛ-рдЯреВрд▓реНрд╕ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ: рдлреЛрдВрдЯреЗрд▓реЛ рд╕реЗрд╡рд╛ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдХреЗрдВрджреНрд░реАрдХреГрдд рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдЖрдЗрдХрди рдлреЛрдВрдЯ рджреЗрдЦрдирд╛ред рддреЛ, рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдФрд░ рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред







рдХреЗрдВрджреНрд░реАрдХреГрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓реЙрдЧрд┐рдВрдЧ


рдореЗрд░реА рд╕рд╛рдЗрдЯ рдкрд░ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд╕рд┐рдпреЛрдВ рдореЗрдВ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ - рдЫреЛрдЯреЗ рд╕реЗ рдмрдбрд╝реЗ рддрдХред рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди, рдбрд┐рдмрдЧ, рдЗрддреНрдпрд╛рджрд┐ ... рд╣рд░ рдХрд┐рд╕реА рдХрд╛ рд╡реНрдпрд╡рд╕рд╛рдп, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдбреАрдмрдЧрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЛ рджреБрд░реНрднрд╛рдЧреНрдп рдорд╛рдирддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, htaccess рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдмреЗрд╢рдХ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓реЙрдЧ рдХреЛ рд░рдЦрдирд╛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рд▓реЙрдЧ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд▓реЙрдЧ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯреВрд▓ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХреА рдЬрд░реВрд░рдд рдХреА рд╕рднреА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

<?php /* OPTIONS */ define("PTPL_DATE",'/^\[(\d+)-(\w+)-(\d+)(\s+)(\d+):(\d+):(\d+)\]/si'); define("PRPL_DATE",'<b class="badge">\1-\2-\3 \5:\6:\7</b>'); /* DATA */ $_ = <<<DATA <!DOCTYPE html> <html><head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>LOG viewer</title> <link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/bootstrap/2.3.2/css/bootstrap.min.css" /> <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Cuprum&subset=latin" /> <link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" /> <link rel="stylesheet" type="text/css" href="index.php?sect=css" /> <link rel="icon" type="image/png" href="index.php?sect=icon" /> <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="index.php?sect=js"></script> </head><body><div class="container-fluid"> <div class="row-fluid"> <div class="toolbox span3"> <a id="el-menu" class="btn btn-info fa fa-refresh" href="index.php?sect=menu" data-target="side">Refresh</a> </div> <div class="toolbox span9"> <a id="el-content" class="btn btn-info fa fa-refresh" href="index.php?sect=log" data-target="content">Refresh</a> <a class="btn btn-danger fa fa-times-circle" href="index.php?sect=log&act=clear" data-target="content">Clear</a> </div> </div> <div class="row-fluid" id="el-root"> <div class="side span3"><div></div></div> <div class="content span9"><div></div></div> </div> </div></body></html> DATA; define("APP_PAGE",$_); define("APP_EMPTY",'<div class="logitem info"><span class="fa fa-info-circle"></span> Log is empty!'."</div>\n\n"); $_ = <<<JS (function(\$){ \$.fn.HTTPError = function(E){ var I = parseInt(E.status); \$(this).html('').append(\$('<div>').addClass('logitem error').append( \$('<span>').addClass('fa fa-'+((I == 401 || I == 403)?'lock':'times-circle')) ).append( \$('<span>').text(' '+E.statusText) )); } \$.fn.logClick = function(T,E,F){ E = E || false; if (E) E.removeClass('active error').addClass('loading').siblings().removeClass('active error loading'); \$.get(\$(this).attr('href')).success(function(D){ \$('#el-root > div.'+T+':first > div:first').html(D); if (E) E.removeClass('loading').addClass('active'); if (typeof F == 'function') F(); }).error(function(R){ \$('#el-root > div.'+T+':first > div:first').HTTPError(R); if (E) E.removeClass('loading').addClass('error'); }); return false; } })(jQuery); \$(function(){ \$('#el-root > div.side:first').on('click','li > a.item',function(){ return \$(this).logClick('content',\$(this).parent()); }); \$('div.toolbox').on('click','a.btn',function(){ return \$(this).logClick(\$(this).attr('data-target')); }); \$('#el-root > div.side:first').on('click','li > a.fa-times',function(){ return \$(this).logClick('content',\$(this).parent(),function(){ \$('#el-menu').click(); \$('#el-content').click(); }); }); \$('#el-menu').click(); \$('#el-content').click(); }); JS; define("APP_JS",$_); $_ = <<<CSS html,body,div.container-fluid { height: 100%; } #el-root { height: 75%; } div.span3 { width: 21.769%; padding: 1%; } div.span9 { width: 72.359%; padding: 1%; } a.btn.fa { padding: 4px 8px; font: 16px Cuprum,Arial,sans-serif; } a.btn.fa:before { margin-right: 4px; font: 16px FontAwesome; } #el-root > div.side, #el-root > div.content { height: 100%; border: 1px solid silver; border-radius: 5px; } #el-root > div.side > div, #el-root > div.content > div { height: 100%; overflow-x: hidden; overflow-y: auto; } #el-root > div.side ul { list-style-type: none; margin: 0; padding: 0; } #el-root > div.side ul li { display: block; padding: 4px; color: #358; font: 16px Cuprum,Arial,sans-serif; border-radius: 4px; position: relative; } #el-root > div.side ul li.loading { background: #707788; color: #d0dddf; } #el-root > div.side ul li.error { background: #510; color: #d0dddf; } #el-root > div.side ul li.active { background: #358; color: white; } #el-root > div.side ul li > a.fa-times { display: none; position: absolute; right: 4px; text-decoration: none; color: red; } #el-root > div.side ul li:hover > a.fa-times { display: inline; } #el-root > div.side ul li.active > a.fa-times, #el-root > div.side ul li.error > a.fa-times, #el-root > div.side ul li.active > a.item, #el-root > div.side ul li.error > a.item { color: white; text-decoration: none; } #el-root > div.side ul li.loading > a.fa-times { display: none; } #el-root > div.side ul li.loading > a.item { color: #d0dddf; text-decoration: none; } #el-root > div.side ul li:before { margin-right: 4px; font: 16px FontAwesome; } div.logitem { padding: 4px; border-radius: 4px; } div.logitem.info, div.logitem.error { font: 20px Cuprum,Arial,sans-serif; padding: 24px; } div.logitem.info { background: #e0eeff; } div.logitem.info span.fa { color: royalblue; } div.logitem.error { background: #ffe0cc; } div.logitem.error span.fa { color: red; } CSS; define("APP_CSS",$_); $_= 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy' . 'ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfJJREFUeNqMUj1rG0EQnbtboYhESFfY' . 'Jp8ESYFgo8qNazltuvyI/InYYFKkDoG4NqjLHwiGgCGFK3N9jCVIYYyRzrY+zljS' . 'Ku+NtdIanJCFudnd2ffmzcwF77a2hCsIgrdwj+Xf64e19thOJjKdTvXCuA38k73t' . '7d0bBEc0a2WCmIsnSSJ7+/vvmQv2yzGGZJtZYAkajdRurq8lGwyk3+9Lr9dT/21n' . 'ZxfvNoF75QjMBODZCkgd4puLooXo8VjGIO52u/Kl2ZTG6urXz83mB0Q+KoFdEIQE' . '/zw6UtnlclmGw6G8rtWUpNFo6H2xWJTvSZLOFYx9BSCoAcBS+DiOY3mQy91RoluU' . 'uygBAb+EVqul2TudjpKczBpZKpUkyzKp1+sCzL0EWkK1Wp1nd0qc8RzhDTDhogSP' . 'gLTtdnsOdEroeWZPnq6soJr7CbQHToHfB3+fC0MSeCVg5r4C1wOOjUA/ez6fl5dQ' . 'AMxfSoCCSqWiB2Yj8BmaRyJLVbBAB+KVcHl6Kg+Xlu5Mwcll1hdQgPaKzEbIRrsS' . 'BufnYo4PDuT5xoYU4tjw8s36+m0P2Hmc6cPbGSkJkfjFTZam8vvwUGMFbJYv0zTv' . 'dRPvQ80WwdMMfm9jjETwfEsMscxagC1fnZ1dPFpb+yT/sWyWXRDDdvwRYAB4+UxU' . 'y0hc0wAAAABJRU5ErkJggg=='; define("APP_ICON",$_); /* LIB */ function _is_log($name) { return !in_array($name,array('.','..','cgi-bin','.htaccess','.htpasswd','index.php')); } /* MAIN */ session_start(); $out = ''; if (isset($_GET['file'])) { if (ctype_alnum(str_replace(array('.','_','-'),'',$_GET['file']))) { if (is_file($_GET['file']) && _is_log($_GET['file'])) { $_SESSION['currentlog'] = $_GET['file']; } else { header('HTTP/1.0 404 Not found'); } } else { header('HTTP/1.0 400 Bad request'); } } else { if (!isset($_SESSION['currentlog'])) { $logs = scandir('.'); $fnd = ''; foreach ($logs as $f) if (_is_log($f) && ($fnd=='')) $fnd = $f; if ($fnd != '') $_SESSION['currentlog'] = $fnd; } } $act = isset($_GET['act'])?(in_array($_GET['act'],array('clear','del'))?$_GET['act']:'view'):'view'; $sect = 'index'; if (isset($_GET['sect'])) $sect = in_array($_GET['sect'],array('menu','icon','js','css','derr'))?$_GET['sect']:'log'; if (isset($_SESSION['currentlog']) && isset($_SERVER['PHP_AUTH_USER'])) { switch($sect){ case 'derr': header('HTTP/1.0 '.intval($_GET['e']).' debug error'); exit(); break; case 'icon': header('Content-Type: image/png'); $img = imagecreatefromstring(base64_decode(APP_ICON)); imagesavealpha($img,true); imagepng($img); exit(); case 'css' : header('Content-Type: text/css; charset=utf-8'); echo APP_CSS; exit(); case 'js' : header('Content-Type: text/javascript; charset=utf-8'); echo APP_JS; exit(); case 'log' : $out = ''; switch ($act) { case 'clear': file_put_contents($_SESSION['currentlog'],''); $out = APP_EMPTY; break; case 'del' : unlink($_SESSION['currentlog']); unset($_SESSION['currentlog']); break; default : $log = file($_SESSION['currentlog']); foreach($log as $str) $out.= '<div class="logitem">'.preg_replace(PTPL_DATE,PRPL_DATE,$str)."</div>\n\n"; if ($out == '') $out = APP_EMPTY; break; } break; case 'menu': $logs = scandir('.'); $out .= '<ul>'; foreach ($logs as $number => $val) if (_is_log($val)) $out.= '<li class="fa fa-file-text-o'.($val==$_SESSION['currentlog']?' active':'').'">' . '<a class="item" href="index.php?file='.$val.'┬з=log">'."$val</a>" . '<a class="fa fa-times" href="index.php?file='.$val.'┬з=log&act=del"></a>' . "</li>\n"; $out .= "</ul>\n"; break; default: $out = APP_PAGE; break; } header("Content-Type: text/html; charset=utf-8"); echo $out; } ?>
      
      





рд▓реЙрдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, index.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ, рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдореВрд▓рднреВрдд HTTP рдкреНрд░рдорд╛рдгреАрдХрд░рдг (htpassetd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░реЗрдВред



рд▓реЙрдЧ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ .htaccess рдореЗрдВ, рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 php_value log_errors "on" php_value log_errors_max_len "1024" php_value error_log "/path/to/your/log/file"
      
      





рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдм рд╣реИред рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп, рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ, рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд▓реЙрдЧ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рд▓реЙрдЧ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдмреВрдЯрд╕реНрдЯреНрд░реИрдк, jQuery) рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ CDN рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред



Fontello рдЪрд┐рд╣реНрди рджрд░реНрд╢рдХ


рдЕрдкрдиреЗ рдврд╛рдВрдЪреЗ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЖрдЗрдХрди рдлрд╝реЙрдиреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп FontAwesome рдХрдИ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреБрдЫ рдЖрдЗрдХрди рдЧрд╛рдпрдм рдереЗ, рдФрд░ рдХреБрдЫ рдЖрдЗрдХрди рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереЗ, рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦреАрдВрдЪрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред рдлрд╝реЙрдиреНрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдПрдХ рдмрд▓реНрдХрд┐ рддреБрдЪреНрдЫ рджрд┐рдирдЪрд░реНрдпрд╛ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рдЯреИрдм рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рд░рдЦрдирд╛ рдпрд╛ рд╕рднреА рдХреЛрдб рдФрд░ рдЙрдкрдирд╛рдореЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдпрд╛ рд▓рдЧрд╛рддрд╛рд░ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЭрд╛рдВрдХрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рддреАрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдЕрд╕рд╣рдЬ рдереЗред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рд╣реИ рдЬреЛ рдЙрддреНрдкрдиреНрди рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдлрд╝реЙрдиреНрдЯ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдмрдирд╛рддрд╛ рд╣реИред



рдХреЛрдб рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рдФрд░ рдЖрддреНрдордирд┐рд░реНрднрд░ рд╣реИ:



 <?php /* SETTINGS */ define('fontPrefix',''); //     define('fontFile',''); //       /* DATA */ define('fontRegExp','/'.fontPrefix.'([\w\-]+):before(\s*){(\s*)content(\s*):(\s*)([\"'."\'".'])(\S)(\w+)([\"'."\'".'])(\s*);(\s*)}/si'); define('fontFTitle','/^(.*)\@font-face(\s*){(\s*)font-family(\s*):(\s*)([\"'."\'".'])(\w+)([\"'."\'".'])(.*)$/si'); /* MAIN SECTION */ $fontdata = array(); $a = array(); $fontfile = file_get_contents(fontFile); if (preg_match_all(fontRegExp,$fontfile,$a,PREG_PATTERN_ORDER)) { foreach ($a[1] as $k => $v) $fontdata[$v] = str_pad($a[8][$k],4,'0',STR_PAD_LEFT); } ?> <!DOCTYPE html> <html><head> <title>Font table for font ┬л<?php echo preg_replace(fontFTitle,'\7',$fontfile); ?>┬╗</title> <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Cuprum&subset=latin" /> <link rel="stylesheet" type="text/css" href="<?php echo fontFile; ?>" /> <style type="text/css"> div.font-table-wrapper { padding: 4px 0; } ul.font-table li { display: block; float: left; position: relative; width: 200px; padding: 4px 40px; cursor: pointer; *cursor: hand; border-right: 1px dotted silver; } ul.font-table li.f { border-left: 1px dotted silver; } ul.font-table li .icon { position: absolute; left: 8px; top: 2px; display: block; width: 24px; height: 22px; padding-top: 2px; font-size: 14px; color: #237; border-radius: 3px; background: #cdf; text-align: center; } ul.font-table li .class { font: 15px Cuprum,Arial,sans-serif; color: #68a; } ul.font-table li .code, ul.font-table li .letter { display: block; position: absolute; top: 7px; text-align: center; font: bold 14px monospace; } ul.font-table li .code { right: 16px; color: #284; } ul.font-table li .letter { background: #c0ffc7; width: 24px; height: 20px; top: 2px; padding-top: 4px; border-radius: 3px; right: 54px; color: #697; } </style> </head><body><div class="container-fluid"><div class="row-fluid"><div class="span12 font-table-wrapper"><ul class="font-table"> <?php $c = 0; foreach ($fontdata as $k => $v) { $_ = '<li'.($c==0?' class="f"':'').'><span class="icon '.fontPrefix.$k.'"></span><span class="class">'.fontPrefix.$k.'</span>' . '<span class="letter">&#x'.$v.';</span><span class="code">'.$v.'</span>'."</li>\n"; echo $_; $c = $c==3?0:($c+1); } ?> </ul><br style="clear: both"/></div></div></div></body></html>
      
      







рдХреНрдпреВрдкреНрд░рдо рдХреЛ рдлреЛрдВрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдШрдиреАрднреВрдд рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯрдиреЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ - рдЙрдкрд╕рд░реНрдЧ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрдеред рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝реЙрдиреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдереА, рдФрд░ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЛ index.css рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╣ рд╕рдм рд╣реИ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред



рдпрд╣реА рд╣реИ, рдореЗрд░реА рдмрд╛рдЗрдХ рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред



All Articles