ProfiPHPProfiPHP
Категория: PHP для чайников

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

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

Управление файлами

Информация, которая хранится на жестком диске, упорядочена в файлах (file). В свою очередь, для обеспечения их более эффективной обработки файлы распределены по каталогам (directory) или папкам (folder). Набор файлов и каталогов называется файловой системой (file system). Она имеет иерархическую структуру и содержит единственный корневой (root) каталог, такой как С:\ в операционной системе Windows или / — в Linux.

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

В языке РНР имеются функции, которые позволяют открывать файлы и считывать или записывать в них информацию. Файлы можно копировать, удалять, переименовывать, а также выполнять над ними много других действий.

Если над файлами или каталогами необходимо выполнить какие-либо действия, обратитесь к справочному руководству и посмотрите, не определена ли в языке РНР соответствующая функция. Если такая функция отсутствует, можно воспользоваться командами операционной системы или программой, написанной на другом языке.

Получение информации о файле

Зачастую требуется получить какие-нибудь данные о файле. В языке РНР определены функции, которые в сценарии позволяют получить всю необходимую информацию.

Для того чтобы узнать, существует ли файл, предназначена функция File_exists.
$result = file_exists( $_SERVER['DOCUMENT_ROOT'].'/file.txt' );
После вызова этой функции переменной $result присваивается либо значение TRUE, либо FALSE. Обычно функция File_exists используется в условных операторах. Например:
if ( file_exists( $_SERVER['DOCUMENT_ROOT'].'/file.txt' ) ) {
echo "Файл $filename существует";
} else {
echo "Файл $filename не существует";
}
После того как вы убедитесь в существовании файла, можно приступать к сбору информации о нем.

Приведем функции, позволяющие получить полезную информацию о файлах:

Функция Is_file определяет, является ли файл обычным файлом.

Функция Is_dir определяет, является ли имя файла директорией.

Функция Is_writable определяет, доступен ли файл для записи.

Функция Filemtime возвращает время последнего изменения файла.

Функция Filesize возвращает размер файла.

Часть информации можно получить лишь в операционных системах Linux/Unix/Mac, другую ее часть — и в системе Windows.

В языке РНР имеется полезная функция Pathinfo, которая позволяет получить путь
и имя файла. Например:
$path_parts = pathinfo( $_SERVER['DOCUMENT_ROOT'].'/file.txt' );
После вызова этой функции в массиве $path_parts будет содержаться приблизительно следующая информация:
Array
(
[dirname] => C:/mysite
[basename] => file.txt
[extension] => txt
[filename] => file
)
Копирование, переименование и удаление файлов

РНР позволяет скопировать существующий файл в новый и получить два идентичных файла с разными именами. Копирование файлов особенно полезно при создании резервных архивов важной информации. Для этого в РНР используется функция Copy.
copy( $_SERVER['DOCUMENT_ROOT'].'/archive.zip', $_SERVER['DOCUMENT_ROOT'].'/newarchive.zip' );
После выполнения этой функции файл archive.zip скопируется в newarchive.zip. Если же файл с именем newarchive.zip уже существует, он будет перезаписан. Чтобы избежать этого, следует воспользоваться таким фрагментом кода:
if ( ! file_exists( $_SERVER['DOCUMENT_ROOT'].'/newarchive.zip' ) ) { 
copy( $_SERVER['DOCUMENT_ROOT'].'/archive.zip', $_SERVER['DOCUMENT_ROOT'].'/newarchive.zip' );
}
Для переименования файла предназначена функция Rename:
rename( $_SERVER['DOCUMENT_ROOT'].'/archive.zip', $_SERVER['DOCUMENT_ROOT'].'/newarchive.zip' );
Для удаления ненужного файла можно воспользоваться функцией Unlink:
unlink( $_SERVER['DOCUMENT_ROOT'].'/archive.zip' );
После вызова этой функции файл archive.zip будет удален. Однако следует заметить, что, если файл не существует, никакое сообщение об ошибке не отобразится. Поэтому следует быть внимательным при использовании этой функции.

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

Для создания каталога в языке РНР используется функция Mkdir:
mkdir( '/mydir' );
После вызова этой функции будет создан новый каталог с именем mydir в той же папке, где находится и основной сценарий РНР. Если попытаться создать каталог с уже существующим именем, будет выведено предупреждающее сообщение следующего вида:
Warning: mkdir(): File exists in test.php on line 2
Для проверки существования каталога с определенным именем можно воспользоваться
функцией Is_dir. Рассмотрим следующий фрагмент кода:
if ( ! is_dir( '/mydir' ) ) { 
mkdir( '/mydir' );
}
После создания каталога с его содержимым можно выполнять любые действия. Например, можно скопировать или удалить файлы.

Для изменения имени каталога в РНР предусмотрена функция Chdir:
chdir( '../' );
Получение списка файлов каталога

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

РНР предоставляет набор разнообразных функций для открытия и чтения каталогов. Рассмотрим следующую строку кода:
$dh = opendir( $_SERVER['DOCUMENT_ROOT'].'/content/' )
Функция Opendir позволяет открыть каталог и, таким образом, получить к нему доступ. Если же попытаться обратиться к несуществующему каталогу, будет выведено следующее предупреждающее сообщение:
Warning: opendir(testdir): failed to open dir: No such file or directory in test.php on line 5
В строке, содержащей вызов функции Opendir, переменная $dh используется в качестве дескриптора каталога (directory handle). Он является своеобразным указателем, который впоследствии можно использовать для обращения к файлам этого каталога. Для считывания имени файла из данного каталога в РНР предназначена функция Readdir:
$file = readdir( $dh );
После ее вызова в переменной $file будет содержаться имя файла, но не полный путь к нему. Чтобы считать все файлы каталога, можно воспользоваться циклом While. Например:
while ( $file = readdir( $dh ) ) {
echo $file;
}
Функция Readdir возвращает имя следующего по порядку элемента каталога. Элементы возвращаются в том порядке, в котором они хранятся в файловой системе.

Добавить комментарий

Имя:
Текст комментария: