Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PI_lektsii_2016.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

13.6 Робота з каталогами

Для установки поточного каталогу застосовується функція 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<br>";

}

closedir ($dir);

?>

Зауважимо, що ця функція повертає також "." і "..". Якщо цього робити не потрібно, то виключити ці значення можна наступним чином:

<?

$dir = opendir (".");

while ( $file = readdir ($dir))

{

if (( $file != ".") && ($file != ".."))

{

echo "$file<br>";

}

}

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")

?>

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]