ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.05.2024

Просмотров: 136

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Функція filesize() кешує результати своєї роботи. Якщо змінити вміст файлу my_file.html і знову запустити приведений вище скрипт, то результат його роботи не зміниться. Більш того, якщо запустити скрипт, що прочитує дані з цього файлу за допомогою іншої функції (наприклад, fgets ), то результат може виявитися таким, неначебто файл не змінився. Щоб цього уникнути, потрібно очистити статичний кеш, додавши в код програми команду clearstatcache() ;

Функція fgets

За допомогою функції fgets() можна зчитувати з файлу рядок тексту. Синтаксис цієї функції практично такий же, як і у fread(), за винятком того, що довжину прочитуваного рядка указувати необов'язково:

string fgets ( вказівник на файл [ довжина])

В результаті роботи функція fgets() повертає рядок завдовжки ( довжина-1 ) байт з файлу, на який указує вказівник на файл. Читання закінчується, якщо прочитано ( довжина-1 ) символів або зустрівся символ перенесення рядка або кінець файлу. Нагадаємо, що в PHP один символ - це один байт. Якщо довжина прочитуваного рядка не вказана (дана можливість з'явилася починаючи з PHP 4.2.0), то прочитується 1 Кбайт (1024 байт) тексту або, що те ж саме, 1024 символи. Починаючи з версією PHP 4.3, якщо параметр довжина не заданий, прочитується рядок цілком. У разі помилки функція fgets() повертає false. Для версій PHP починаючи з 4.3 ця функція безпечна для двійкових файлів.

<?php

$h = fopen("my_file.html","r+"); $content = fgets($h,2);

// зчитує перший символ з першого рядка файлу my_file.html fclose($h);

echo $content; ?>

Приклад 9.5. Використовування функції fgets()

Обидві функції, fread() і fgets(), припиняють прочитування даних з файлу, якщо зустрічають кінець файлу. В PHP є спеціальна функція, перевіряюча, чи досяг вказівник позиції файлу до кінця файлу. Це булева функція feof(), як параметр якій передається вказівник на з'єднання з файлом.

Наприклад, от так можна зччитати всі рядки файлу my_file.html:

<?php

$h = fopen("my_file.html","r"); while (!feof ($h)) {

$content = fgets($h); echo $content,"<br>";

}

fclose($h); ?>

Функція fgetss

Існує різновид функції fgets() - функція fgetss(). Вона теж дозволяє прочитувати рядок з вказаного файлу, але при цьому видаляє з нього все html-теги, що зустрілися, за виключенням деяких. Синтаксис fgetss() такий:

string fgetss(вказвник на файл, довжина [, допустимі теги])

Зверніть увагу, що тут аргумент довжина обов'язковий.

Приклад 9.6. Хай у нас є файл my_file.html наступного змісту:

<h1>Без праці не виймеш і рибку із ставка.</h1>

112


<b>Тихше їдеш - далі будешь</b> У семи няньок<i> дитя без ока</i>.

Виведемо на екран всі рядки файлу my_file.html, видаливши з них все теги, окрім <b> і <i>:

<?php

$h = fopen("my_file.html","r"); while (!feof ($h)) {

$content = fgetss($h,1024,'<b><i>'); echo $content,"<br>";

}

fclose($h); ?>

Приклад 9.6. Використовування функції fgetss()

В результаті роботи цього скрипта одержимо:

Без праці не виймеш і рибку із ставка. Тихше їдеш – далі будеш У семи няньок дитя без ока.

Функція fgetc

Природно, якщо можна прочитувати інформацію з файлу порядково, то можна прочитувати її і посимвольно. Для цього призначена функція fgetc(). Легко здогадатися, що синтаксис у неї наступний:

string fgetc ( вказівник на файл )

Ця функція повертає символ з файлу, на який посилається вказівник на файл, і значення, обчислюване як FALSE, якщо зустрівся кінець рядка.

От так, наприклад, можна зчитати файл по одному символу:

<?php

$h = fopen("my_file.html","r"); while (!feof ($h)) {

$content = fgetc($h); echo $content,"<br>";

}

fclose($h); ?>

Насправді для того, щоб прочитати вміст файлу, відкривати з'єднання з ним за допомогою функції fopen() зовсім не обов'язково. В PHP є функції, які дозволяють робити це, використовуючи лише ім'я файлу. Це функції readfile( ), file( ) і file_get_contents( ). Розглянемо кожну з них докладніше.

Функція readfile

Синтаксис:

int readfile ( ім’я_файлу [, use_include_path])

Функція readfile() прочитує файл, ім'я якого передано їй як параметр ім’я_файлу, і виводить його вміст на екран. Якщо додатковий аргумент use_include_path має значення TRUE, то пошук файлу із заданим ім'ям проводиться і по директоріях, що входять в include_path.

В програму ця функція повертає число зчитаних байтів (символів) файлу, а у разі помилки - FALSE. Повідомлення про помилку в цій функції можна подавити оператором @.

113

Приклад 9.7. Наступний скрипт виведе на екран вміст файлу my_file1.html і розмір цього файлу, якщо він існує. Інакше виведеться наше повідомлення про помилку - рядок "Error in readfile".

<?php

$n = @readfile ("my_file1.html");

/* виводить на екран вміст файлу і записує його розмір в змінну $n */ if (!$n) echo "Error in readfile";

/* якщо функція readfile() виконалася з помилкою, то $n=false і виводимо повідомлення про помилку */

else echo $n;

// якщо помилки не було, то виводимо кількість зчитаних символів

?>

Приклад 9.7. Використовування функції readfile()

За допомогою функції readfile() можна читати вміст віддалених файлів, указуючи їх URL-адресу як ім'я файлу, якщо ця опція не відключена в настройках серверу.

Зразу ж виводити вміст файлу на екран не завжди зручно. Деколи потрібно записати інформацію з файлу в змінну, щоб надалі провести з нею які-небудь дії. Для цього можна використовувати функцію file() або file_get_contents().

Функція file

Функція file() призначена для прочитування інформації з файлу в змінну типу масив. Синтаксис у неї такий же, як і у функції readfile(), за винятком того, що в результаті роботи вона повертає масив:

array file ( string $filename [, int $flags = 0 [, resource $context ]] )

Що за масив повертає ця функція? Кожний елемент даного масиву є рядком у файлі, інформацію з якого ми прочитуємо (його ім'я задано аргументом ім’я_файлу ). Символ нового рядка теж включається в кожний з елементів масиву. У разі помилки функція file(), як і всі вже розглянуті, повертає false. Додатковий аргумент use_include_path знову ж таки визначає, шукати чи ні даний файл в директоріях include_path. Відкривати віддалені файли за допомогою цієї функції теж можна, якщо не заборонено сервером.

Наприклад, у нас є файл my_file.html наступного змісту:

<h1>Без праці не виймеш і рибку із ставка.</h1> <b>Тише їдеш - далі будешь</b>

Прочитаємо його вміст за допомогою функції file():

<?php

$arr = file ("my_file.html"); foreach($arr as $i => $a) echo $i,": " htmlspecialchars($a), "<br>";

?>

В результаті на екран буде виведено наступне повідомлення:

0:<h1>Без праці не виймеш і рибку із ставка.</h1>

1:<b>Тише їдеш - далі будешь</b>

Функція file_get_contents

4 Перевірка існування файлу

Отже, створювати файл ми навчилися, записувати дані в нього - навчилися, прочитувати дані з файлу - теж навчилися. Але питання: а що коли файлу, з яким ми намагаємося виконати всі ці операції, не існує? Або він неприступний для читання або запису? Очевидно, що у такому разі жодна з вивчених нами функцій працювати не буде і

114


PHP видасть повідомлення про помилку. Щоб відстежувати такого роду помилки, можна використовувати функції file_exists(), is_writable(), is_readable().

Функція file_exists

Синтаксис:

bool file_exists (ім'я файлу або директорії)

Функція file_exists() перевіряє, чи існує файл або директорія, ім'я якої передано їй як аргумент. Якщо директорія або файл у файловій системі серверу існує, то функція повертає TRUE, інакше - FALSE. Результат роботи цієї функції кешується. Відповідно очистити кеш можна, як вже наголошувалося, за допомогою функції clearstatcache(). Для нелокальних файлів використовувати функцію file_exists() не можна.

<?php

$filename = 'c:/users/files/my_file.html'; if (file_exists($filename)) {

print "Файл <b>$filename</b> існує"; } else {

print "Файл <b>$filename</b> Не існує";

}

?>

Приклад 9.8. Використовування функції file_exists()

Функція is_writable

Якщо окрім перевірки існування файлу потрібно взнати ще, чи дозволено записувати інформацію в цей файл, слід використовувати функцію is_writable() або її псевдонім - функцію is_writeable().

Синтаксис:

bool is_writable (ім'я файлу або директорії)

Ця функція повертає TRUE, якщо файл (або директорія) існує і доступний для запису. Доступ до файлу здійснюється під тим обліковим записом користувача, під яким працює сервер (частіше всього це користувач nobody або www). Результати роботи функції is_writable кешуються.

Функція is_readable

Якщо окрім перевірки існування файлу потрібно взнати ще, чи дозволено читати інформацію з нього, потрібно використовувати функцію is_readable().

Синтаксис:

bool is_readable (ім'я файлу)

Ця функція працює подібно функції is_writable().

<?php

$filename = 'c:/users/files/my_file.html'; if (is_readable($filename)) {

print "Файл <b>$filename</b> існує і доступний для читання";

} else {

print "Файл <b>$filename</b> Не існує або Не доступний для читання";

}

?>

115

Приклад 9.9. Використовування функції is_readable()

5 Видалення файлу

Останнє, що ми хочемо вивчити з дій над файлами, - це видалення файлів. Для того, щоб видалити файл за допомогою мови PHP, потрібно скористатися функцією unlink(). Синтаксис цієї функції можна описати таким чином:

bool unlink ( ім’я_файлу)

Дана функція видаляє файл, що має ім'я ім’я_файлу, повертає TRUE у разі успіху цієї операції і FALSE - у разі помилки. Щоб видалити файл, потрібно теж мати відповідні права доступу до нього (наприклад, доступу тільки на читання для видалення файлу недостатньо).

<?php

$filename = 'c:/users/files/my_file.html'; unlink($filename);

// видаляємо файл з ім'ям с:/users/files/my_file.html

?>

Приклад 9.10. Використовування функції unlink()

6 Завантаження файлу на сервер

Тепер вирішимо складнішу і часто виникаючу на практиці задачу завантаження файлу на сервер. Перше, що потрібно зробити, щоб завантажити файл на сервер, це створити html-форму. Для того, щоб за допомогою цієї форми можна було завантажувати файли, вона повинна містити атрибут enctype в тегу form із значенням multipart/form-data, а також елемент input типу file.

Приклад 9.11.

<form enctype="multipart/form-data" action="parse.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> Загрузить файл: <input type="file" name="myfile" /><br>

<input type="submit" value="Отправить файл" />

</form>

Приклад 9.11. Форма для завантаження файлу на сервер

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

Мал. 9.1. Приклад форми для завантаження файлу на сервер

Тепер потрібно написати скрипт, який оброблятиме одержаний файл.

Вся інформація про завантажений на сервер файл міститься в глобальному масиві $_FILES. Цей масив з'явився починаючи з PHP 4.1.0. Якщо включена директива register_globals, то значення переданих змінних доступні просто по їх іменах.

Якщо ми завантажили з комп'ютера-клієнта файл з ім'ям critics.htm розміром 15136 байт, то скрипт з єдиною командою print_r($_FILES); виведе на екран наступне:

116


Array ( [myfile] => Array ( [name] => critics.htm [type] => text/html

[tmp_name] => С:\WINDOWS\TEMP\php49F.tmp [error] => 0

[size] => 15136

)

)

Взагалі кажучи, масив $_FILES завжди має наступні елементи:

$_FILES['myfile']['name'] - ім'я, яке мав файл на машині клієнта.

$_FILES['myfile']['type'] - mime-тип відправленого файлу, якщо браузер надав цю інформацію. В нашому прикладі це text/html.

$_FILES['myfile']['size'] - розмір завантаженого файлу в байтах.

$_FILES['myfile']['tmp_name'] - тимчасове ім'я файлу, під яким він був збережений на сервері.

$_FILES['myfile']['error'] - код помилки, що з'явилася при завантаженні.

Тут 'myfile' - це ім'я елемента форми, за допомогою якого була проведено завантаження файлу на сервер. Тобто воно може бути іншим, якщо елемент форми назвати інакше. Але інші ключі ( name, type і т. д.) залишаються незмінними для будь-якої форми.

Якщо register_globals=On, то доступні також додаткові змінні, такі як $myfile_name, яка еквівалентна $_FILES['myfile']['name'], і т.п.

Помилок при завантаженні в PHP виділяють п'ять типів і відповідно $_FILES['myfile']['error'] може мати п'ять значень:

0 - помилки не відбулося, файл завантажений успішно

1 - завантажуваний файл перевищує розмір, встановлений директивою upload_max_filesize у файлі настройок

php.ini

2- завантажуваний файл перевищує розмір, встановлений елементом MAX_FILE_SIZE форми html

3- файл був завантажений частково

4- файл завантажений не був

117

10. Лекція:

Тема: Бази даних і СУБД. Введення в SQL

Мета: В лекції розглядаються поняття бази даних і СУБД, дається короткий опис існуючих типів баз даних (мережні, реляційні, ієрархічні). Розглядаються основи язика запитів SQL: операції вибору, додавання, зміни і видалення рядка, а також операції створення, зміни і видалення таблиці. База даних MySql. Використовування PhpMyAdmin для взаємодії з базою даних MySql. Обговорюються основні принципи відображення об'єктної моделі документа на реляційну структуру бази даних.

1.Поясніть механізми роботи функції відкриття файлів.

2.Що повертає ця функція в результаті роботи?

3.Що визначає параметр тип доступу? Які значення він може приймати?

4.Що відбудеться, якщо файл відкрити неможливо?

5.Яким чином можна закрити зєднання з файлом? Навіщо це робити?

6.Які засоби запису даних до файлу існують в мові РНР?

7.Опишіть механізми роботи функції fwrite().

8.Яким чином можна отримати дані з файлу?

9.Опишіть механізм роботи функції fread().

10.Опишіть механізм роботи функції filesize().

11.Опишіть механізм роботи функції fgets().

12.Опишіть механізм роботи функції fgetss().

13.Опишіть механізм роботи функції fgetc().

14.Опишіть механізм роботи функції readfile().

15.Опишіть механізм роботи функції file().

16.Яким чином можна програмно перевірити існування файлу?

17.Опишіть механізми роботи названих функцій.

ПЛАН

1 Бази даних: основні поняття

2Ключі

3Індексація

5 Язик SQL

6 Основні оператори язика SQL

7 Оператор SELECT

8 Оператор INSERT

9 Оператор UPDATE

10 Оператор DELETE

В даній лекції ми розглянемо основні поняття теорії баз даних і познайомимо читачів з системою управління базами даних MySql, способами роботи з нею, її особливостями і реалізацією язика запитів SQL в цій СУБД. В основі прикладів, що наводяться в лекції, лежить інформаційна модель віртуального музею історії інформатики. Ця модель є набір колекцій опису історичних осіб, експонатів музею (артефактів), статі і зображень.

1 Бази даних: основні поняття

118


Вжитті ми часто стикаємося з необхідністю зберігати яку-небудь інформацію, а тому часто маємо справу і з базами даних. Наприклад, ми використовуємо записник для зберігання номерів телефонів своїх друзів і планування свого часу. Телефонна книга містить інформацію про людей, що живуть в одному місті. Все це свого роду баз даних. Ну а раз це бази даних, то подивимося, як в них зберігаються дані. Наприклад, телефонна книга є таблицею (табл. 10.1).

Вцій таблиці дані – це власне номери телефонів, адреси і ПІБ., тобто рядки "Іванов Іван Іванович", "32-43-12" і т.п., а назви стовпців цієї таблиці, тобто рядки "ПІБ", "Номер телефону" і "Адреса" задають значення цих даних, їх семантику.

Таблиця 10.1. Приклад бази даних: телефонна книга

ПІБ

Номер телефонуАдреса

Іванов Іван Іванович

32-43-12

вул. Леніна, 12, 43

Ільін Федір Іванович

32-32-34

пр. Маркса, 32, 45

Тепер уявіть, що записів в цій таблиці не два, а дві тисячі, ви займаєтеся створенням цього довідника і десь відбулася помилка (наприклад, друкарська помилка в адресі). Мабуть, буде важкувато знайти і виправити цю помилку вручну. Потрібно скористатися якимись засобами автоматизації. Для управління великою кількістю даних програмісти (не без допомоги математиків) придумали системи управління базами даних (СУБД). В порівнянні з текстовими базами даних електронні СУБД мають величезне число переваг, від можливості швидкого пошуку інформації, взаємозв'язку даних між собою до використовування цих даних в різних прикладних програмах і одночасного доступу до даних декількох користувачів.

Для точності дамо визначення бази даних, пропоноване Глоссарій.ру

База даних – це сукупність зв'язаних даних, організованих за певними правилами, що передбачають загальні принципи опису, зберігання і маніпулювання, незалежна від прикладних програм. База даних є інформаційною моделлю наочної області. Звернення до баз даних здійснюється за допомогою системи управління базами даних (СУБД). СУБД забезпечує підтримку створення баз даних, централізованого управління і організації доступу до них різних користувачів.

Отже, ми прийшли до висновку, що зберігати дані незалежно від програм, так, що вони зв'язані між собою і організовані за певними правилами, доцільно. Але питання, як зберігати дані, за якими правилами вони повинні бути організовані, залишився відкритим. Способів існує множина (до речі, називаються вони моделями уявлення або зберігання даних). Найпопулярніші – об'єктна і реляційна моделі даних.

Автором реляційної моделі вважається Е. Кодд, який першим запропонував використовувати для обробки даних апарат теорії множин (об'єднання, перетин, різниця, декартовий добуток) і показав, що будь-яке представлення даних зводиться до сукупності двовимірних таблиць особливого вигляду, відомого в математиці як відношення.

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

Приклади реляційних СУБД: MySql, PostgreSql.

В основу об'єктної моделі встановлена концепція об'єктно-орієнтованого програмування, в якій дані представляються у вигляді набору об'єктів і класів, зв'язаних між собою спорідненими відносинами, а робота з об'єктами здійснюється за допомогою прихованих (інкапсульованих) в них методів.

Приклади об'єктних СУБД: Cache, GemStone (від Servio Corporation), ONTOS (ONTOS).

Останнім часом виробники СУБД прагнуть з'єднати два ці підходи і проповідують об'єктно-реляційну модель представлення даних. Приклади таких СУБД – IBM DB2 for Common Servers, Oracle8.

Оскільки ми збираємося працювати з Mysql, то обговорюватимемо аспекти роботи тільки з реляційними базами даних. Нам залишилося розглянути ще два важливі поняття з цієї області: ключі і індексація, після чого ми зможемо приступити до вивчення язика запитів SQL.

119