з даним вузлом. У п’ятій версії інтерпретатора РНР було вдосконалено засоби для написання об’єктно-орієнтованих сценаріїв, а саме повністю реалізована підтримка розділення доступу до даних, абстрактні класи, інтерфейси.
Переносимість. Проблема переносимості полягає в тому, наскільки просто програма, написана для роботи з одним механізмом СУБД MySQL, може бути змінена для використання з іншим механізмом. Це може і не цікавити розробника програми, але висловлювання про те, що ця програма ніколи не буде використовуватися ні з якоюсь іншою базою даних, крім СУБД MySQL, не може не відображати об’єктивної реальності. Припустимо, що ви поміняли роботу і хочете використати свої старі напрацювання, але новий начальник використовує іншу СУБД.
Якщо одним із головних пріоритетів є переносимість, то необхідно чітко розуміти різницю між АРІ.
Інтерфейс DBI забезпечує максимальну переносимість тому, що при його розробці чітко ставилось таке завдання.
Інтерфейс мови РНР менш переносимий тому, що він не забезпечує такий же уніфікований інтерфейс для різних механізмів баз даних, як це робить інтерфейс DBI. Виклик функції мови РНР для кожної підтримуваної бази даних має тенденцію повторювати аналогічну в інтерфейсі нижнього рівня С АРІ. Має місце деяке згладжування різновидностей, але, як мінімум вам прийдеться змінити назви функцій, які здійснюють зв’язок з базами даних. Можливо, необхідно буде дещо змінити логіку програми, так як не завжди інтерфейси різних баз даних працюють аналогічним чином.
Інтерфейс С АРІ забезпечує саму нижчу переносимість між базами даних. На початку він був розроблений для роботи з СУБД MySQL.
2.3.3 Інтерфейс АРІ для мови написання сценаріїв РНР
Мова РНР є мовою для написання Web-сторінок, код яких виконується, коли здійснюється доступ до сторінки. Крім цього цей код в змозі генерувати динамічні Web-сторінки, як частина відправленого результату у Web-браузер клієнта. Як було зазначено в розділі 2.3.1, мова РНР якнайліпше підходить для реалізації мети даної роботи.
Основним завданням мови РНР є інтерпретація сценарію для генерації Web-сторінки, яка відсилається програмі-клієнту. Сценарій складається з суміші HTML-коду, який відсилається в літеральному вигляді, і РНР-коду, який виконується як програма.
Почавши зчитування файлу, РНР просто копіює його зміст з припущенням, що весь файл являє собою літеральний HTML. Коли інтерпретатор РНР знаходить в тексті тег відкриття, він перемикається з режиму HTML на режим коду РНР і, починає інтерпретувати файл як виконуваний код РНР. Зустрівши тег закриття інтерпретатор перемикається у вихідне положення. Це дозволяє об’єднувати статичний HTML-текст і динамічно генеруємі результати.
Для роботи з СУБД MySQL використовуються наступні функції:
int mysql_connect ([string host_name][,string user_name][, string password]); Функція призначена для встановлення з’єднання з сервером host_name, для користувача user_name, із заданим паролем password. У випадку помилки функція повертає результат false.
int mysql_select_db (string db_name [, int link_id]); Вибирає вказану базу даних, в якості бази даних, яка встановлюється по замовчуванню. У випадку невдалого завершення роботи функції повертається результат false.
int mysql_query (string query [, int link_id]); Відправляє рядок запиту до сервера MySQL для заданого з’єднання. У випадку неможливості виконати заданий рядок запиту функція повертає значення false.
array mysql_fetch_row (int result_id); Повертає рядок заданого результуючого набору у вигляді масиву або значення false, якщо рядків більше не залишилось.
Це одні з основних функцій РНР для роботи з СУБД MySQL.
Для надання програмі більшої гнучкості в алгоритмах використовується спеціальний проміжний інтерфейс для зв’язку з базою даних. Даний прийом подібний до вище описаного інтерфейсу DBI, що використовується в Perl. При використанні даного прийому перехід на нову СУРБД відбувається значно простіше, необхідно, лише написати відповідний абстрактний модуль для зв’язку із відповідною системою управління базами даних. Так як всі звернення до бази даних відбуваються через проміжний модуль, можна дуже просто реєструвати всі звернення до бази даних, дана можливість є особливо важливою для забезпечення контролю роботи адміністраторів системи.
Тестування системи проводилось з використанням інтерпретатора PHP версії 4.3.0. Слід зауважити, що система також успішно працює під управлінням PHP 5.x (PHP 5.0.0 RC2, PHP 5.2.2). При необхідності можна переписати модуль зв’язку із базою даних, для того, щоб можна було використовувати вбудовані засоби у РНР, а саме клас PEAR DB, або нововведення в РНР 5 – PDO (PHP Data Objects), щось на зразок ADO – ActiveX Data Objects.
3 РОЗРОБКА СИСТЕМИ ДИСТАНЦІЙНОГО ДІАГНОСТУВАННЯ РІВНЯ ЗНАНЬ СТУДЕНТІВ
3.1 Аналіз необхідного програмного забезпечення
Для написання програмного коду автоматизованої системи використовується наступне програмне забезпечення:
Таблиця 3.1 – Програмне забезпечення
Назва | Версія
Apache Web Server | 1.3.11
PHP Module | 4.3.0
MySQL Server and Clients | 3.23.54
Zend Studio (ZDE) | 3.5.1 Plus
MySQL Turbo Manager | 3.3.1.7
Sybase Power Designer | 10.0.0.1077
Робота системи була перевірена у програмах Інтернет-навігаторах: Microsoft Internet Explorer 6.0 SP1, Opera 7.0/8.0/8.51/9.0, Mozilla 1.7.6, Mozilla FireFox 1.0.2/1.5/2.0, Netscape Navigator 7.0.
3.2 Розробка структури системи
Етап проектування структури системи є одним із найважливішим через те, що саме на цьому етапі вирішуються задачі, які мають виконуватися кожною із підсистем, а також зв’язки між підсистемами і специфікою руху інформаційних потоків. На рисунку 3.1 наведена схема зв’язків системи із зовнішнім середовищем. В якості зовнішнього середовища виступають особи, що мають доступ до роботи із системою.
Рисунок 3.1 – Структура зовнішніх зв’язків системи
Рисунок 3.2 – Структура директорій web-вузла
Складною задачею є синтез самої системи. Складність полягає в тому, що необхідно врахувати якомога більше всіх можливих зв’язків. Структура системи також повинна забезпечувати можливість її масштабування в подальшому.
Також важливою є задача правильного розділення файлів із програмним кодом по директоріям. На