|
|
Модератор форума: LightInDarkness |
Форум Web раздел Сайты / WWW для эмуляторов [Скрипт] Cтатистика онлайна |
[Скрипт] Cтатистика онлайна |
И так господа, я решил поделиться с вами небольшим скриптом, который существенно облегчит нагрузку на базу данных со стороны сайта.
Как "оно" работает: Цитата 1. Открывает файл и читает из него время, если время в файле меньше текущего, переходит к пункту 2, иначе к пункту 3. 2. Делает 2 запроса в базу, записывает новые данные в файл с новой датой, выводит пользователю свежую статистику. 3. выводит пользователю уже ранее записаные данные. и вот вам сам код: Код <?php header("Content-Type: content=text/html; charset=cp1251"); ###### # Конфиг ###### $realm_name[1] = ''; //Название сервера $dbip[1] = ''; //ip бд $dblogin[1] = ''; // логин бд $dbpass[1] = ''; // пароль бд $cdb_name[1] = ''; $referesh_delay = 5; $num_realms = 1; ###### $servers = file("./online.txt"); for($i=1;$i<=$num_realms;$i++){ $serv_num = $i-1; $last_state = explode(",", $servers[$serv_num]); if($last_state[2] < time()){ $online['all'][$i] = @mysql_result(@mysql_query("SELECT count(guid) FROM `".$cdb_name[$i]."`.`characters` WHERE online = 1", $Connectdb[$i]), 0); $online['horde'][$i] = @mysql_result(@mysql_query("SELECT count(guid) FROM `".$cdb_name[$i]."`.`characters` WHERE online=1 and race in (2,5,6,8,10,9)", $Connectdb[$i]), 0); $online['allnc'][$i] = $online['all'][$i]-$online['horde'][$i]; $realmname[$i] = $realm_name[$i]; $time = time()+$referesh_delay; $servers_file .= $online['allnc'][$i].",".$online['horde'][$i].",".$time.",".$realm_name[$i]."\n"; }else{ $online['horde'][$i] = $last_state[1]; $online['allnc'][$i] = $last_state[0]; $online['all'][$i] = $online['horde'][$i]+$online['allnc'][$i]; $realmname[$i] = $last_state[3]; } echo "Орда:".$online['horde'][$i]." Альянс:".$online['allnc'][$i]." Всего:".$online['all'][$i]; } if($last_state[2] < time()){ @file_put_contents("./online.txt", $servers_file); } ?> Правил на ходу, но должно работать. Этот кусок выдран у меня из CMS. Изменяйте на здоровье |
товарищ... это называется кэширование данных. и твой "скрипт" делает что-то подобное кэширования статистики онлайна. Это конечно похвально, но лучше не размениваться по мелочам, а написать класс кэширования, который можно встроить в любой модуль и кэшировать любые данные на сайте.
мне фиолетово какой у меня рейтинг, можете поставить хоть минус миллион...
Не в плюсах счастье... Помогаю тем, кто хочет чтобы ему помогли, а не сделали за него.
Сообщение # 3 написано 10.09.2012 в 17:47
|
Кот_ДаWINчи, господин, я знаю, что это называется кэширование...
Над написанием класса я пока не задумывался, т.к. еще пока не придумал, что еще кэшировать:) Вобщем, я сделал попытку подкинуть идею и ничего более. Ну и к тому же у меня сейчас у самого на сервере онлайна то нет, и нужды особой нет в этом скрипте... А так хоть кто-нибудь ,может, и использует. Пишу попутно отвечая iUnro.
Сообщение # 4 написано 10.09.2012 в 17:58
|
1. Если указывать именно так:
Quote header("Content-Type: content=text/html; charset=cp1251"); то браузер будет отдавать страницу на загрузку, так как типа "content=text/html" не существует. Есть только text/html. Правильно писать: Quote header("Content-Type: text/html; charset=cp1251"); P.S: Я бы предложил использовать кодировку utf-8, а не cp1251 (Тем более сама база в этой кодировке, ну и из за плюсов в количестве символов и её нормальной поддержке в новых версиях php). 2. Не инициализирована переменная: servers_file. Сразу делается конкатенация с не инициализированной переменной. 3. Ошибки не нужно глушить. Их нужно обрабатывать. Особенно ошибки выполнения запросов. Также стоит добавить обработку, если отсутствует файл online.txt. Например создавать его и потом продолжать работу скрипта, или не делать чтение из файла до того, как его создадут после первого запроса в базу. 4. Вряд ли задержка в 1 секунду поможет базе. Тем более результат time() нужно заносить в переменную, так как время не стоит на месте во время выполнения скрипта и в конце скрипта будет нечего писать потому, что переменной не существует (если к концу файла прошла секунда, а в начале last_state[2] == time()). 5*. Конечно понимаю что это вырезано из некой "CMS", но раз выкладываешь скрипт, то позаботься хотя бы об использовании всех переменных и подключении к базе. |
cp1251 используется мною только по причине того, что, когда я начал писать кмс я забыл сменить кодировку файла:)
Кому надо, тот допишет. По поводу пункта 1, то признаю, моя очепятка. А вот я не хочу в этом скрипте обрабатывать ошибки, я хочу, чтобы он выводил одни и те-же данные в течении нескольких секунд независимо от реальных значений в базе. 4.По-вашему, что значит переменная refresh_delay?
Сообщение # 6 написано 11.09.2012 в 07:39
|
Quote начал писать кмс Quote $online['horde'][$i] = @mysql_result(@mysql_query("SELECT count(guid) FROM `".$cdb_name[$i]."`.`characters` WHERE online=1 and race in (2,5,6,8,10,9)", $Connectdb[$i]), 0);
DumpMe v1.0 - система автоматического переноса персонажей
Вышла в свет первая стабильная версия. Писать в скайп - razart8
Сообщение # 7 написано 11.09.2012 в 09:11
|
RazArt, вы придираетесь.
Сообщение # 8 написано 11.09.2012 в 09:41
|
код ужасен.
Сообщение # 10 написано 11.09.2012 в 12:41
|
| |||
| |||