ПЕРЕИМЕНОВАНИЕ, ВЫПОЛНЕНИЕ ДЕЙСТВИЯ
В том случае, если посетитель выбрал в качестве требуемого действия переименование, то на странице запроса дополнительной информации ему пришлось ввести новые имена для тех файлов и папок, переименовать которые он пожелал. Сценарию же выполнения действия передалось два массива со старыми и новыми именами этих обьектов -$afl и $rfl соответственно.
if ($ren!="")
{
Переберем все элементы массива со старыми именами - $af 1. Поскольку для совершения собственно переименования для каждого элемента массива со старыми именами нам также потребуется элемент массива $rf 1 с новыми именами под тем же порядковым номером, то перебирать эти элементы будем подряд, по номерам - с помощью цикла for:
for ($i = 0; $i < sizeof($afl); $i++)
Если новое имя не совпадает со старым и не является пустой строкой...
if (($rfl[$i]!="")&($rfl[$i]!=$afl[$i]))
то можно переименовывать. Однако посетитель вполне может в новом имени указать символы, которые недопустимы для имен файлов - от пробелов до слэшей. Возвращать посетителя на этап ввода имени с выведением ему сообщения о недопустимых символах не будем - просто заменим все такие символы на знаки подчеркивания: "_". Тем более что такую замену можно совершить специальной командой PHP - strtr:
(Количество знаков подчеркивания в третьем параметре функции равно количеству указанных во втором недопустимых символов.)
Примечание:
Функция strtr("строка", "заменяемые символы", "заменяющие символы") заменяет в строке, указанной в ее первом параметре, символы, приведенные в строке в ее втором параметре, на символы из строки в ее третьем параметре, стоящие в этой строке на тех же местах, что и заменяемые символы в строке в ее втором параметре.
Если столь длинная фраза вас смутила, то можно сказать проще: во втором и в третьем параметрах функции приводятся строки, состоящие из определенных символов.
Функция просматривает строку в первом параметре символ за символом. Если очередной символ этой строки встречается и в строке во втором параметре, то функция:
1. Смотрит, какой символ стоит в строке в ее третьем параметре на том же самом месте от начала строки, что и встреченный символ в строке во втором параметре.
2. Заменяет в строке в первом параметре этот очередной символ на найденный в третьей строке. Например результатом выполнения функции
strtr ("Оабвапабаво", "ба", "ру")
будет строка
"Оурвупуруво"
Если строки во втором и третьем параметрах разной длины, то лишние символы в более длинной строке игнорируются.
Поскольку на всех местах в строке в третьем параметре этой функции стоит знак подчеркивания, то все недопустимые символы, указанные в строке в ее втором параметре, будут на него заменены.
И наконец, само переименование - командой rename:
rename ($folder."/".$af1[$i], $folder."/".$rfl[$i]) ;
Примечание:
Команда rename (имя переименовываемого файла вместе с путем, его новое имя вместе с путем) переименовывает файл. Если файл переименовать по какой-либо причине не удалось (скажем, переименовываемый файл не существует или в папке уже имеется файл с таким же именем, что и новое имя), то выводится сообщение об ошибке.
Вот и все (Рисунок 11.13).
} } }
Комментарий:
Если при переименовывании файла в качестве нового имени задать имя уже существующего файла, то команда rename выдаст сообщение об ошибке (Рисунок 11.14). Это и испортит внешний вид страницы, и затруднит действия пользователя. Можно, конечно, перед командой rename поставить знак @ - тогда сообщений об ошибке не будет (стандартный способ запрета на вывод такого сообщения), но тогда пользователь даже не узнает об ошибке.