Оглавление

25.9. Функции для работы с каталогами

Создаем программу для просмотра всех доступных каталогов и файлов на диске

 

 Для работы с каталогами используются следующие функции:
□ mkdir(<Имя каталога>, <Права доступа>) создает новый каталог с правами доступа, указанными во втором параметре. Права доступа указываются  в  виде  трехзначного  числа,  перед  которым  указывается 0. Например, 0755;
□ rmdir(<Имя  каталога>)  удаляет  пустой  каталог.  Если  в  каталоге  есть файлы, то каталог удален не будет;
□ getcwd() возвращает текущий каталог;
□ chdir(<Имя каталога>) делает указанный каталог текущим;
□ opendir(<Имя  каталога>)  открывает  каталог  для  чтения. Функция  возвращает дескриптор, который указывается в других функциях;
□ readdir(<Дескриптор>)  считывает  следующее  имя  объекта (файла  или подкаталога);
□ closedir(<Дескриптор>) закрывает каталог;
□ rewinddir(<Дескриптор>) перемещает указатель в начало каталога;
□ is_dir(<Объект>) возвращает true, если объект является каталогом;
□ is_file(<Объект>) возвращает true, если объект является файлом.

 
Прочитаем  содержимое  каталога C:\Apache2\htdocs  и  выведем  содержимое каталога  в  окно Web-браузера. Каталоги  и файлы  выведем  отдельно,  а  для файлов укажем размер, дату  создания и дату изменения файла. Кроме того, добавим возможность перемещения по файловой системе с помощью гиперссылок и предусмотрим возможность использования русских букв в названиях  каталогов  и  файлов.  Для  этого  создадим  два  файла: dir_script.php (листинг 50) и dir.php (листинг 51).

 
Листинг 50. Содержимое файла dir_script.php

<?php
function f_url_new($path) {
   $Mass = explode('/', $path);
   if (count($Mass)>1) {
      array_pop($Mass); // Удаляем последний элемент
      return implode('/', $Mass);
   }
   else return '';
}
function f_read_dir($path, &$d, &$f) {
   $descr = @opendir($path); // Открываем каталог
   if ($descr) {
      chdir($path); // Делаем каталог текущим
      while ($obj = readdir($descr)) {
         if (is_dir($obj)) { // Если это каталог
            if ($obj != '.') {
               $d[] = $obj;
            }
         }
         if (is_file($obj)) { // Если это файл
            $size = filesize($obj);
            $cdate = date('d-m-Y', filectime($obj));
            $mdate = date('d-m-Y', filemtime($obj));
            $f[] = array($obj, $size, $cdate, $mdate);
         }
      }
      closedir($descr); // Закрываем каталог
   }
   else exit('Не удалось открыть каталог'); 
}
?>

 

 

Листинг 51. Содержимое файла dir.php

<?php
require_once('dir_script.php');
$dir = array();
$files = array();
//Задаем путь по умолчанию
if (!isset($_GET['path'])) $path = 'C:/Apache2/htdocs';
else $path = $_GET['path'];
if (strlen($path)==0) exit('Не задан путь');
// Получаем файлы и папки текущего каталога
f_read_dir($path, $dir, $files);
$path2 = f_url_new($path);
// Кодируем все спецсимволы
$path = urlencode($path);
$path2 = urlencode($path2);
// Выводим содержимое каталога
?>
<table cellspacing="0" cellpadding="5" border="0" width="100%">
<tr><td width="25%">
<h2 align="center">Каталоги</h2>
</td><td>
<h2 align="center">Файлы</h2>
</td></tr>
<tr><td valign="top">
<?php
for ($i=0, $c=count($dir); $i<$c; $i++) {
   if ($dir[$i] == '..') {
      echo '<a href="?path=' . $path2 . '">На уровень выше</a><br><br>';
   }
   else {
      echo '<a href="?path=' . $path . urlencode('/' . $dir[$i]);
      echo '">' . $dir[$i] . "</a><br>\n";
   }
}
?>
</td><td valign="top">
<table cellspacing="0" cellpadding="5" border="1" width="100%">
<tr align="center">
<td width="25%">Название файла</td>
<td width="25%">Размер файла</td>
<td width="25%">Дата создания файла</td>
<td width="25%">Дата последнего изменения</td>
</tr>
<?php
// Выводим названия файлов
for ($k=0, $c=count($files); $k<$c; $k++) {
   echo '<tr align="center">';
   echo '<td>' . $files[$k][0] . "</td>\n";
   echo '<td>' . $files[$k][1] . "</td>\n";
   echo '<td>' . $files[$k][2] . "</td>\n";
   echo '<td>' . $files[$k][3] . "</td>\n";
   echo "</tr>\n";
}
echo "</table>\n";
if (count($files)==0) {
   echo '<div style="text-align: center"><b>Нет файлов</b></div>';
}
?>
</td></tr></table>

 

Откроем в Web-браузере файл dir.php. В результате отобразится содержимое каталога C:\Apache2\htdocs.  С  помощью  гиперссылок  можно  перемещаться между  каталогами,  отображая  их  содержимое,  почти  как  в  программе Проводник в Windows.

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити