Иллюстрированный самоучитель по PHP

Файл zapros.php

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

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

if ($no==0)
{

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

if ($fllnm!=$folder)

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

echo ("<input name=rd type=radio value=$fllnm>$fllnm<br>");

Комментарий
При отправке формы, содержащей radio buttons, сценарию-обработчику передается всего одна относящаяся к этим элементам формы переменная, имя которой совпадает с именем отмеченной radio button, а значением является содержимое параметра value отмеченной radio button
.

При размещении в форме radio buttons им всем дается одно и то же имя – то имя, которое будет иметь в сценарии-обработчике переменная со значением выбранного radio button. Путаницы тут не будет – так как из всех radio buttons в форме отмеченным может быть только один элемент, то переменная в любом случае передастся всего одна.

То, что папка содержит копируемые файлы, является препятствием к выводу имени этой папки на экран как возможного пункта назначения копирования. Но это отнюдь не значит, что в данной папке не должны сканироваться вложенные папки. Поэтому оператор if определяет, не содержит ли рассматриваемая папка копируемых файлов, завершаем…

}

…и вот он – рекурсивный вызов функции tree:

tree ($fllnm);

Осталось закрыть все незавершенные операторы и циклы:

}
}
}
}

…и "потрошимую" директорию.

closedir($hdl);

Функция вывода списка директорий, – пунктов назначения копирования завершена.

}

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

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

Как уже было сказано, функция tree () должна находиться в коде перед блоком запроса дополнительной информации для копирования.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.