Создание информационной системы удаленного администрирования серверов онлайн-игр для ООО «Мираж»

Автор работы: Пользователь скрыл имя, 20 Ноября 2012 в 17:29, дипломная работа

Описание работы

Целью данной дипломной работы является разработка информационной системы удаленного администрирования серверов онлайн-игр для крупного сервера.
Для достижения данной цели необходимо решить следующие задачи:
изучить особенности администрирования серверов онлайн-игр и выявить основные проблемы данной области
провести анализ современных систем удаленного администрирования серверов онлайн-игр
изучить возможности языка php и его использование для взаимодействия с серверными SQL-базами
разработать информационную систему удаленного администрирования серверов онлайн-игр
разработать комплексную защиту системы от несанкционированного доступа
создать оптимальный программный интерфейс системы

Содержание работы

ВВЕДЕНИЕ
Глава 1 Аналитическая часть
Понятие серверов и их классификация
1.1.1 Аппаратное обеспечение
1.1.2 Классификация стандартных серверов
1.2 Сущность и методы удаленного доступа
1.2.1 Типы взаимодействующих систем
1.2.2 Удаленный узел
1.2.3 Удаленное управление
1.3 Понятие многопользовательских ролевых онлайн-игр
1.4 Обзор существующих информационных систем удаленного администрирования серверов онлайн-игр
1.4.1 RT Java Server Administrator v.1.0
1.4.2 La2offline Interlude 2.0
1.4.3 Off php admin by Hint
1.4.4 Интегрированная в игровую оболочку административная панель
1.5 Скриптовый язык PHP и его взаимодействие с базами данных
1.5.1 Использование
1.5.2 Синтаксис
1.5.3 Типы данных
1.5.4 Суперглобальные массивы
1.5.5 Объектно-ориентированное программирование
1.5.6 Взаимодействие с базами данных (MS SQL)
1.5.7 Недостатки языка
Глава 2 Практическая часть
2.1 Постановка задачи
2.2 Краткая характеристика предприятия ООО «Мираж»
2.3 Особенности администрирования серверов онлайн-игр
2.4 Обоснование выбора средства разработки
2.5 Разработка алгоритма решения задач администрирования серверов
2.6 Разработка структуры баз данных
2.7 Описание разработанной системы
2.7.1 Защита системы от несанкционированного доступа
2.7.2 Главное окно системы
2.7.3 Фрейм настройки записей
2.7.4 Основной фрейм управления
2.7.5 Фрейм блокирования учетных записей
2.7.6 Фрейм записей захода на сервер
2.7.7 Фрейм записей действий
2.7.8 Фрейм записей чата
2.7.9 Фрейм истории предметов
2.7.10 Фрейм поиска предметов
2.7.11 Фрейм списка предметов
Глава 3 Экономическая часть
3.1 Особенности определения экономической эффективности программного продукта
3.2 Расчет затрат на разработку и внедрение программного продукта
3.3 Расчет годового экономического эффекта и периода окупаемости
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Файлы: 2 файла

Диплом_Спиридонов.doc

— 4.37 Мб (Скачать файл)

['name'] — исходное  имя файла на компьютере пользователя.

['type'] — указанный  агентом пользователя MIME-тип файла. PHP не проверяет его и поэтому  нет никаких гарантий что указанный  тип соответствует действительности.

['size'] — размер файла в байтах.

['tmp_name'] — полный  путь к файлу во временной  папке. Файл необходимо переместить  оттуда функцией move_uploaded_file. Загруженные  файлы из временной папки PHP удаляет самостоятельно.

['error'] — код  ошибки. Если файл удачно загрузился, то этот элемент будет равен 0 (UPLOAD_ERR_OK).

$_COOKIE (уст. $HTTP_COOKIE_VARS)

Ассоциативный массив с переданными агентом  пользователя значениями кук.

$_REQUEST

Содержит элементы из массивов $_GET, $_POST, $_COOKIE. С версии PHP 4.1 включает $_FILES.

$_SESSION (уст. $HTTP_SESSION_VARS)

Содержит данные сессии.

1.5.5 Объектно-ориентированное программирование

PHP поддерживает  широкие объектно-ориентированные  возможности, полная поддержка  которых была введена в пятой версии языка [5].

Класс в PHP объявляется с помощью ключевого слова class. Методы и поля класса могут быть общедоступными (public, по умолчанию), защищёнными (protected) и скрытыми (private). PHP поддерживает все три основные механизма ООП — инкапсуляцию, полиморфизм и наследование (родительский класс указывается с помощью ключевого слова extends после имени класса). Поддерживаются интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent.

