Понедельник, 21.07.2025, 06:48 Приветствую Вас Гость

On-line: Книги, учебники, статьи

Главная | Регистрация | Вход | RSS

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

Для установки текущего каталога применяется функция chdir:
  int chdir ( string directory)

Работать с этой функцией можно следующим образом:
chdir("/tmp/data"); // переход по абсолютному пути
chdir("./js"); // переход в подкаталог текущего каталога
chdir(".."); // переход в родительский каталог
chdir("~/data"); // переходим в /home/пользователь/data (для Unix)

Чтобы узнать текущий каталог можно воспользоваться функцией getcwd:
  string getcwd ( string path)

Для того чтобы открыть каталог используется функция opendir, открывающая каталог, заданный параметром path:
  int opendir ( string path)

После того, как каталог открыт, прочитать его можно функцией readdir:
  string readdir ( int dir)

Эта функция возвращает имена элементов, содержащихся в каталоге. Кроме файлов и папок в каталогах находятся также элементы "." и "..". Первый элемент указывает на текущий каталог, а второй - на родительский. Текущий каталог, кстати, можно открыть, указав его имя как ".":
  $dir = opendir (".");

После того, как работа с каталогом закончена, его нужно закрыть. Закрытие каталога выполняется при помощи функции closedir:
  void closedir ($dir)

Ниже приведен пример, осуществляющий чтение и вывод файлов, находящихся в текущем каталоге.
  $dir = opendir (".");
  echo "Files:\n";
  while ($file = readdir ($dir)) 
  {
  echo "$file
";
  }
  closedir ($dir);
?>

Заметим, что эта функция возвращает также "." и "..". Если этого делать не нужно, то исключить эти значения можно следующим образом:
  $dir = opendir (".");
  while ( $file = readdir ($dir))
  {
  if (( $file != ".") && ($file != ".."))
  {
  echo "$file
";
  }
  }
  closedir ($dir);
?>

В качестве примера на рассмотренные функции, давайте создадим скрипт, удаляющий все файлы из каталога c:/temp, к которым не было доступа в течение суток. Функция удаления файлов в этом случае вызывается рекурсивно.
  function delTemporaryFiles ($directory)
  {
  $dir = opendir ($directory);
  while (( $file = readdir ($dir)))
  {
  if( is_file ($directory."/".$file))
  {
  $acc_time = fileatime ($directory."/".$file);
  $time = time();
  if (($time - $acc_time) > 24*60*60)
  {
  if ( unlink ($directory."/".$file))
  {
  echo ("Файлы успешно удалены");
  }
  }
  }
  else if ( is_dir ($directory."/".$file) && ($file != ".") && ($file != ".."))
  {
  delTemporaryFiles ($directory."/".$file);
  }
  }
  closedir ($dir);
  }
  delTemporaryFiles ("c:/temp");
?>

Создание каталогов производится с помощью функции mkdir:
  bool mkdir ( string dirname, int mode)

Эта функция создает каталог с именем dirname и правами доступа mode. В случае неудачи возвращает false. Права доступа задаются только для каталогов UNIX, поскольку в Windows этот аргумент игнорируется. Ниже приведен пример создания каталога test в директории c:/temp.
  $flag = mkdir ("c:/temp/test", 0700);
  if($flag)
  {
  echo("Каталог успешно создан");
  }
  else
  {
  echo("Ошибка создания каталога");
  }
?>

Удалить каталог можно с помощью функции rmdir:
  bool rmdir ( string dirname)

Теперь удалим только что созданный каталог /test:
  $flag = rmdir ("c:/temp/test");
  if($flag)
  {
  echo("Каталог успешно удален");
  }
  else
  {
  echo("Ошибка удаления каталога");
  }
?>

Функция rmdir удаляет только пустые каталоги. Для того чтобы удалять непустые каталоги, давайте напишем функцию и удалим каталог c:/temp со всеми вложенными папками и файлами:
  function full_del_dir ($directory)
  {
  $dir = opendir($directory);
  while(($file = readdir($dir)))
  {
  if ( is_file ($directory."/".$file))
  {
  unlink ($directory."/".$file);
  }
  else if ( is_dir ($directory."/".$file) &&
  ($file != ".") && ($file != ".."))
  {
  full_del_dir ($directory."/".$file);  
  }
  }
  closedir ($dir);
  rmdir ($directory);
  echo("Каталог успешно удален");
  }
  full_del_dir ("c:/temp")
?>

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








































Вход на сайт
Поиск
Календарь
«  Июль 2025  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей
Наш опрос
Как Вам удобнее??
Всего ответов: 341
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

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