Написать письмо авторам  
 

УЧЕБНИК PHP


справочник функций <Оnline>

Об учебнике

Обновление

Оглавление

  1. Основы PHP
  2. Операторы языка PHP
  3. Строковые функции
  4. Массивы
  5. Функции
  6. Работа с файлами
  7. Регулярные выражения
  8. Сессии и cookies в PHP
  9. Работа с FTP
  10. Проверка данных
  11. Гостевая книга
  12. PHP и MySQL

Продолжение следует




Работа с файлами

Предыдущая Следующая

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



Для установки текущего каталога применяется функция 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")
?>

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



Предыдущая Следующая

 
  Наверх