Четверг, 16.05.2024, 16:40
DigitalBox
Приветствую Вас Гость | RSS
Главная Управление файлами Регистрация Вход
Меню сайта

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



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

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

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

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

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


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

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

$result = file_exists("stuff.txt");

После вызова этой функции переменной $result присваивается либо значение TRUE, либо FALSE. Обычно функция file_exists() используется в условных операторах. Например:

if(!file_exists("stuff.txt"))
{
     echo "Файл не найден!\n";
}

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

ФункцияОписаниеВозвращаемое значение
is_file("stuff.txt")Проверяет, является ли файл обычным файлом, или представляет собой каталог, или любой другой файл специального типа
TRUE ИЛИ FALSE
is_dir("stuff.txt")Проверяет, является ли файл каталогомTRUE ИЛИ FALSE
is_executable("do.txt")Проверяет, является ли файл исполняемымTRUE ИЛИ FALSE
is_writable("stuff.txt")Проверяет, можно ли записывать данные в файл
TRUE ИЛИ FALSE
is_readable("stuff.txt")Проверяет, можно ли из файла считывать данные
TRUE ИЛИ FALSE
fileatime("stuff.txt")Возвращает время последнего доступа к файлу
Время в формате Unix (например, 10571961221 ИЛИ FALSE
filectime("stuff.txt")Возвращает время создания файлаВремя в формате Unix или FALSE
filemtime("stuff.txt")Возвращает время последней модификации файла
Время в формате Unix или FALSE
filegroup("stuff.txt")Возвращает присвоенный файлу идентификатор группы
Целое число (идентификатор группы) ИЛИ FALSE
fileowner("stuf f.txt")Возвращает идентификатор владельца файла
Целое число (идентификатор пользователя) или FALSE
filesize("stuff.txt")Возвращает размер файла в байтахЦелое число или FALSE
filetype("stuff.txt")Возвращает тип файлаТип файла (например, file, dir, link, char) или FALSE при вoзникнoвeнии ошибки или невозможности определения типа
basename ("/11/do.txt" )Возвращает имя файла на основе указанного пути
do.txt
dirname("/ti/do.txt")Возвращает имя каталога, где размещается файл
/t1

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

В языке РНР имеется полезная функция pathinfо(), которая позволяет получить путь и имя файла. Например:

$pinfo = pathinfо("/topdir/nextdir/stuff.txt");

После вызова этой функции в массиве $pinfо будет содержаться следующая информация:

$pinfо[dirname] = /topdir/nextdir
$pinfo[basename] = stuff.txt
$pinfо[extension] = txt

При проверке файла с помощью функции вида is_нечто() любая ошибка при использовании аргумента, например опечатка в имени файла, приведет к возврату значения FALSE. Например, при вызове функции is_dir("tyme") будет получено значение FALSE, если tyme является файлом, а не каталогом. Это же значение будет возвращено, если файла tyme не существует.

Некоторые функции, приведенные в таблице, возвращают результат в формате времени Unix. Для преобразования его к стандартному виду даты следует воспользоваться функцией date().


Копирование, переименование и удаление файлов

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

сору("fileold.txt", "filenew.txt");

После выполнения этой функции файл fileold.txt скопируется в filenew.txt. Если же файл с именем filenew.txt уже существует, он будет перезаписан. Чтобы избежать этого, следует воспользоваться таким фрагментом кода:

if(!file_exists("filenew.txt"))
{
     copy("fileold.txt" , "filenew.txt");
}
else
{
     echo "Файл уже существует!\n";
}

Для переименования файла предназначена функция rename():

rename("oldname.txt", "newname.txt");

Если попытаться присвоить файлу уже существующее имя, будет выведено предупреждающее сообщение и файл не будет переименован:

Warning: rename(fileold.txt, filenew.txt):File exists in c:\test.php on line 17

Для удаления ненужного файла можно воспользоваться функцией unlink():

unlink("badfile.txt");

После вызова этой функции файл badfile.txt будет удален. Однако следует заметить, что, если файл не существует, никакое сообщение об ошибке не отобразится. Поэтому следует быть внимательным при использовании этой функции.


Организация файлов

Как уже отмечалось, файлы размещаются в каталогах (directory), которые также называют папками (folder). В этом разделе рассматриваются функции, позволяющие создавать и удалять каталоги, а также получать списки находящихся в них файлов.


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

Для создания каталога в языке РНР используется функция mkdir():

mkdir("testdir");

После вызова этой функции будет создан новый каталог с именем testdir в той же папке, где находится и основной сценарий РНР. Например, если сценарий расположен по адресу /test/test.php, то новый каталог будет помещен в папку /test/testdir. Если попытаться создать каталог с уже существующим именем, будет выведено предупреждающее сообщение следующего вида:

Warning: mkdir() : File exists in d:/test/test.php on line 5

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

i f (!is_dir("mynewdir"))
{
     mkdir("mynewdir");
}
else
{
     echo "Каталог уже существует! ";
}

После создания каталога с его содержимым можно выполнять любые действия. Например, можно скопировать или удалить файлы (см. раздел "Копирование, переименование и удаление файлов").

Для создания каталога в другом месте следует задать полный путь к нему. Например:

mkdir("/topdir/nextdir/mynewdir");

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

mkdir("../mynewdir");

Если сценарий находится в каталоге /topdir/test/makedir.php, то в результате выполнения этой команды новый каталог будет размещен по адресу /topdir/mynewdir. Для изменения имени каталога в РНР предусмотрена функция следующего вида:

chdir("../anotherdir");


Получение списка файлов каталога

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

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

$dh = opendir("/topdir/testdir");

Функция opendir() позволяет открыть каталог и, таким образом, получить к нему доступ. Если же попытаться обратиться к несуществующему каталогу, будет выведено следующее предупреждающее сообщение:

Warning: opendir(testdir): failed to open dir: Invalid argument in test13.php on line 5

В строке, содержащей вызов функции opendir(), переменная $dh используется в качестве дескриптора каталога (directory handle). Он является своеобразным указателем, который впоследствии можно использовать для обращения к файлам этого каталога. Для считывания имени файла из данного каталога в РНР предназначена функция readdir():

$filename = readdir($dh);

После ее вызова в переменной $filename будет содержаться имя файла, но не полный путь к нему. Чтобы считать все файлы каталога, можно воспользоваться циклом while. Например:

while($filename = readdir($dh))
{
     echo $filename. "\n";
}

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

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

Листинг А. Сценарий, создающий "картинную галерею"

‹?php
/*Имя сценария:  displayGallery
  *Описание:           отображает все картинки, хранящиеся в
  *                               определенном каталоге.
  */
     echo "<html><head><title>Гaлepeя изображений</title></head>
                 <body>";
     $dir = "../test1/testdir/";                                                   #8
     $dh = opendir($dir);                                                               #9
     while($filename = readdir($dh))                                        #10
     {
          $filepath = $dir.$filename;                                             #12
          if(is_file($filepath)and ereg("\.jpg$",$filename))  #13
          {
               $gallery[] == $filepath;
          }
     }
     sort($gallery);                                                                         #16
     foreach($gallery as $image)                                               #17
     {
          echo "<hr>";
          echo "<img src='$image'><br>";
     }
?›
</body></html>

Обратите внимание на наличие номеров в конце некоторых строк. Рассмотрим код этих строк более подробно.

  • Строка 8. Переменной $dir присваивается значение пути, которое будет впоследствии использоваться в сценарии. Обратите внимание на наличие косой черты (/) в конце строки, а также на использование этого символа вместо обратной косой (\) (даже в операционной системе Windows).
  • Строка 9. В этой строке происходит открытие каталога.
  • Строка 10. Начинается цикл while, считывающий все файлы из каталога.
  • Строка 12. Создается переменная $filepath, значение которой соответствует полному пути к файлу. Если в строке 8 не включить символ /, переменная $filepath будет содержать ошибочное значение.
  • Строка 13. В этой строке проверяется, является ли файл графическим, не имеет ли он расширение .jpg. Если это так, полный путь к изображению добавляется в массив с именем $gallery.
  • Строка 16. В этой строке осуществляется сортировка значений массива $gallery в алфавитном порядке.
  • Строка 17. С помощью цикла foreach изображения выводятся на Web-страницу.
Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz