Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vtoraya_chast_uchebnika_po_WWW_Okonchat_variant...doc
Скачиваний:
33
Добавлен:
27.09.2019
Размер:
6.06 Mб
Скачать

5.4.1. Получение дорожки до текущего скрипта и его имени

Любой работающий скрипт находится в каком-то каталоге. Такой каталог называется текущим или рабочим. Путь до него, вместе с собственным именем, возвращается функцией getcwd( ).

Её синтаксис:

string getcwd (void)

5.4.2. Чтение всего содержимого каталога

Перед тем, как начать работать с каталогом, его следует открыть. Это делается с помощью функции opendir:

int opendir (string path),

где path – имя или дорожка до каталога, который надо открыть.

Возвращает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir().

Если путь не существует или каталог, расположенный по указанному пути, не может быть открыт вследствие правовых ограничений или ошибок файловой системы, функция opendir() возвращает значение FALSE и генерирует сообщение PHP об ошибке уровня E_WARNING. Вы можете запретить вывод сообщения об ошибке, предварив имя функции opendir() символом '@'.

Перед тем, как использовать функцию открытия каталога, удобно использовать функцию is_dir(), которая возвращает TRUE, если файл существует и является директорией. Если filename - это относительное имя файла, то оно будет проверено относительно текущей рабочей директории.

Её синтаксис:

bool is_dir (string filename).

Один из наиболее популярных примеров работы с каталогами – это рассмотрение задачи вывода содержимого каталога.

Для этого наряду с другими функциями необходимо использовать функцию readdir(). Рассмотрим её подробнее.

Её синтаксис:

string readdir (discr cataloga)

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

Обратите внимание на способ проверки значения, возвращаемого функцией readdir() в приведенном ниже примере (Пример 5-8). В этом примере, в одном из вариантов, осуществляется проверка значения на идентичность значению FALSE, поскольку в ином случае, любой элемент каталога, чьё имя может быть выражено как FALSE, остановит цикл (например, элемент с именем "0").

Приведённый в примере скрипт достаточно длинный, но он хорошо закомментирован и поэтому понятен. В нём реализована распечатка элементов каталога C:Program Files\Mozilla FireFox. Скорее всего, у всех на персональном компьютере есть такой каталог и поэтому можно реализовать этот пример абсолютно точно. В противном случае, необходимо использовать другой подходящий (не очень большой) каталог.

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

Пример 5‑8

<?php

echo "Печать пути до текущего каталога (каталога выполняемого скрипта):","<br>";

$putTekKataloga = getcwd();// Получение пути до текущего каталога

print_r($putTekKataloga);

echo "<br>";

$handle= opendir(".");

echo "Указатель текущего каталога (каталога скрипта)= ", $handle,"<br>";

echo "<br>";

//Переход к другому каталогу - смена каталога

//Можно рассмотреть два варианта

// $putNovKataloga = "C:Program Files\Microsoft Visual Studio 10.0";

$putNovKataloga = "C:Program Files\Mozilla FireFox";

echo "Начало работы с новым каталогом $putNovKataloga ","<br>";

$path = $putNovKataloga;//Замена длинного имени на короткое

$handle = opendir($path);

echo "Указатель нового каталога = ", $handle,"<br>";

echo "Печать установленного пути до нового текущего каталога:","<br>";

print_r($path);

echo "<br>";

chdir($path);//Смена текущего каталога на новый

// Получение пути до нового текущего каталога с помощью функции getcwd()

$putTekKataloga = getcwd();

echo "Печать пути до вновь установленного текущего каталога:","<br>";

print_r($putTekKataloga);

echo "<br>";

echo "Проверка правильности пути до каталога: функция is_dir($path) возвращает ",(is_dir($path));

echo "<br>";

echo "Начало опробования различных вариантов распечатки элементов каталога ",$putNovKataloga,"<br>";

//Начало цикла распечатки элементов текущего каталога - 1-ый вариант

//Одновременно считается их число

if (!is_dir($path))

echo "Дорожка до файла была неверной";

else

$kolElемKataloga=0;

$i=0;

echo 'Распечатка элементов каталога простым перебором', "<br>";

echo 'Это не вполне верное решение!!', "<br>";

while ($imElementa = readdir($handle))

{

$i++;

echo 'Номер элемента каталога= ',"$i",'; Элемент = ',"$imElementa <br>";

}

echo 'Число элементов в каталоге ',"$putNovKataloga",' равно ',$kolElемKataloga=$i;

echo "<br>";

//Проверьте вариант работы с закомментированной нижеследующей //строкой!!

rewinddir($handle);//Возврат внутреннего указателя на начало каталога

//Начало цикла распечатки элементов текущего каталога - 2-ой вариант

echo 'Распечатка элементов каталога "правильным" способом', "<br>";

{

$kolElемKataloga = 0;

while(($imElementa = readdir($handle)) !== false)

{

echo "$imElementa <br>";

$kolElемKataloga =$kolElемKataloga + 1;

}

}

echo 'Количество элементов в каталоге ',"$path", ' равно ',"$kolElемKataloga <br>";

echo "<br>";

rewinddir($handle);

//Распечатка каталога без двух элементов: "." и ".." - 3-ий вариант

echo 'Распечатка каталога без двух элементов: "." и ".."', "<br>";

$i=0;

$kolElемKataloga = 0;

while(($imElementa = readdir($handle)) !== false)

{

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

{

$i++;

$kolElемKataloga =$kolElемKataloga + 1;

echo 'Номер элемента каталога= ',"$i",'; Элемент = ',"$imElementa <br>";

echo 'Количество элементов в каталоге ',"$path",' без двух первых равно ',"$kolElемKataloga <br>";

}

}

closedir($handle);

?>

Получить список элементов каталога можно с использованием функции scandir ( ), которая возвращает список файлов и каталогов, расположенных по указанному пути в виде массива. Её использование представляет собой альтернативу использованию функции readdir ().

Её синтаксис:

array scandir (string catalog [, int order])

Функция возвращает массив, содержащий имена файлов и каталогов, расположенных по пути, передающемуся через параметр catalog. Если каталог не является таковым, функция возвращает логическое значение FALSE и генерирует сообщение об ошибке уровня E_WARNING.

По умолчанию, сортировка производится в алфавитном порядке по возрастанию. Если указан необязательный параметр order (равен 1), сортировка производится в алфавитном порядке по убыванию.