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

Работа с файловой системой в PHP

Основные функции работы с файловой системой можно разделить на следующие кате­гории:

· функции работы с каталогами (папками);

· функции доступа к общей информации о файле и файловой системе;

· функции операций над файлом;

· функции ввода/вывода;

· функции работы с временными файлами.

В ка­честве разделителя имен в полном имени каталога или файла в Windows можно использовать как символ обратного слеша "\", так и обычного слеша – "/".

Функции работы с каталогами позволяют:

· создавать и удалять каталоги;

· выделить каталог в полном пути к файлу;

· определить имя текущего каталога;

· изменить текущий каталог;

· выполнить проверки для каталога;

· получить доступ к содержимому каталога.

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

Функция

bool mkdir(string dirname)

создает каталог с указанным именем dirname. Если каталог создан, функция возвращает значение true или, в противном случае, значение false.

Функция

bool rmdir(string dirname)

удаляет указанный каталог dirname (каталог должен быть пустым и иметь права на удаление). Если удаление каталога завершается успешно, функция возвращает true, иначе – false.

Для определения имени каталога в полном имени файла используется функция

string dirname(string path)

Она возвращает имя каталога из полного имени файла path.

Определить имя текущего каталога можно с помощью функции

string getcwd()

В случае ошибки эта функция возвращает значение false.

Для изменения текущего каталога используется функция

bool chdir(string dirname)

Эта функция выполняет переход из текущего каталога в каталог dirname, который становится текущим каталогом. Если переход в каталог direname завершается успешно, возвращается значение true, иначе – false.

Выполнить проверки для каталога можно с помощью функций is_dir() и file_exists().

Функция

bool is_dir(string name)

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

Функция

bool file_exists(string name)

возвращает true, если файл или каталог с именем name существует и false – в противном случае.

Пример 4.6.132. Использование функций dirname(), getcwd(), chdir() и file_exists():

В результате выполнения этого фрагмента программы

// Определение имени каталога

// для файла "Введение.doc"

$newDirName = dirname("d:/Uploads/Введение.doc");

// Если каталог $newDirName существует

if(file_exists($newDirName))

{

// Вывод имени текущего каталога

print "Current directory: ".getcwd();

// Переход в каталог $newDirName

chdir($newDirName);

// Вывод имени нового текущего каталога

print "\nNew current directory: ".getcwd();

}

будут выведены следующие строки:

Для получения доступа к содержимому каталога можно использовать функции opendir(), readdir(), rewinddir() и closedir(), а также функцию scandir().

Функция

int opendir(string dirname)

возвращает дескриптор (целое число) указанного в параметре dirname каталога. Данный дескриптор используется в функциях readdir(), rewinddir(), closedir(). Если указанный каталог доступен – возвращается значение дескриптора, иначе – false.

Функция

string readdir(int dir_handle)

возвращает имя очередного элемента каталога (файла или каталога) с дескриптором dir_handle и сдвигает внутренний указатель к следующему элементу (после открытия каталога функцией opendir() внутренний указатель устанавливается на первый элемент каталога). Если каталог не содержит больше элементов, возвраща­ется значение false.

Функция

void rewinddir(int dir_handle)

устанавливает внутренний указатель каталога с дескриптором dir_handle в начало для повтор­ного обхода элементов функцией readdir().

Функция

void closedir(int dir_handle)

освобождает каталог с дескриптором dir_handle, открытый до этого функцией opendir().

Пример 4.6.133. Использование функций opendir(), readdir() и closedir(), а также функции is_dir():

Следующий фрагмент программы выводит для заданного каталога имена содержащихся в нем элементов и их типы:

// Задание имени каталога

$UploadsDir = "d:/Uploads/";

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

$UploadsDirHandle = opendir($UploadsDir);

// Вывод заголовка

print "Directory \"$UploadsDir\" content:";

// Вывод имен и типов элементов каталога в цикле

for(;;)

{

// Получение имени текущего элемента

$elementName = readdir($UploadsDirHandle);

// Если элементов больше нет

if($elementName === false)

// Выход из цикла

break;

// Вывод имени и типа текущего элемента

echo "\nElement: $elementName Type: ",

is_dir($UploadsDir.$elementName)?"Directory":"File";

}

Вывод этого фрагмента имеет следующий вид (символом "." обозначается текущий каталог, а символами ".." – родительский каталог):

Функция

array scandir(string dirname, [int sorting_order])

возвращает массив имен файлов и каталогов, содержащихся в каталоге dirname. Параметр sorting_order задает режим сортировки выводимых имен. Если значение этого параметра равно 0 (это значение по умолчанию), то имена файлов выводятся в алфавитном порядке. Если же задано ненулевое значение параметра sorting_order, то имена файлов выводятся в порядке, обратном алфавитному.

Пример 4.6.134. Использование функции scandir():

Следующий фрагмент программы выводит для заданного каталога имена содержащихся в нем элементов (в порядке, обратном алфавитному) и их типы, а также, для каталогов, количество содержащихся в них элементов:

// Задание имени каталога

$UploadsDir = "d:/Uploads/";

// Сканирование каталога

$UploadsArray = scandir($UploadsDir, 1);

// Вывод заголовка

print "Directory \"$UploadsDir\" content:";

// Вывод имен и типов элементов каталога

// "Uploads" в цикле

for($i=0; $i < count($UploadsArray); $i++)

{

// Получение имени текущего элемента

$elementName = $UploadsArray[$i];

// Вывод имени текущего элемента

echo "\n", $i+1, ". $elementName Type: ";

// Получение типа текущего элемента

$elementType =

is_dir($UploadsDir.$elementName);

// Если элемент - каталог

if($elementType)

{

// Получение и вывод типа элемента

// и количества файлов в каталоге

$CurrentDirArray =

count(scandir($UploadsDir.$elementName));

print "Directory Files number: $CurrentDirArray";

}

else

// Вывод типа текущего элемента

echo "File";

}

Вывод этого фрагмента имеет следующий вид (символом "." обозначается текущий каталог, а символами ".." – родительский каталог):


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: