- •Передмова
- •1 Вступ
- •1.1 Поняття Web-сервісу
- •1.2 Архітектура Web-серверів
- •1.3 Мова php
- •1.4 Основи html
- •1.5 Поняття url-адреси
- •1.6 MySql - субд для Інтернету
- •1.7 Інтеграція сценаріїв з базами даних
- •2 Інтеграція php з Web-сторінками
- •Використання php.
- •Додавання динамічного вмісту.
- •Доступ до змінних форми.
- •2.1 Використання php
- •2.2 Вбудовування php в html
- •2.4 Доступ до змінних форми
- •3 Основний синтаксис рнр
- •3.1 Базовий синтаксис
- •3.2 Типи даних
- •3.3 Константи
- •3.4 Операції
- •3.5 Керуючі структури
- •4 Зберігання та відновлення даних
- •Огляд обробки файлів.
- •Інші файлові функції.
- •Блокування файлів.
- •4.1 Огляд обробки файлів
- •4.2 Відкриття файлів
- •4.3 Читання з файлів і запис у файли
- •4.4 Інші файлові функції
- •Блокування файлів
- •5 Використання масивів
- •Асоціативні масиви.
- •Сортування масивів.
- •Інші функції обробки масивів.
- •Чисельно індексовані масиви
- •Асоціативні масиви
- •Багатомірні масиви
- •Сортування масивів
- •Інші функції обробки масивів
- •6 Багатократне використання коду та створення функцій
- •Завантаження шаблонів.
- •Використання функцій у рнр.
- •Область дії.
- •6.1 Шаблони Web- Сайту
- •6.2 Завантаження шаблонів
- •6.3 Використання функцій у рнр
- •6.4 Область дії
- •7 Об'єктно-орієнтоване програмування на рнр
- •7.1 Принципи ооп
- •7.2 Класи й об'єкти
- •7.3 Створення класів та екземплярів класів
- •7.4 Написання коду класу
- •7.5 Поліморфізм
- •7.6 Спадкування
- •8 Проектування баз даних для використання в Web
- •Концепції реляційних баз даних.
- •Архітектура баз даних для Web.
- •Система повноважень MySql.
- •8.1 Концепції реляційних баз даних
- •8.2 Проектування баз даних для Web
- •8.3 Архітектура баз даних для Web
- •8.4 Створення баз даних користувачів
- •8.5 Система повноважень MySql
- •9 Доступ до бази даних MySql з Web за допомогою рнр
- •Встановлення з'єднання.
- •Отримання результату запита.
- •9.1 Встановлення з'єднання
- •9.2 Вибір бази даних
- •9.3 Отримання результату запита
- •9.4 Інші php-інтерфейси роботи з базами даних
- •10 Додаткові можливості MySql
- •Забезпечення безпеки баз даних MySql.
- •Одержання додаткової інформації про бази даних.
- •Оптимізація проектування.
- •10.1 Забезпечення безпеки баз даних MySql
- •10.2 Одержання додаткової інформації про бази даних
- •10.3 Оптимізація проектування
- •Резервне копіювання баз MySql
- •Список літератури
-
Блокування файлів
Уявіть собі ситуацію, коли два клієнти одночасно намагаються замовити товар. (Ця ситуація виникає не настільки вже рідко, особливо коли Web-сайт починає обробляти значні інформаційні потоки.) Що відбудеться, якщо один клієнт викличе функцію fopen() і почне запис, а потім другий клієнт також викличе функцію fopen() і теж спробує виконати запис? Яким у результаті буде вміст файлу? Чи буде спочатку записане перше замовлення, а потім друге, або навпаки? Чи буде записане перше замовлення або друге? Або ж уміст буде являти собою щось менш корисне, на зразок двох довільно, що чергуються замовлень? Відповідь на ці питання залежить від конкретної використовуваної операційної системи, але часто точно відповісти на них неможливо.
Щоб уникнути подібних проблем використовується блокування файлів. У РНР блокування реалізується за допомогою функції flock(). Ця функція повинна викликатися після відкриття файлу, але перед зчитуванням даних з файлу або їхнім записом у файл.
Прототип функції flock() виглядає так:
bool flock (іnt fp , іnt operatіon);
У функцію необхідно передати покажчик на відкритий файл і число, що представляє вид необхідного блокування. Функція повертає значення true, якщо блокування було успішно виконане, і false - у противному випадку.
Можливі значення параметра operatіon:
1 Блокування читання. Це означає, що файл може використовуватися разом з іншими читаючими додатками.
2 Блокування запису. Це монопольний режим. Файл не доступний для спільного використання.
3 Зняття існуючого блокування.
4 Додавання до поточного значення параметра operatіon запобігає іншим спробам блокування під час виконання поточного блокування.
Якщо вирішено використовувати функцію flock(), її варто включити в усі сценарії, у яких використовується даний файл; у противному випадку її застосування позбавлене змісту.
Приклад:
$fp = fopen("$DOCUMENT_ROOT/../orders/orders.txt", "a", 1);
flock($fp, 2); // блокування файлу для запису
fwrіte($fp, $outputstrіng);
flock($fp, 3); // зняття блокування запису
fclose($fp);
Варто також додати блокування у файл vіeworders.php:
$fp = fopen("$DOCUMENT_ROOT/../orders/orders.txt", "r");
flock($fp, 1); // блокування файлу для читання
// читання з файлу
flock($fp, 3); // зняття блокування запису
fclose($fp);
Що відбудеться, якщо два сценарії спробують одночасно виконати блокування? Це привело б до конфлікту, коли процеси суперничають за установку блокування, але не відомо, якому з них це вдасться, що, у свою чергу, могло б породити нові проблеми.
5 Використання масивів
У лекції розглядаються такі питання:
-
Числово-індексовані масиви.
-
Асоціативні масиви.
-
Багатовимірні масиви.
-
Сортування масивів.
-
Інші функції обробки масивів.
Використання масивів
Масив - це змінна, у якій зберігається набір, або послідовність, значень. Один масив може містити багато елементів. Кожний елемент може містити єдине значення, таке як текст або число, або інший масив.
Масив, що містить інші масиви, називається багатомірним масивом. РНР підтримує як чисельно індексовані, так і асоціативні масиви. Асоціативні масиви дозволяють використовувати значення, які знаходять більше широке застосування, чим індекси. Замість чисельних індексів кожний елемент такого масиву може мати слова або іншу корисну інформацію.
Скалярна змінна - це іменована комірка пам'яті, у якій зберігається значення; за аналогією, масив - це іменована комірка пам'яті, у якій зберігається набір значень, що дозволяє групувати звичайні скалярні значення.
Значення, що зберігаються в масиві, називаються елементами масиву. Кожний елемент масиву має пов'язаний з ним індекс (називаний також ключем), що використовується для доступу до елемента.