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

Файл zapros.php

Копирование, запрос информации

Для того, чтобы произвести копирование файлов и папок из одной папки в другую, простого согласия пользователя на это действие мало. Нужно еще узнать, а в какую папку необходимо производить копирование.

А что нужно, чтобы это узнать? Необходимо выдать запрос на получение имени этой папки у пользователя. Можно, конечно, предоставить пользователю возможность просто ввести новый путь в поле ввода текста, как при использовании команды сору в командной строке MS-DOS. Но это представляется весьма неудобным. Лучше, наверное, вывести пользователю список всех имеющихся на его аккаунте папок, из которых он сможет выбрать нужную. Пометить имя каждой папки радиокнопкой (кружком из группы единственного выбора, см. рис. 11.1, 11.7) – и для выбора папки назначения копирования достаточно будет только ткнуть мышью в нужном месте).

Иллюстрированный самоучитель по PHP › Файловый менеджер › Файл zapros.php
Рис. 11.7. Копирование. Запрос папки назначения

Но как вывести список всех папок? Ведь они могут быть вложены друг в друга, так что простое сканирование корневой директории не поможет… А команд в нашем распоряжении для достижения данной цели не так и много. Считать список содержимого каталога, определить, является ли тот или иной элемент, содержащийся в каталоге, так же директорией, – вот, собственно, и все, что нам может предложить РНР.

И тут придет на помощь принцип рекурсии.

Под рекурсией понимается запуск программы из самой этой программы. Иными словами – вот программа запускается, исполняется, исполняется – а затем очередная команда представляет собой не что иное, как вызов этой самой программы! и вновь программа исполняется с начала, исполняется… и опять доходит до вызова самой программы, и опять исполняется с начала.

Разумеется, для того чтобы программа с рекурсией имела какой-то смысл, а не представляла из себя бесконечно повторяемые действия, на каком-то этапе данный процесс должен прерваться. Иными словами, запуск программы изнутри самой программы должен происходить не каждый раз при ее работе, а в зависимости от того, выполняется ли определенное условие. Естественно, рано или поздно в ходе работы программы условие должно перестать выполняться, и тогда рекурсия прервется – исходная программа изнутри нее самой запущена при невыполнении условия не будет.

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