Первый сайт на PHP


РЕКУРСИВНАЯ ФУНКЦИЯ ВЫВОДА СПИСКА ДОСТУПНЫХ ДЛЯ КОПИРОВАНИЯ ПАПОК НА АККАУНТЕ - часть 2


$hdl=opendir($fld);

while ($file = readdir($hdl)) if ( ($file!=°.")&&($file!=".."))

Для удобства запишем полное имя - вместе с путем - очередного взятого из папки объекта в переменную $f llnm:

$fllnm=$fld."/".$file;

Если этот объект - тоже папка...

if (is_dir($fllnm)==True)

то выясним:

  • не является ли данная папка одновременно и объектом копирования? Если является - то, во-первых, в списке папок она появиться не должна - папку нельзя скопировать саму в себя, а, во-вторых, сканировать ее вложенные папки тоже незачем - копировать одну папку в другую, вложенную в нее, еще никому не удавалось;
  • не в этой ли самой папке находится копируемый файл? Если в этой же самой папке - то выводить ее имя бессмысленно: копирование файла на свое же место возможно, но никаких за собой последствий не влечет.

Для начала сравним полное имя (вместе с путем от корневой директории аккаунта) очередной найденной в сканируемой директории папки со всеми именами копируемых объектов (естественно, тоже полными). Если хоть одно такое имя совпадет с именем папки - то выводить имя этой папки в список доступных для копирования нельзя.

$по=0;

foreach ($fl as $i)

if ($fllnm==$folder."/".$i) $no=l;

Переменная $по примет значение 0, если совпадений не было, и 1, если были.

Комментарий:

Обратите внимание на способ фиксирования совпадения имен папок при их переборе - при помощи изменения значения ранее установленной переменной: в данном случае - $nо.

Используйте такой же способ, если вам надо узнать, произошло ли то или иное событие внутри какого-нибудь цикла - установите до цикла переменную в ноль, а внутри цикла в случае совершения события присвойте ей значение 1. Тогда после окончания цикла переменная будет равна 1, если событие произошло, и 0, если нет.

Итак - если очередная папка из сканируемой директории не является объектом копирования...

if ($no==0)

{ и эти объекты копирования расположены не в ней...

if ($fllnm!=$folder)

то ее имя можно вывести в качестве возможного пункта назначения копирования, снабдив его radio button - т. е. "кружком" для единственного выбора. (После отправки формы результат выбора окажется в переменной $rd в сценарии выполнения действия.)




Начало  Назад  Вперед