Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 Курс / переподы / анал / Освянко / Конспект.doc
Скачиваний:
0
Добавлен:
30.05.2020
Размер:
655.36 Кб
Скачать
    1. Блокування файлів

Уявіть собі ситуацію, коли два клієнти одночасно намагаються замовити товар. (Ця ситуація виникає не настільки вже рідко, особливо коли 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 Використання масивів

У лекції розглядаються такі питання:

    1. Числово-індексовані масиви.

    2. Асоціативні масиви.

    3. Багатовимірні масиви.

    4. Сортування масивів.

    5. Інші функції обробки масивів.

Використання масивів

Масив - це змінна, у якій зберігається набір, або послідовність, значень. Один масив може містити багато елементів. Кожний елемент може містити єдине значення, таке як текст або число, або інший масив.

Масив, що містить інші масиви, називається багатомірним масивом. РНР підтримує як чисельно індексовані, так і асоціативні масиви. Асоціативні масиви дозволяють використовувати значення, які знаходять більше широке застосування, чим індекси. Замість чисельних індексів кожний елемент такого масиву може мати слова або іншу корисну інформацію.

Скалярна змінна - це іменована комірка пам'яті, у якій зберігається значення; за аналогією, масив - це іменована комірка пам'яті, у якій зберігається набір значень, що дозволяє групувати звичайні скалярні значення.

Значення, що зберігаються в масиві, називаються елементами масиву. Кожний елемент масиву має пов'язаний з ним індекс (називаний також ключем), що використовується для доступу до елемента.

Соседние файлы в папке Освянко