PHP: робота з файлами

Зміст

Жорсткі і символічні посилання

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

Посилання на файл у Linux — це покажчик на файл, аналог ярлика ОС Windows. Звертаючись за таким посиланням, ви звернетеся до цього файлу незалежно від того, де розташоване посилання. Посилання в Linux бувають двох типів: символічні і жорсткі.

Символічна посилання (symbolic link) — це спеціальний файл, який є посиланням на інший файл (у тому числі й теку, їх називають цільовим файлом та цільовою текою). Символічні посилання також називають м'якими посиланнями (soft links) або сім-посиланнями (sym-link).

Схематично відношення між символічним посиланням, файлом і даними файлу можна показати таким чином:

символічне посилання → файл → дані файлу

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

Зв'язок між символічною посиланням і файлом, на який воно вказує, є «м'яким»:

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

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

У Linux кожен файл має унікальний ідентифікатор — індексний дескриптор (inode). Це число, яке однозначно ідентифікує файл у файловій системі. Індексні дескриптори файлів зберігають у спеціальній таблиці. Кожний логічний чи фізичний диск має власну таблицю дескрипторів. Саме номер індексу є справжньою назвою файлу в системі. Його можна побачити, застосувавши вказівку ls з ключем -i.

Жорстке посилання (hard link) виглядає у файловій структурі як ще один файл. При створенні жорсткого посилання у теці, у якій розташовано цільовий файл, назва посилання має відрізнятися від назви файлу. Жорстке посилання на файл має перебувати у тій самій файловій системі, де розташовано й інші жорсткі посилання на цей файл.

Жорстке посилання і файл, для якого його створено, мають однакові inode. Тому жорстке посилання має ті самі права доступу, власника і час останньої модифікації, що й цільовий файл. Розрізняються лише назви файлів. Фактично жорстке посилання — це ще одна назва для файлу.

На відміну від символічного (м'якого) посилання жорстке посилання не можe вказувати на теку, відсутній файл чи файл іншого диску.

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

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

Файл буде доступний системі поки існуватиме хоча б одне жорстке посилання на нього. Інакше (у разі видалення всіх жорстких посилань) файл стане недоступним (його буде видалено з системи).

Жорсткі посилання виникли раніше, ніж символічні. Зараз у повсякденній роботі їх використовують рідше.

Вбудовані сталі (тип int)

FILE_USE_INCLUDE_PATH,
FILE_NO_DEFAULT_CONTEXT,
FILE_APPEND (додавання даних до наявного файлу),
FILE_IGNORE_NEW_LINES (вирізаюння кінців рядків EOL),
FILE_SKIP_EMPTY_LINES (пропуск порожніх рядків),
FILE_BINARY (бінарний режим, доступна лише для подальшої сумісності),
FILE_TEXT (текстовий режим, доступна лише для подальшої сумісності),
FNM_NOESCAPE (відключення екранування зворотних слешів),
FNM_PATHNAME (слеші в рядках збігаються лише зі слешами в зазначеному шаблоні),
FNM_PERIOD (провідна точка в рядку повинна збігатися з точкою в зазначеному шаблоні),
FNM_CASEFOLD (збіг без урахування регістру, частина розширення GNU),
GLOB_BRACE,
GLOB_ONLYDIR,
GLOB_MARK,
GLOB_NOSORT,
GLOB_NOCHECK,
GLOB_NOESCAPE,
GLOB_AVAILABLE_FLAGS,
INI_SCANNER_NORMAL (повернення до нормального режиму сканування INI),
INI_SCANNER_RAW (режим необробленого сканування INI),
INI_SCANNER_TYPED (режим типизованого сканування INI),
LOCK_SH,
LOCK_EX,
LOCK_UN,
LOCK_NB,
PATHINFO_DIRNAME,
PATHINFO_BASENAME,
PATHINFO_EXTENSION,
PATHINFO_FILENAME,
SEEK_SET,
SEEK_CUR,
SEEK_END.

Вбудовані функції
Якщо не вказано інше, вбудована функція повертає true у випадку успішного завершення або false у разі виникнення помилки. Більшість функцій недоступні для роботи з віддаленим файлом, бо файл має бути доступним через файлову систему сервера.

Тип integer у PHP є цілим числом зі знаком. Багато платформ використовують 32-х бітні цілі числа. Тому деякі функції файлових систем можуть повертати несподівані результати для файлів розміром більше 2 Гб.

Серед аргументів деяких функцій вказано необов'язковий параметр $context — ресурс контексту, створений за допомогою функції stream_context_create. Якщо немає потреби у використанні особливого контексту, можна пропустити цей параметр, передавши в нього значення null. Підтримка контексту була додана в PHP 5.0.0. Подані далі приклади не ілюструють роботу з контекстами, які описано серед потоків.


Опис функцій запозичено зі сторінки php.net/manual/ru/ref.filesystem.php.