![]() |
![]() |
![]() |
ФАЙЛ ZAPROS.PHP Сценарии этого файла запрашивают от посетителя дополнительную информацию для проведения действия. Начало сценария: <html><?php Сразу же выведем заголовок формы, общий для всех четырех вариантов запросов. В нем точно так же передадим выполняющему собственно действия сценарию на странице do.php имя текущей папки: echo ("<form action=do.php?folder=$folder method=post>"); Бесспорно, можно было бы и не передавать имя текущей папки, а сообщать обработчику конкретные имена файлов, над которыми совершается действие, с полным путем к ним, однако так все-таки проще. УДАЛЕНИЕ, ЗАПРОС ИНФОРМАЦИИ Если на основной странице файлового менеджера - index.php - была нажата кнопка "Удалить", имя которой - "udal", то значение переменной $udal' в сценарии на странице-обработчике будет отличным от нуля (вернее, оно будет представлять собой значение атрибута value кнопки "Удалить" на основной странице -^собственно слово "Удалить"). Если была нажата какая-нибудь другая кнопка, то значение переменной $udal определено не будет. Поэтому для того, чтобы узнать, было ли посетителем выбрано в качестве желаемого действия удаление, проверим содержимое этой переменной: if ($udal!="") Выведем небольшое пояснение посетителю... echo ("Удалить файлы?<bг>"); и список файлов, которые планируется удалить. Их список передан в форму в массиве $fl. В этот массив включены параметры value тех checkbox'oB, которые были отмечены посетителем на основной странице менеджера файлов перед тем, как нажать кнопку с названием действия (а в эти параметры, как вы наверняка помните, были помещены имена файлов и папок, отображавшихся на основной странице файлового менеджера - путь к ним передан через переменную Sfolder в адресной строке). Переберем все элементы массива $ f 1... foreach ($fl as $i) и выведем их значения - имена файлов, подлежащих удалению. Вместе с именем папки, в которой они расположены - его сценарий на этой странице получил через адресную строку. Рис. 11.6. Удаление файлов и папок. Запрос подтверждения Как и на первой странице, все эти скрытые поля сделаем массивом, для удобства - даже присвоим ему то же имя flf ]: echo ("<input type=hidden name=fl[] value=$i>$i из папки $folder<br>"); И наконец, выведем кнопку, запускающую собственно удаление. Назовем ее точно так же, как и расположенную на основной странице - для единообразия: echo ("<input type=submit value = \"Удалить" name=udal>"); В результате в том случае, если посетитель на основной странице отметит файлы и папки и нажмет кнопку "Удалить", то на странице запроса подтверждения (рис. 11.6) ему будет выдан список выбранных им файлов и предложено нажать одну из двух кнопок - "Удалить" или "Отмена" (код, выводящий последнюю, размещен в конце страницы -смотрите ниже). КОПИРОВАНИЕ, ЗАПРОС ИНФОРМАЦИИ Для того, чтобы произвести копирование файлов и папок из одной папки в другую, простого согласия пользователя на это действие мало. Нужно еще узнать, а в какую папку необходимо производить копирование.
Этот алгоритм следует реализовать в специальной функции - подпрограмме, которую можно вызывать по имени, передав ей при этом необходимую для работы информацию. if ($copy!="") Для удобства запишем в переменную название корневой папки аккаунта пользователя. Впоследствии мы будем ее неоднократно использовать в коде. $begin="files"; Выводим запрос пользователю... echo ("Объекты для копирования:<br>"); и, точно так же, как в блоке кода, посвященном удалению файлов, выводим список объектов, подлежащих копированию (сравните - код практически такой же): foreach ($fl as $i) Еще один запрос... echo ("<bг>Выберите папку для копирования :<br>") ; РЕКУРСИВНАЯ ФУНКЦИЯ ВЫВОДА СПИСКА ДОСТУПНЫХ ДЛЯ КОПИРОВАНИЯ ПАПОК НА АККАУНТЕ В реальном сценарии эта функция должна находиться в его начале или в любом случае до места ее первоначального вызова (см. полный текст рассматриваемых сценариев в конце главы). Поэтому при создании программы, подобной этому файловому менеджеру, лучше всего поставить такую функцию сразу перед блоком команд выдачи запроса дополнительной информации для копирования. function tree($fId) Поскольку в функции будут использоваться переменные еще и из других частей программы на странице, такие как Sfolder (путь к текущей папке) и массив $fl (список копируемых объектов; имена тех папок, что перечислены в нем, выводиться на страницу не будут, так как папку нельзя скопировать саму в себя или в свою же вложенную папку), то эти переменные необходимо объявить как глобальные в самой функции, указав их в ее начале после слова global: global $folder; global $fl; Комментарий: В РНР 4.1 версий и выше массив Sfl доступен и через массив $_POST. В отличие от $HTTPJPOST_VARS этот массив автоглобальный — т. е. для использования в функциях его элементов объявление самого массива в функциях производить не надо. $hdl=opendir($fld); Если этот объект - тоже папка... if (is_dir($fllnm)==True) то выясним:
Для начала сравним полное имя (вместе с путем от корневой директории аккаунта) очередной найденной в сканируемой директории папки со всеми именами копируемых объектов (естественно, тоже полными). Если хоть одно такое имя совпадет с именем папки - то выводить имя этой папки в список доступных для копирования нельзя. $по=0; Переменная $по примет значение 0, если совпадений не было, и 1, если были. Комментарий: Итак - если очередная папка из сканируемой директории не является объектом копирования... if ($no==0) { и эти объекты копирования расположены не в ней... if ($fllnm!=$folder) то ее имя можно вывести в качестве возможного пункта назначения копирования, снабдив его radio button - т. е. "кружком" для единственного выбора. (После отправки формы результат выбора окажется в переменной $rd в сценарии выполнения действия.) echo ("<input name=rd type=radio value=$fllnm>$fllnm<br>"); Комментарий: То, что папка содержит копируемые файлы, является препятствием к выводу имени этой папки на экран как возможнего пункта назначения копирования. Но это отнюдь не значит, что в данной папке не должны сканироваться вложенные папки. Поэтому оператор i f определяет, не содержит ли рассматриваемая папка копируемых файлов, завершаем... } и вот он - рекурсивный вызов функции tree: tree ($fllnm); Осталось закрыть все незавершенные операторы и циклы, } и "потрошимую" директорию. closedir($hdl); Функция вывода списка директорий,- пунктов назначения копирования завершена. Как уже было сказано, функция tree () должна находиться в коде перед блоком запроса дополнительной информации для копирования. Рис. 11.7. Копирование. Запрос папки назначения После вывода списка папок, которые могут служить местом назначения копирования, осталось лишь добавить к нему корневую папку аккаунта, если, конечно, копируемые файлы находятся не в ней (как вы могли заметить, имя этой папки вышеприведенная функция не выводит)... if ($begin!=$folder) { и вывести кнопку запуска копирования. echo ("<input type=submit value=\"Скопировать\" name=copy>"); Все. } Если посетитель на основной странице файлового менеджера отметит файлы и выберет функцию копирования, то ему будет выдан список папок, в которые может быть произведено копирование (рис. 11.7). Выбрав любую из них, для запуска копирования останется лишь нажать соответствующую кнопку. ПЕРЕИМЕНОВАНИЕ, ЗАПРОС ИНФОРМАЦИИ Для переименования файла нужно узнать у пользователя новое имя для этого файла. Именно это и делает выводимая нижеследующим сценарием на страницу форма. Однако сценарию-обработчику данной формы необходимо передать как старое имя файла, так и новое, чтобы ему было понятно, какой файл необходимо переименовывать. if ($ren!="") { то выведем пояснение пользователю... и для каждого файла или папки, чье имя было отмечено в соответствующем checkbox'e на главной странице... foreach ($fl as $i) поместим в форму скрытое поле, в котором запишем старое имя файла. Сценарию-обработчику ведь надо знать, какой файл переименовывать? echo ("<input type=hidden name=afl[] value=$i>"); Выведем старое имя файла... echo ("$i"); и текстовое поле для ввода нового имени. Для удобства поместим в это текстовое поле старое имя - если пользователю надо было его изменить совсем немного, то ему сделать это будет легче. echo ("<input type=text size=30 name=rfl[] value=$ixbr>") ; Такие поля выведем для каждого файла или папки, подлежащего переименованию. echo ("<input type=submit value=\"Переименовать\" name=ren>"); Блок запроса дополнительной информации по переименованию файлов или папок закончен. Рис. 11.8. Переименование. Запрос новых имен СОЗДАНИЕ НОВОЙ ПАПКИ, ЗАПРОС ИНФОРМАЦИИ Для создания новой папки нужно получить от пользователя всего одно слово - имя этой самой новой папки. if ($md!="") то выведем на страницу поле для его ввода (его содержимое передастся сценарию-обработчику в переменной Snewname): echo ("Введите имя папки: <brxinput type=text size=30 name=newname>"); и кнопку, запускающую это самое создание: echo ("<input type=submit value=\"Создать папку \ " name=md>"); Собственно, и все. } Посетитель увидит поле ввода для имени новой папки (рис. 11.9) Рис. 11.9. Создание новой папки. Поле ввода ее имени КНОПКА ОТМЕНЫ Для того, чтобы со страницы запроса информации можно было уйти без последствий, если посетитель передумает что-либо делать со своими файлами, поместим на эту страницу кнопку "Отмена" (см. рис. 11.6-11.9): <brxinput type=submit value="OTMeHa" name=otmena> Собственно, это и есть весь текст этой страницы: </form></html> Графическое оформление - уже на вкус сайтостроителя. |
![]() |
![]() |
![]() |