Исправил
Код
<?
error_reporting(7);
// (c) anonim_no@mail.ru
// ajax - http://dkalab.ru
/* ---------------------- настройка --------------------------*/
// путь к логам вашего cs16 сервера со слешем в конце
//Логи 1 фтп, 0 локальныне
$ftp = 1;
$ftp_server = 'rip.staff.sky';
$ftp_user_name = 'anonymous';
$ftp_user_pass = 'asad@asasd.asd';
$ftp_dir = 'upload/cs/';
$ftp_checkTime=1;
$ftp_tmp_file = 'tmp.log';
$logs = '/opt/csserver/hlds_l/cstrike/logs/';
// например $logs = '/opt/csserver/hlds_l/cstrike/logs/';
// или $logs = 'C:\Program Files\Valve\cstrike\logs\';
// http/url директории где лежат картинки оружия
$weapon_images = 'http://game.sky/stats/images/weapons/';
// можно оставить этот путь :) или вообще убрать, но без них смотрится плохо
// пример http://cs.mysite.ru/stats/images/weapons/halflife/cstrike/
// http/url директории где лежат картинки карт со слешем в конце
$map_images = '';
// можно оставить пустым :)
// пример http://cs.mysite.ru/stats/images/maps/halflife/cstrike/
/* ---------------------- end настройка --------------------------*/
if (isset($_GET['action']) && $_GET['action']=='update') {
include('JsHttpRequest.php');
$JsHttpRequest =& new JsHttpRequest("windows-1251");
$file = $_REQUEST['file'];
$map = $_REQUEST['map'];
$str = (int)$_REQUEST['str'];
$time = $_REQUEST['time'];
function get_file_ftp() {
global $str, $map, $logs, $ftp_user_name, $ftp_user_pass, $ftp_server, $ftp_dir, $ftp_tmp_file;
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server\n");
if ( @ftp_login($conn_id, $ftp_user_name, $ftp_user_pass) == FALSE ) {
die( "Couldn't connect as $ftp_user_name\n" );
}
if( !ftp_chdir( $conn_id, $ftp_dir ) ) {
die( "Couldn't change directory ($ftp_dir)\n" );
}
$contents = ftp_nlist( $conn_id, "." );
foreach( $contents as $filename ) {
$file = $filename;
}
$handle = fopen( $ftp_tmp_file, 'x' );
if (!ftp_fget( $conn_id, $handle, $file, FTP_BINARY, 0 )) {
die( "There was a problem while downloading $file to $ftp_tmp_file\n" );
}
fclose( $handle );
ftp_close($conn_id);
return $ftp_tmp_file;
}
function get_file() {
global $str, $map, $logs;
$str = 0;
$map = '';
$file = 'not_found_logs';
foreach (glob($logs.'L'.date("md").'*.log') as $filename) {
$file = str_replace($logs,'',$filename);
}
return $file;
}
function parse_string($str) {
global $weapon_images;
$str = strip_tags($str);
preg_match_all("/^L [0-1]{1}[0-9]{1}\/[0-3]{1}[0-9]{1}\/[2]{1}[0]{1}[0-9]{1}[0-9]{1} - ([0-2]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}): (Log|Loading|Server|Started|World|Rcon:|Team|((\".+\") (entered|connected|disconnected|committed|triggered|joined|attacked|say_team|
say|((killed) ((\".+\") with (\".+\"))))))(.*)$/", $str, $out);
switch ($out[2][0]) {
case 'World':
switch ($out[11][0]) {
case ' triggered "Round_Start"':
$text = $out[1][0].' <span class=s>"Round_Start"'.'</span>';
break;
case ' triggered "Round_End"':
$text = $out[1][0].' <span class=s>"Round_End"'.'</span>';
break;
case ' triggered "Game_Commencing"':
$text = $out[1][0].' <span class=s>"Game_Commencing"'.'</span>';
break;
default:
break;
}
break;
case 'Team':
$text = $out[1][0].'<span class=t>'.str_replace(' triggered ',' ',$out[11][0]).'</span>';
break;
case 'Log':
break;
case 'Loading':
break;
case 'Server':
break;
case 'World':
break;
case 'Rcon:':
break;
case 'Started':
$out[11][0] = explode(' ',$out[11][0]);
$text = $out[1][0].' <span class=s>Started map '.$out[11][0][2].'</span>';
break;
default:
switch ($out[5][0]) {
case 'entered':
break;
case 'say':
if (strstr($out[11][0],'(dead)')) {
$out[4][0].='(dead):';
$out[11][0] = str_replace('(dead)','',$out[11][0]);
} else {
$out[4][0].=':';
}
$text = $out[1][0].' <span class=g>'.$out[4][0].' '.$out[11][0].'</span>';
break;
case 'joined':
$text = $out[1][0].' <span class=s>'.$out[4][0].' '.$out[5][0].$out[11][0].'</span>';
break;
case 'disconnected':
$text = $out[1][0].' <span class=s>'.$out[4][0].' '.$out[5][0].'</span>';
break;
case 'connected':
break;
case 'committed':
$text = $out[1][0].' '.$out[4][0].' committed suicide';
break;
case 'triggered':
switch ($out[11][0]) {
case ' "Spawned_With_The_Bomb"':
$text = $out[1][0].' <span class=t>'.$out[4][0].' '.$out[11][0].'</span>';
break;
case ' "Dropped_The_Bomb"':
$text = $out[1][0].' <span class=t>'.$out[4][0].' '.$out[11][0].'</span>';
break;
case ' "Got_The_Bomb"':
$text = $out[1][0].' <span class=t>'.$out[4][0].' '.$out[11][0].'</span>';
break;
case ' "Planted_The_Bomb"':
$text = $out[1][0].' <span class=t>'.$out[4][0].' '.$out[11][0].'</span>';
break;
case ' "Begin_Bomb_Defuse_Without_Kit"':
$text = $out[1][0].' <span class=t>'.$out[4][0].' '.$out[11][0].'</span>';
break;
case ' "Touched_A_Hostage"':
$text = $out[1][0].' <span class=t>'.$out[4][0].' '.$out[11][0].'</span>';
break;
default:
break;
}
break;
case 'attacked':
break;
default:
switch ($out[7][0]) {
case 'killed':
$out[10][0] = trim(str_replace('"','',$out[10][0]));
$text = $out[1][0].' <span class=r>'.$out[4][0].' '.($weapon_images?'<img src='.$weapon_images.$out[10][0].'.gif height=15 alt='.$out[10][0].' title='.$out[10][0].'> '.$out[9][0]:'killed '.$out[9][0].' with '.$out[10][0]).'</span>';
break;
default:
break;
}
break;
}
break;
}
$text = ereg_replace("\"([^\"]+)\"","<b>\\1</b>",$text);
return trim($text);
}
if ($file=='') {
if ($ftp==1)
$file = get_file_ftp();
else
$file = get_file();
} else {
if (!file_exists($logs.$file)) {
if ($ftp==1)
$file = get_file_ftp();
else
$file = get_file();
}
}
if ($ftp==1) $file=$ftp_tmp_file;
if ($file!='not_found_logs') {
$lines = file($logs.$file);
if ($map=='') {
for($i=0;$i<(count($lines));$i++) {
if (strstr($lines[$i], 'Started map')) {
preg_match_all("/^(.+): Started map \"(.+)\" (.+)$/",$lines[$i],$out);
$map = $out[2][0];
break;
}
}
}
if ($str==0) {
for($i=(count($lines)-2);$i>(count($lines)-152);$i--) {
$lines[$i] = parse_string($lines[$i]);
if ($lines[$i]!='') {
$text = $lines[$i]."\n".$text;
}
if ($str==0) {
$str = $i;
}
$time = time();
}
} else {
for($i=($str+1);$i<(count($lines)-1);$i++) {
$lines[$i] = parse_string($lines[$i]);
if ($lines[$i]!='') {
$text = $text.$lines[$i]."\n";
}
$str = $i;
$time = time();
}
for($i=1;$i<6;$i++) {
if(strstr($lines[$str+$i],'Log file closed')) {
$file='';
$text = " --------------------- end map --------------------- \n";
}
}
}
if ((time()-$time)>120) {
$file='';
}
}
$_RESULT = array(
'file' => $file,
'str' => $str,
'text' => trim($text),
'map' => $map,
'time' => $time
);
if ($map) {
echo '<b>Map:</b> '.$map.($map_images?'<br><img src='.$map_images.$map.'.jpg>':'');
}
exit;
}
?>
<html>
<head>
<title>Дальсвязь DSL :: Играй в команде! :: Games.Sakhalin.Ru</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style>
.s {
color: #770077;
}
.t {
color: #000099;
}
.r {
color: #000000;
}
.g {
color: #ff0000;
}
</style>
<script src="JsHttpRequest.js"></script>
<script language="JavaScript">
var file = '';
var map = '';
var str = '';
var din = '';
var time = 0;
var IE = (navigator.appName != "Netscape")? 1:0;
function Slider(obj) {
divSlider = document.getElementById(obj);
var sliderHeight = IE? 50:divSlider.offsetHeight;
tempY = IE? document.body.clientHeight - sliderHeight:innerHeight - sliderHeight;
divSlider.style.left = IE? (document.body.clientWidth - divSlider.offsetWidth-40) :(innerWidth - divSlider.offsetWidth-40);
Move_divSlider = function() {
var pY = IE? document.body.scrollTop + 55:pageYOffset + 45;
tempY += (pY - sliderHeight - tempY) / 4;
divSlider.style.top = tempY;
setTimeout("Move_divSlider()", 10);
}
Move_divSlider ();
}
function go(id) {
return document.getElementById(id);
}
function cc () {
if (din==''){din='#==#==#';}if(din=='#==#==#'){din='==#==#=';}else if(din=='==#==#='){din='=#==#==';}else if(din=='=#==#=='){din='#==#==#';}
go("do").innerHTML = '<b>Connect:</b> '+din+'<br>';
}
function update() {
//JsHttpRequest
var req = new JsHttpRequest();
req.onreadystatechange = function() {
if (req.readyState == 4) {
go("debug").innerHTML = req.responseText;
if (req.responseJS['text']!='') {
go("consol").innerHTML += '<pre>'+req.responseJS['text']+"</pre>\n";
scr();
}
file = req.responseJS['file'];
str = req.responseJS['str'];
map = req.responseJS['map'];
time = req.responseJS['time'];
if (file!='not_found_logs') {
setTimeout('update();', 1000);
} else {
go("consol").innerHTML += file+"\n";
}
}
}
req.caching = false;
req.open(null, 'http://<?=$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']?>?action=update', false);
req.send({ file: file, map: map, time: time, str: str});
cc();
}
function scr() {
window.scrollBy(0, 0xfffffff);
setTimeout('window.scrollBy(0, 0xfffffff);', 100);
}
</script>
</head>
<body bgcolor="#ffffff" leftmargin="2" topmargin="2" bottommargin="2" rightmargin="2" marginwidth="2" marginheight="2">
<div id=fl style="width: 170px; font-size: 12px; position: absolute; left: 1px; top: 1px; padding: 10; margin: 1px 1px 1px 1px; background-color: #ffffee; border: 1px solid #cccccc;"><span id="do"></span> <span id="debug"></span> </div>
<div id="consol"></div>
<script>
setTimeout('update();', 1000);
setTimeout('Slider("fl");', 1000);
</script>
<pre>
</pre>
</body>
</html>