Работа с файлами
Автор: | Артемьев Сергей Игоревич |
ICQ: | 438856621 |
email: | _spin_@bk.ru |
PHP, как и большинство языков программирования, имеет функции для работы с файлами. Эти функции можно условно разделить на 2 группы. В первую попадают функции управления файлами и каталогами (копирование, перемещение, создание и т.д.). Ко второй группе относятся функции для работы с содержимым файлов.
Однако прежде чем рассматривать конкретные функции, необходимо рассмотреть некоторые типы и особенности серверных файловых систем. Типов всего два: Windows и Unix. К Unix-типу относятся файловые системы всех Unix-подобных ОС (Linux, FreeBSD, Ubuntu и прочие), хотя каждая и обладает своими дополнительными особенностями.
Однако большинство обычных пользователей работают под управлением ОС Windows, поэтому мы рассмотрим только основные внешние отличия файловой системы Unix, не вдаваясь глубоко в дебри.
Первое, что бросается в глаза - нет привычных букв дисков, а все пути начинаются со слеша "\".
Путь в Windows: C:\home\users\root Путь в Unix: /etc/home/users/root
Второе - в путях используются только прямые слеши "/", такие же, как в URL-адресах. Помните, что привычный Windows-разделитель пути "\" (обратный слеш) используется в PHP для "экранирования" спецсимволов в строках. Поэтому, если вам нужно вставить обратный слеш в строку, - его надо удвоить или заключить в одинарные кавычки, иначе интерпретатор выдаст ошибку.
<?php $path = 'C:\home\users\root'; или $path = "C:\\home\\users\\root"; ?>
Третья существенная особенность - имена файлов в Unix чувствительны к регистру. Это означает, что в одном каталоге можно создать несколько файлов, имена которых будут отличаться только регистром символов. Например, имена "readme.txt", "Readme.TXT" и "README.txt" - это РАЗНЫЕ файлы в Unix, но один и тот же - в Windows. Об этой особенности надо всегда помнить. Есть простое правило для начинающих, позволяющее избежать ошибок, связанных с именами файлов: всегда именуйтё файлы в нижнем регистре, а для разделения логических частей используйте точки, подчёркивания или тире. Например:
my.test.page.php template_file.php
В принципе, можно использовать эту особенность имён файлов в практической работе (напрмер, хранить версии одного файла, просто меняя регистры букв). Но лучше избегать таких трюков, т.к. они будут работать не на всех Unix-системах, и совсем откажут при переходе на Windows-хостинг.
Как в Windows, так и в Unix пути можно указывать в полном и относительном виде. В относительном виде путь может содержать специальные управляющие символы "." (точка) и ".." (две точки). Точка обозначает текущий каталог, а две точки - предыдущий вышележащий.
Например, если у нас на сервере есть такая структура каталогов
/public /classes myclass.php /scripts myscript.php index.php utils.php
то обращения к файлам будут выгладеть следующим образом (на примере include()):
<?php //Подключить myclass.php из index.php include('./classes/myclass.php'); //Подключить myclass.php из myscript.php include('./../classes/myclass.php'); //Подключить utils.php из myscript.php include('./../utils.php'); ?>
Префикс "." в пути можно не указывать. Следует помнить, что относительный путь всегда вычисляется начиная от файла, с которого началось исполнение, а не от текущего исполняемого. Поясню на вышерассмотренном примере. Если пользователь загрузил index.php, в котором подключен файл /scripts/myscript.php, то все относительные пути будут вычисляться относительно index.php, независимо от того, код какого файла сейчас исполняется (index.php или myscripts.php).
В PHP рекомендуется указывать относительные пути везде, где это возможно. Это значительно упрощает работу с кодом и делает код переносимым. Если все пути в проекте относительные, то для переноса проекта на другой сервер достаточно просто скопировать все каталоги по назначению и всё будет работать.
Теперь приступим к изучению функций и приёмов работы с файлами.