Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка PHP 2008.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

10.3 Функции работы с каталогами

С точки зрения операционной системы каталоги – это те же самые файлы, только со специальным именем. То есть директорию можно представить себе как файл, в котором хранятся имена и местоположения других файлов и каталогов. С каждым процессом (в частности, и с работающим сценарием) ассоциирован свой так называемый текущий каталог. Все действия по работе с файлами и каталогами осуществляются по умолчанию именно в нем. Например, если открываем файл, указав только его имя, PHP будет искать этот файл именно в текущем каталоге.

Функции для работы с каталогами:

  • bool mkdir(string $name, int $perms)

Создает каталог с именем $name и правами доступа $perms. Права доступа для каталогов указываются точно так же, как и для файлов. Чаще всего значение $perms устанавливают равным 0770 (предваряющий ноль обязателен – он указывает PHP на то, что это – восьмеричная константа, а не десятичное число). Пример:

mkdir("my_directory",0755);

// создает подкаталог в текущем каталоге

mkdir("/data"); // создает подкаталог data в корневом каталоге

В случае успеха функция возвращает true, иначе – false. Пользователь не может создать подкаталог в родительском каталоге, права на запись в который у него отсутствуют.

Атрибуты доступа 0770 означают «доступен для чтения, записи и исполнения для владельца и его группы». Право на «исполнение» показывает, что пользователь сможет просмотреть содержимое каталога.

  • bool rmdir(string $name)

Удаляет каталог с именем $name. В случае успеха возвращает true, иначе – false.

  • bool chdir(string $path)

Сменяет текущий каталог на указанный. Если такого каталога не существует, возвращает false. Параметр $path может определять и относительный путь, задающийся от текущего каталога. Примеры:

chdir("/tmp/data"); // переходим по абсолютному пути

chdir("./somathing"); // переход в подкаталог текущего каталога

chdir("something"); // то же самое

chdir(".."); // переходим в родительский каталог

Возвращает полный путь к текущему каталогу, начиная от «корня» (/). Если такой путь не может быть отслежен, возвращает false.

Работа с записями. Описываются функции, которые позволяют узнать, какие объекты находятся в указанном каталоге. Механизм работы этих функций базируется на тех же принципах, что и применяемых для файловых операций: сначала каталог открывается, затем из него производится считывание записей, и под конец каталог нужно закрыть.

  • int opendir(string $path)

Открывает каталог $path для дальнейшего считывания из него информации о файлах и подкаталогах и возвращает его идентификатор. Дальнейшие вызовы readdir() с идентификатором в параметрах будут обращены именно к этому каталогу. Функция возвращает false, если произошла ошибка.

  • string readdir(int $handle)

Считывает очередное имя файла или подкаталога из открытого ранее каталога с идентификатором $handle и возвращает его в виде строки. Порядок следования файлов в каталоге зависит от операционной системы. Вместе с именами подкаталогов и файлов будут также получены два специальных элемента: это (ссылка на текущий каталог) и .. (ссылка на родительский каталог). В подавляющем большинстве случаев нам нужно их игнорировать. Если в каталоге все файлы уже считаны, функция возвращает ложное значение. Пример:

$d=opendir("somewhere");

while(($e=readdir($d))!==false) {...}

Оператор !== позволяет точно проверить, была ли возвращена величина false.

  • void closedir(int $handle)

Закрывает ранее открытый каталог с идентификатором $handle. Можно не закрывать каталоги, т. к. это делается автоматически при завершении программы, однако лучше все-таки это сделать.

  • void rewinddir(int $handle)

Функция «перематывает» внутренний указатель открытого каталога на начало. После этого можно воспользоваться readdir(), чтобы заново начать считывать содержимое каталога.