Классы в PHP имеют  ряд специальных методов (англ. Magic methods), начинающихся с двух символов подчёркивания. Особо стоит отметить конструктор (__construct(), в ранних версиях конструктором служил метод, одноименный с классом) и деструктор (__destruct()), а также методы чтения (__get()) и записи (__set()), свёртывания (__sleep()) и развёртывания (__wake()), клонирования (__clone()) и др. Эти методы являются достаточно гибким инструментом: переопределяя их, можно легко добиться существенного изменения поведения объекта.

Экземпляры  класса создаются с помощью ключевого  слова new, обращение к полям и  методам объекта производится с использованием символов ->. Для доступа к членам класса из его методов используется переменная $this.

1.5.6 Взаимодействие с базами данных (MS SQL)

В дистрибутив PHP входит расширение, содержащее встроенные функции для работы с базой данных SQL [10,11]. Ниже будут описаны основные функции для работы с SQL, которые потребуются для решения задач построения web-интерфейсов с целью отображения и наполнения базы данных. Возникает вопрос, зачем строить такие интерфейсы? Для того чтобы вносить информацию в базу данных и просматривать ее содержимое могли люди, не знакомые с языком запросов SQL. При работе с web-интерфейсом для добавления информации в базу данных человеку нужно просто ввести эти данные в html-форму и отправить их на сервер, а php-скрипт сделает все остальное. А для просмотра содержимого таблиц достаточно просто щелкнуть по ссылке и зайти на нужную страницу.

SQL может применяться в прикладных программах двумя способами: в виде встроенного SQL и интерфейса программирования приложений (Application Program Interface, API). Первый способ напоминает использование PHP - инструкции SQL размещаются среди кода прикладной программы. В настоящий момент такой стиль не поддерживает ни SQL ни PHP. Второй подход заключается в том, что программа взаимодействует с СУБД посредством совокупности функций. Именно такой подход используется при взаимодействии PHP и SQL.

Основные функции для работы с базами данных [12,13]:

mssql_connect 

Синтаксис: int mssql_connect ([string servername [, string username [, string password]]])

Возвращает положительный  идентификатор MS SQL-ссылки при успехе, FALSE при ошибке.

mssql_connect() устанавливает соединение с MS SQL-сервером. Аргумент servername должен быть правильным именем сервера, которое идентифицируется в 'interfaces'-файле.

Если делается второй вызов  mssql_connect() с теми же аргументами, новая ссылка не устанавливается, а возвращается идентификатор уже открытой ссылки.

Ссылка на сервер будет  закрыта сразу по окончании работы скрипта, если не будет закрыта ранее явным вызовом mssql_close().

mssql_close

Синтаксис: int mssql_close ([int link_identifier])

Возвращает TRUE при успехе, FALSE при ошибке.

mssql_close() закрывает ссылку на БД MS SQL Server, ассоциированную со специфицированным идентификатором ссылки/link identifier. Если идентификатор не специфицирован, принимается последняя открытая ссылка.

Заметьте, что  это обычно не нужно, так как непостоянные открытые ссылки закрываются автоматически  по окончании выполнения скрипта.

mssql_close() не закрывает постоянные/persistent ссылки, сгенерированные функцией mssql_pconnect().

mssql_data_seek

Синтаксис: int mssql_data_seek (int result_identifier, int row_number)

Возвращает TRUE при успехе, FALSE при неудаче.

mssql_data_seek() перемещает внутренний  указатель ряда MS SQL-результата, ассоциированного со специфицированным идентификатором результата, указывающего на специфицированный номер ряда. Последующий вызов mssql_fetch_row() должен возвратить этот ряд.

mssql_query

Синтаксис: int mssql_query (string query [, int link_identifier])

Возвращает  положительный результирующий идентификатор MS SQL при успехе, FALSE при ошибке.

mssql_query() отправляет  запрос/query текущей активной БД  на сервере, ассоциированной со  специфицированным идентификатором  ссылки. Если идентификатор не специфицирован, принимается последняя открытая ссылка. Если открытой ссылки нет, функция пытается установить ссылку, как при вызове mssql_connect(), и использует её.

mssql_fetch_array

Синтаксис: int mssql_fetch_array (int result)

Возвращает  массив, соответствующий извлечённому ряду, или FALSE, если рядов больше нет.

mssql_fetch_array() это  расширенная версия mssql_fetch_row(). Помимо  хранения данных в числовых  индексах результирующего массива,  она также сохраняет данные  в ассоциативных индексах, используя имена полей в качестве ключей.

Важно отметить, что mssql_fetch_array() ненамного медленнее, чем mssql_fetch_row(), но предоставляет важное дополнительное значение.

mssql_fetch_field

Синтаксис: object mssql_fetch_field (int result [, int field_offset])

Возвращает  объект, содержащий информацию поля.

mssql_fetch_field() можно  использовать для получения информации  о полях в определённом результате  запроса. Если смещение поля  не специфицировано, запрашивается  следующее поле, которое ещё не  было запрошено функцией mssql_fetch_field().

