fopen ()

Функція fopen

Взагалі кажучи, в PHP не існує функції, призначеної саме для створення файлів. Більшість функцій працюють з вже існуючими файлами в файловій системі сервера. Є кілька функцій, які дозволяють створювати тимчасові файли, або, що те ж саме, файли з унікальним для поточної директорії імені. А от для того, щоб створити самий звичайний файл, потрібно скористатися функцією, яка відкриває локальний або віддалений файл. Називається ця функція fopen (). Що значить «відкриває файл»? Це означає, що fopen пов'язує цей файл з потоком управління програми. Причому зв'язування буває різним в залежності від того, що ми хочемо робити з цим файлом: читати його, записувати в нього дані або робити і те й інше. Синтаксис цієї функції такий:

resource fopen (ім'я_файлу, тип_доступу
[, Use_include_path])

У результаті роботи ця функція повертає покажчик (типу ресурс) на відкритий нею файл. В якості параметрів цієї функції передаються: ім'я файлу, який потрібно відкрити, тип доступу до файлу (визначається тим, що ми збираємося робити з ним) і параметр, що визначає, чи шукати вказаний файл у include_path. Є ще один параметр, але про нього ми говорити не будемо, щоб не ускладнювати виклад. Обговоримо докладніше кожен з цих трьох параметрів.

Параметр ім'я_файлу повинен бути рядком, що містить правильне локальне ім'я файлу або URL-адресу файлу в мережі. Якщо ім'я файлу починається з вказівки протоколу доступу (наприклад, http:// ... або ftp:// ...), то інтерпретатор вважає це ім'я адресою URL і шукає обробник зазначеного в URL протоколу. Якщо обробник знайдений, то PHP перевіряє, чи дозволено працювати з об'єктами URL як зі звичайними файлами (директива allow_url_fopen). Якщо allow_url_fopen = off, то функція fopen викликає помилку і генерується попередження. Якщо ім'я файлу не починається з протоколу, то вважається, що зазначено ім'я локального файлу. Для відкриття локального файлу, потрібно, щоб PHP мав відповідні права доступу до цього файлу.

Параметр use_include_path, встановлений в значення 1 або TRUE, змушує інтерпретатор шукати зазначений в fopen () файл у include_path. Нагадаємо, що include_path - це директива з файлу налаштувань PHP, що задає список директорій, в яких можуть знаходитися файли для включення. Крім функції fopen () вона використовується функціями include () і require ().Параметр use_include_path, встановлений в значення 1 або TRUE, змушує інтерпретатор шукати зазначений у fopen () файл у include_path. Нагадаємо, що include_path - це директива з файлу налаштувань PHP, що задає список директорій, в яких можуть знаходитися файли для включення. Крім функції fopen () вона використовується функціями include () і require ().

Параметр тип_доступу може приймати одне з наступних значень:

 

 

Тип доступу

Опис

r

Відкриває файл тільки для читання; встановлює вказівник позиції у файлі на початок файлу.

r +

Відкриває файл для читання і запису; встановлює вказівник файлу на його початок.

w

Відкриває файл тільки для запису; встановлює вказівник файлу на його початок і обрізає файл до нульової довжини. Якщо файл не існує, то намагається створити його.

w +

Відкриває файл для читання і запису; встановлює вказівник файлу на його початок і обрізає файл до нульової довжини. Якщо файл не існує, то намагається створити його.

a

Відкриває файл тільки для запису; встановлює вказівник файлу в його кінець. Якщо файл не існує, то намагається створити його.

a +

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

x

Створює і відкриває файл тільки для запису; поміщає вказівник файлу на його початок. Якщо файл вже існує, то fopen () повертає false і генерується попередження. Якщо файл не існує, то робиться спроба створити його. Цей тип доступу підтримується починаючи з версії PHP 4.3.2 і працює тільки з локальними файлами.

x +

Створює і відкриває файл для читання і запису; поміщає вказівник файлу на його початок. Якщо файл вже існує, то fopen () повертає false і генерується попередження. Якщо файл не існує, то робиться спроба створити його. Цей тип доступу підтримується, починаючи з версії PHP 4.3.2, і працює тільки з локальними файлами.

Отже, щоб створити файл, потрібно, як би безглуздо це не звучало, відкрити неіснуючий файл на запис.

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

<? Php
$h = fopen ("my_file.html", "w");
/* Відкриває на запис файл my_file.html,
якщо він існує, або створює порожній
файл з таким ім'ям, якщо його ще немає */
$h = fopen ("dir / another_file.txt", "w +");
/* Відкриває на запис і читання або створює
файл another_file.txt в директорії dir */
$h = fopen ("Http://www.server.ru/dir/file.php", "r");
/* Відкриває на читання файл, що знаходиться за
вказаною адресою */
?>