-
Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!
Последнее сообщение от Афк
-
Сообщение
Любая версия Сервис для просмотра чата
на тестовый залил его мего трю скрипт чат читался, но без ников, баны и прочую хурму не проверял на чет загрузки, да согласен слишком долго думает, наверное хост типа хостингера ну или его сервис жрет кучу ресурсов ну и собственно его скрипт <?php class Chat { const KEY = "24BD-7E04-4595-ED20"; # Не изменяйте ключ const CHAT_FILE = "/home/logs/world2.chat"; # Путь к файлу чата public function __construct($action = null) { header("Content-type: text/html; charset=utf-8"); if($action != null && $_GET["code"] == self::KEY) { switch ($action) { case "getNick": $this->getNick($_GET["id"]); break; case "getNameClan": $this->getNameClan($_GET["id"]); break; case "setBan": $this->setBan($_GET["type"], $_GET["id"], $_GET["sec"], $_GET["reason"]); break; case "sendSystemMessage": $this->sendSystemMessage($_GET["message"]); break; case "getChatFile": $this->getChatFile($_GET["count"]); break; case "getCountString": $this->getCountString(); break; default: die("error"); } } else { die("error"); } } protected function cuint($data) { if($data < 64) return strrev(pack("C", $data)); else if($data < 16384) return strrev(pack("S", ($data | 0x8000))); else if($data < 536870912) return strrev(pack("I", ($data | 0xC0000000))); return strrev(pack("c", -32) . pack("i", $data)); } protected function UnPackString($data, $p) { $size = (hexdec(bin2hex(substr($data,$p,1))) >= 128) ? 2 : 1; $octetlen = (hexdec(bin2hex(substr($data,$p, $size))) >= 128) ? hexdec(bin2hex(substr($data,$p, $size)))-32768 : hexdec(bin2hex(substr($data,$p, $size))); $pp = $p; $p += $size + $octetlen; return mb_convert_encoding(substr($data,$pp+$size,$octetlen),"UTF-8","UTF-16LE"); } protected function PackString($data) { $data = iconv("UTF-8", "UTF-16LE", $data); $LnData = strlen($data); if ($LnData <= 128) { $ln = pack("C*", $LnData); return $ln.$data; } else { $ln = pack("n*", $LnData+32768); return $ln.$data; } } protected function length($data) { $PackLn = strlen($data); if($PackLn < 128) { $PackLn = pack("C*", $PackLn); return $PackLn; } else { $PackLn = pack("n*", $PackLn + 32768); return $PackLn; } } protected function getChatFile($count) { exec("tail -n ".$count." ".self::CHAT_FILE."", $array); for($i=0;$i<count($array);$i++) { echo $array[$i]."\n"; } } protected function getCountString() { $file = self::CHAT_FILE; $e = explode(" ", trim(exec("wc -l $file"))); echo $e[0]; } protected function getNick($id) { $data = pack("N*",-1, $id); $redy = $this->cuint(8003).$this->cuint(strlen($data)).$data; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($sock,"localhost",29400); socket_set_block($sock); socket_send($sock, $redy, 8192, 0); socket_recv($sock, $rb, 8192, 0); socket_set_nonblock($sock); socket_close($sock); echo $this->UnPackString($rb, 17); } protected function getNameClan($id) { $pack = strrev(pack("S", 32768)).strrev(pack("S", 1)).pack("N", $id); $data = $this->cuint(4608).$this->length($pack).$pack; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($sock, "localhost", 29400); socket_set_block($sock); socket_send($sock, $data, 8192, 0); socket_recv($sock, $buf, 8192, 0); socket_set_nonblock($sock); socket_close($sock); if (hexdec(bin2hex(substr($buf,2,1))) >= 128) { $name = $this->UnPackString($buf, 16); } else { $name = $this->UnPackString($buf, 15); } echo $name; } protected function setBan($type, $id, $sec, $reason) { if($type == 101) { $pack = pack("N", 1024).pack("N", 1).pack("N", $id).pack("N", $sec).$this->PackString($reason); $data = $this->cuint(362).$this->length($pack).$pack; } elseif($type == 100) { $pack = pack("N", 1024).pack("N", 830).pack("N", $id).pack("N", $sec).$this->PackString($reason); $data = $this->cuint(360).$this->length($pack).$pack; } $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($sock, "localhost", 29100); socket_set_block($sock); socket_send($sock, $data, 8192, 0); socket_recv($sock, $buf, 8192, 0); socket_set_nonblock($sock); socket_close($sock); } protected function sendSystemMessage($message) { $message = iconv("UTF-8", "UTF-16LE", $message); $Chanel = pack("C*", 9); $Id = pack("N*", 0); $Emotion = pack("C*", 0); $MessageLengh = strlen($message); if ($MessageLengh < 128) { $MessageLengh = pack("C*", $MessageLengh); } else { $MessageLengh = pack("n*", $MessageLengh + 32768); } $Packet = $Chanel . $Emotion . $Id . $MessageLengh . $message . "\x00\x00"; $PacketLen = pack("C*", strlen($Packet)); $type = pack("C", 120); $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $sock2 = socket_connect($sock, "localhost", "29300"); socket_set_block($sock); $data = $type . $PacketLen . $Packet; $sbytes = socket_send($sock, $data, 8192, 0); $rbytes = socket_recv($sock, $buf, 8192, 0); socket_set_nonblock($sock); socket_close($sock); } public function __destruct() { } } $chat = new Chat($_GET["action"]); ?>