Вот свойства объекта:

    • name - имя столбца. Если столбец является результатом функции, это свойство получает значение computed#N, где #N это серийный номер.
    • column_source - таблица, из которой был взят столбец.
    • max_length - максимальная длина столбца.
    • numeric - 1, если столбец числовой.

mssql_fetch_object

Синтаксис: int mssql_fetch_object (int result)

Возвращает  объект со свойствами, соответствующий  извлечённому ряду, или FALSE, если рядов  больше нет.

mssql_fetch_object() аналогична mssql_fetch_array(), но с одним отличием - возвращается объект, а не массив. Косвенно это означает, что вы можете получать доступ к данным только именам полей, а не по их смещениям (числа недопустимы как имена свойств).

По скорости работы эта функция идентична mssql_fetch_array() и почти так же быстра, как mssql_fetch_row() (разница несущественна).

mssql_fetch_row

Синтаксис: array mssql_fetch_row (int result)

Возвращает  массив, соответствующий извлечённому ряду, или FALSE, если рядов больше нет.

mssql_fetch_row() извлекает один ряд данных из результата, ассоциированного со специфицированным результирующим идентификатором. Ряд возвращается как массив. Каждый результирующий столбец хранится как смещение массива, начиная со смещения 0.

Последующий вызов mssql_fetch_rows() извлечёт следующий ряд результирующего набора или возвратит FALSE, если рядов больше нет.

mssql_field_seek

Синтаксис: int mssql_field_seek (int result, int field_offset)

Ищет специфицированное  смещение поля. Если последующий вызов mssql_fetch_field() не будет включать смещение поля, будет возвращено это поле.

mssql_free_result

Синтаксис: int mssql_free_result (int result)

mssql_free_result() нужно  вызывать только в том случае, если вас беспокоит слишком  большой расход памяти а процессе работы скрипта. Вся результирующая память по окончании работы скрипта автоматически освобождается. Вы можете вызывать mssql_free_result() с результирующим идентификатором в качестве аргумента, и ассоциированная результирующая память будет освобождена.

mssql_next_result

Синтаксис: bool mssql_next_result (int result_id)

При отправке более одного SQL-оператора серверу или выполнении хранимой процедуры с несколькими  результатами эта функция заставит сервер возвращать несколько результирующих наборов. Эта функция будет тестировать на предмет дополнительных результатов, доступных с сервера. Если дополнительный результирующий набор существует, то существующий результирующий набор будет освобождён и будет подготовлено извлечение рядов нового результирующего набора. Функция возвратит TRUE, если дополнительный результирующий набор был доступен, иначе FALSE.

mssql_num_fields

Синтаксис: int mssql_num_fields (int result)

mssql_num_fields() возвращает количество  полей в результирующем наборе.

mssql_num_rows

Синтаксис: int mssql_num_rows (string result)

mssql_num_rows() возвращает  количество рядов в результирующем  наборе.

mssql_pconnect

Синтаксис: int mssql_pconnect ([string servername [, string username [, string password]]])

Возвращает  положительный идентификатор постоянной MS SQL-ссылки при успехе, FALSE при ошибке.

mssql_pconnect() очень  напоминает mssql_connect(), но есть два  важных отличия.

Во-первых, при  соединении эта функция сначала  пытается найти (постоянную) ссылку/link, уже открытую с теми же host, username и password. Если найдена, возвращается её идентификатор вместо открытия новой ссылки.

Во-вторых, соединение с SQL-сервером не будет закрыто по окончании работы скрипта. Ссылка останется  открытой для последующего использования (mssql_close() не закрывает ссылки, установленные функцией mssql_pconnect()).

Поэтому ссылки этого типа называются 'persistent/постоянные'.

mssql_result

Синтаксис: int mssql_result (int result, int i, mixed field)

mssql_result() возвращает  содержимое ячейки из результирующего  набора MS SQL. Аргумент field может быть смещением поля, именем поля или именем_таблицы.именем_поля (tablename.fieldname). Если создан псевдоним имени столбца ('select foo as bar from...'), используется этот псевдоним вместо имени столбца.

mssql_select_db

Выбор одной  базы данных MSSQL.  Возвращает true при удачном закрытии или false при ошибке.

До того как  послать первый запрос серверу MSSQL, необходимо указать, с какой базой данных мы собираемся работать. Для этого и предназначена данная функция. Она уведомляет, что в дальнейших операциях с соединением link_identifier (или с последним открытым соединением, если указанный параметр не задан) будет использоваться база данных database_name.

Если на момент вызова данной функции подключений  к базе данных нет, то косвенно вызывается функция mssql_connect() с параметрами по умолчанию.

