Автор работы: Пользователь скрыл имя, 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 Расчет годового экономического эффекта и периода окупаемости
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
['name'] — исходное
имя файла на компьютере
['type'] — указанный
агентом пользователя MIME-тип файла.
PHP не проверяет его и поэтому
нет никаких гарантий что
['size'] — размер файла в байтах.
['tmp_name'] — полный
путь к файлу во временной
папке. Файл необходимо
['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 поддерживает
широкие объектно-
Класс в 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_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_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_next_result
Синтаксис: bool mssql_next_result (int result_id)
При отправке более одного
SQL-оператора серверу или
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]]])
Возвращает
положительный идентификатор
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() возвращает
содержимое ячейки из
mssql_select_db
Выбор одной базы данных MSSQL. Возвращает true при удачном закрытии или false при ошибке.
До того как послать первый запрос серверу MSSQL, необходимо указать, с какой базой данных мы собираемся работать. Для этого и предназначена данная функция. Она уведомляет, что в дальнейших операциях с соединением link_identifier (или с последним открытым соединением, если указанный параметр не задан) будет использоваться база данных database_name.
Если на момент вызова данной функции подключений к базе данных нет, то косвенно вызывается функция mssql_connect() с параметрами по умолчанию.
Рассмотренные функции позволяют отправлять SQL-запросы к базе данных и обрабатывать полученные ответы. Используя приведенную выше технологию можно решить целый ряд похожих задач, таких как изменения и удаления данных, задачи манипулирования таблицами базы данных (создание, изменение и удаление) и т.п. Все это типовые задачи, возникающие при разработке систем управления данными, и умение их решать, как и умение работать с базами данных в целом, очень важно для веб-программиста, в частности при создании информационных систем, использующих базы данных.
1.5.7 Недостатки языка
1. Несогласованный синтаксис функций и неортогональность
PHP предоставляет
разработчикам большое
2. Отсутствие обратной совместимости между версиями языка
Код, созданный
для более ранних версий языка, зачастую
не работает или работает некорректно
с более поздними версиями языка.
В более поздних версиях
3. Отсутствие поддержки Unicode в ядре языка
Поддержка Unicode-строк реализуется через расширение mbstring. При этом вместо стандартных функций работы со строками используются аналогичные функции, но с префиксом mb_. Сами строки не хранят информацию о своей кодировке, и её необходимо указывать вручную при вызове функций расширения mbstring. Проблема, скорее всего, будет решена в PHP 6.
4. Отсутствие прямого обращения к возвращаемому массиву
В языке PHP массив, возвращаемый функцией или методом, необходимо предварительно занести в переменную, чтобы применить оператор […].
Эта проблема, скорее всего, не будет решена, так как PHP, в отличие от других языков программирования, позволяет работать не только с индексными массивами, но и с ассоциативными. Однако PHP поддерживает конструкцию list(), предлагающую концептуально иной способ работы с массивами, предоставляя разработчику возможность поместить элементы массива сразу в переменные.
Тут надо выводы. Итак, произведен обзор… обзор показал, что ничего нам не подходит, надо разработать самим. Для этого мы рассмотрели средства разработки…
Глава 2 Практическая часть
2.1 Постановка задачи
Необходимо разработать информационную систему удаленного администрирования серверов онлайн-игр для сервера SW.
Система удаленного администрирования серверов онлайн-игр должна обеспечивать следующие возможности: