Работа с каталогами в php

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

Открытие и закрытие каталогов

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

Открытие каталога

1
2
3
4
<?рhр
// открытие каталога
$dir_pointer = opendir("/files/data");
?>

При указании пути возможно использование строк . и . .. Одна точка обозначает текущий каталог, а две точки – родительский. Например, если текущий каталог Apache2/htdocs, то для открытия Apache2 нужно указать . ..
После работы с каталогом, как и после работы с файлами, его нужно закрыть (однако если вы этого не сделаете, ничего страшного не случится) с помощью функции closedir(). Она принимает дескриптор каталога и ничего не возвращает.

Открытие и закрытие каталога

1
2
3
4
5
6
<?рhр
// открытие каталога
. $dir_pointer = opendir("/files/data");
// закрытие каталога
closedir($dir_pointer);
?>
Чтение каталогов

После того как мы получили дескриптор, можно использовать его для просмотра содержимого каталога или, по-другому, его чтения.

Чтение каталога

1
2
3
4
5
6
7
8
9
10
11
12
<?php
// открытие каталога
$dir_pointer = opendir(".");
// чтение каталога
while (($res = readdir($dir_pointer))!==FALSE)
{
// вывод имен файлов и папок
echo $res."<br />";
}
// закрытие каталога
closedir($dir_pointer);
?>

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

Обратите внимание, что в цикле while мы использовали оператор ! == (операнды не эквивалентны), а не ! = (операнды не равны). Делается это по следующей причине. Допустим, что среди имен файлов и подкаталогов имеется такое: 0. В этом случае при использовании оператора ! = выполнение цикла прекратилось бы раньше времени.

Однако разработчики РНР посчитали, что данный способ чтения каталогов является громоздким. Поэтому в пятой версии появляется новая функция scandir(). Она принимает дескриптор каталога и возвращает массив, элементы которого содержат имена файлов и подкаталогов.

Вывод содержимого каталога

1
2
3
4
5
6
7
<?php
// родительский каталог
$dir = "..";
$arr = scandir($dir);
// вывод массива
print_r($arr);
?>

Сортировка массива производится в алфавитном порядке по возрастанию. Однако имеется возможность это изменить с помощью необязательного параметра. Если его указать равным единице, то сортировка массива будет производиться в алфавитном порядке по убыванию.

Вывод содержимого каталога в алфавитном порядке по убыванию

1
2
3
4
5
6
7
<?php
// родительский каталог
$dir = "..";
$arr = scandir($dir, 1);
// вывод массива
print_r($arr);
?>
Создание и удаление каталогов

Язык позволяет создавать и удалять не только файлы, но и каталоги. Для этого используют функции mkdir() и rmdir() соответственно.

Создание и удаление какатола

1
2
3
4
5
6
7
<?рhр
// создание каталога
mkdir("dir_1");
mkdir("dir_2");
// удаление каталога
rmdir("dir_1");
?>

Стоит обратить внимание, что функция rmdir() может удалять только пустые каталоги, иначе выведется сообщение об ошибке, и функция возвратит FALSE.

Мы разобрали основные возможности РНР при работе с каталогами.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100