Рассмотренные функции позволяют отправлять SQL-запросы к базе данных и обрабатывать полученные ответы. Используя приведенную выше технологию можно решить целый ряд похожих задач, таких как изменения и удаления данных, задачи манипулирования таблицами базы данных (создание, изменение и удаление) и т.п. Все это типовые задачи, возникающие при разработке систем управления данными, и умение их решать, как и умение работать с базами данных в целом, очень важно для веб-программиста, в частности при создании информационных систем, использующих базы данных.

1.5.7 Недостатки языка

1. Несогласованный синтаксис функций и неортогональность

PHP предоставляет  разработчикам большое количество  самых разнообразных функций, которые попали в язык из расширений, создаваемых разными группами программистов [6]. В результате синтаксис языка не согласован, например, часть функций для работы с массивами начинается с префикса array_, другая часть этим префиксом не обладает. Названия части строковых функций начинается с префикса str, другие функции таким префиксом не обладают. В тех же строковых функциях обрабатываемая строка может передаваться как в качестве первого, так и в качестве последнего аргумента, что требует постоянного обращения к документации. Многие задачи, например разбиение строки на массив или подстроки, решаются неимоверным количеством разнообразных наборов функций. Все это связано с сильным влиянием Perl, в котором неортогональность является частью концепции. Однако PHP задумывался как промышленный и ортогональный язык, и альтернативные наборы функций для решения одних и тех же задач сильно мешают создавать код в едином стиле. К сожалению, проблема скорее всего не будет решена из соображений обратной совместимости.

2. Отсутствие обратной совместимости между версиями языка

Код, созданный  для более ранних версий языка, зачастую не работает или работает некорректно  с более поздними версиями языка. В более поздних версиях исключаются  конструкции, методики, функции, применявшиеся ранее. В результате, приложения, созданные несколько лет назад, практически теряют работоспособность для современных версий языка и требуют значительной модификации. Такие изменения обусловлены двумя факторами: устранение несогласованного синтаксиса и устранение конструкций, поощряющих создание небезопасного кода. Справедливости ради, следует отметить, что отсутствие обратной совместимости вообще характерно для современных интерпретируемых языков.

3. Отсутствие поддержки Unicode в ядре языка

Поддержка Unicode-строк реализуется через расширение mbstring. При этом вместо стандартных функций работы со строками используются аналогичные функции, но с префиксом mb_. Сами строки не хранят информацию о своей кодировке, и её необходимо указывать вручную при вызове функций расширения mbstring. Проблема, скорее всего, будет решена в PHP 6.

4. Отсутствие прямого обращения к возвращаемому массиву

В языке PHP массив, возвращаемый функцией или методом, необходимо предварительно занести  в переменную, чтобы применить оператор […].

Эта проблема, скорее всего, не будет решена, так как PHP, в отличие от других языков программирования, позволяет работать не только с индексными массивами, но и с ассоциативными. Однако PHP поддерживает конструкцию list(), предлагающую концептуально иной способ работы с массивами, предоставляя разработчику возможность поместить элементы массива сразу в переменные.

Тут надо выводы. Итак, произведен обзор… обзор показал, что ничего нам не подходит, надо разработать самим. Для этого мы рассмотрели средства разработки…

 

 

 

 

 

 

 

 

 

 

 

 

Глава 2 Практическая часть

2.1 Постановка  задачи

Необходимо разработать  информационную систему удаленного администрирования серверов онлайн-игр для сервера SW.

Система удаленного администрирования серверов онлайн-игр  должна обеспечивать следующие возможности:

  • блокировка и разблокировка учетных записей пользователей
  • изменение параметров учетных записей и персонажей на них
  • просмотр регистрационной информации об учетных записях
  • просмотр внутриигровой информации о персонажах
  • добавление, удаление, перемещение предметов и изменение их параметров
  • поиск по различным параметрам и маскам
  • применение временных санкций в отношении нарушителей
  • поиск в истории переименований персонажей с отображением предыдущих имён и даты проведения операции по переименованию
  • просмотр серверных логов (записей обо всех действиях пользователей) с разграничением просмотра каждого вида записей в отдельном фрейме
  • выбор даты или периода (в том числе и времени) для загружаемых во фрейм записей
  • выборка по идентификатору действия, количеству, идентификатору типа (класса) предметов из записей действий
  • просмотр записей обо всех действиях с предметом в отдельную дату или период по уникальному идентификатору предмета
  • поиск местонахождения предмета в виртуальном мире по уникальному идентификатору предмета
  • поиск предметов по идентификатору типа (класса) с возможностью поиска по количеству
  • протоколирование всех действий пользователей системы

РЕФЕРАТ.doc

— 29.50 Кб (Просмотреть файл, Скачать файл)

Информация о работе Создание информационной системы удаленного администрирования серверов онлайн-игр для ООО «Мираж»