Файл 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 () должна находиться в коде перед блоком запроса дополнительной информации для копирования.