Поиск
Переименование и удаление файлов и каталогов
В РНР есть еще несколько полезных встроенных функций для работы с файла ми и каталогами. К ним относятся переименование и удаление файлов, а также получение списка файлов в каталоге. Обсудим синтаксис данных функций, а затем посмотрим, как они работают в контексте типичного сценария РНР. Функция rename ( ) имеет следующий синтаксис:
rename ("старое имя" новое имя
Она применима как к файлам, так и каталогам. Еще одна функция, о которой говорится в этом разделе, f ilesize ( ) . Она определяет размер файла в байтах. Это значение может быть присвоено пере менной или распечатано.
$Number = filesize ("filename"
Один из удобных приемов работы возможность получить список файлов в каталоге. Такой сценарий позволяет просматривать каталоги без помощи FTP и может быть использован для создания интерактивного хранилища доку ментов. Чтение каталога похоже на чтение файла. Сначала открываем каталог, затем просматриваем файлы по очереди, после чего закрываем каталог. Вмес то указателя файла, который использовался при чтении файла, здесь приме нен указатель каталога, но идея та же.
$Handle = opendir ("path");
readdir ($Handle);
closedir ($Handle);
Так как функция readdir { ) последовательно показывает файлы по одному,
ее надо поместить в цикл:
while (readdir ($Handle)) {
statements;
Мы используем эти приемы в одном сценарии, который создается панелью управления файлами на основе обычного браузера для просмотра и работы с каталогами.
Создание панели управления каталогами
- Откройте текстовый редактор и начните новый РНРдокумент.
- Создайте стандартный HTMLзаголовок.
- Начните с таблицы, затем откройте РНРраздел.
- Напишем несколько условных конструкций, проверяющих, нужно ли вы полнять определенные действия исходя из заданных пользователем ука заний. Нажав на кнопки в форме, в массивы $Delete (удаление файлов) и $Rename (переименование файлов) вы запишете списки файлов для этих операций. Если задана переменная $Upload (загрузка файлов), то она так же будет содержать имя файла.
-
if ($Delete) { // Handle file deletions.
for ( = 0; < count ($Delete); $i++) {
if ( unlink Pusers/$Delete[$i]") ) {
print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Your file,
— $Delete[$i] , was successfully deleted! </TDx/TR>\n" ) ;
} else {
print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Your file,
$Delete[$i] ,. could not be deleted. </TDx/TR>\n" ) ;
print ("<TRxTD COLSPAN=4 ALIGN=CENTER> </TDx/TR>\n" ) ;
} if ($Rename) { // Handle file renaming.
for ($n 0; $n < count ($Rename); $n+f) {
dFilename = $Rename[$n] ;
d = "users/dFilename" ;
$New = "users/$NewName[dFilename] " ;
if ( rename (d, $New) ) {
print 1"<TRxTD COLSPAN=4 ALIGN=CENTER>Your file,
— $Rename[$n] , was successfully renamed!</TDx/TR>\n" ) ;
} else {
print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Your file,
— $Rename[$n] , could not be renamed. < /TD>< /TR> \n ");
}
}
print ("<TRxTD COLSPAN=4 ALIGN=CENTER> </TDx/TR>\n") ;
}- Создайте HTMLформу, не забыв включить код ENCTYPE для загрузки фай ла на сервер.
- Распечатайте заголовки таблицы.
- Напишите код, позволяющий считывать информацию из каталога.
- Создайте в форме опцию загрузки на сервер.
- Закройте PHP и HTML.
- Сохраните сценарий как files.php (листинг 10.8), загрузите его на сервер (в одно место с каталогом users) и протестируйте в браузере (рис. 10.16 и 10.17).
<HTMLxHEADxTITLE>Viewing Files in a Directory</TITLE>
</HEADxBODY>
<TABLE BORDER=0 WIDTH="60%" CELLSPACING=2
CELLPADDING=2 ALIGN=CENTER> •.
1 <?php
Чтобы страница выглядела аккуратно, разместим данные в таблице.
if ($Upload) .{ // Обработка загрузки файла.
print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Uploaded
— f i l e name: $File_name</TDx/TR>\n") ;
print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Uploaded
file size: $File_size</TDx/TR>\n") ;
if (copy ($File, "users/$File_name")) {
print ("<TRxTD COJjSPAN=4 ALIGN=CENTER>Your file,
—SFile^name, was successfully uploaded!</TDx/TR>\n");
} else {
print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Your file,
$File_name, could not be copied.</TDx/TR>\n");
unlink ($File);
print ("<TRxTD COLSPAN=4 ALIGN=CENTER> </TDx/TR>\n" ) ;
} .
Переменная $Upload будет задана, если пользователь хочет загрузить файл на сервер. Следовательно, если переменная $Upload существует, загружаемый файл будет обработан так, как мы видели выше.
Последняя инструкция print, которая создает пустой ряд в таблице, исполь зуется исключительно в эстетических целях, как и в последующих двух услови ях. Пустая строка сделает Webстраницу менее загроможденной.
Переменная $Delete используется для определения того, нужно ли удалять какиелибо файлы. Так как желательно удалять несколько файлов сразу, то был создан массив. Цикл обработает каждый элемент массива, удаляя файлы по очереди.
Механизм работы с элементами массива для переименования файлов такой же, как и при удалении файлов. Как только вы присвоили новое и старое име на файлов, вызывается функция rename ( ) , которая и выполняет указанные из менения.
print ("<FORM ACTION=\"files.php\" METHOD=POST
ENCTYPE=\"multipart/formdata\">\n");
print ("<TRxTDxB>File Name</Bx/TDxTD><B>File
—Size</Bx/TDxTDxB>Delete</Bx/TDxTDxB>Rename</B>
—Enter the New Name in the Box)</TDx/TR>\n") ;
SYS-PAGE-CONTENTpen = opendir ("users");
while ($Files = readdir (SYS-PAGE-CONTENTpen)) {
$Filename = "users/" . $Files;
if (is_file ($Filename)) {
$Size = filesize ("users/$Files");
print ("<TRxTD>$Files</TDxTD>$Size</TDxTDxINPUT
TYPE=CHECKBOX NAME=\"Delete[]\" VALUE=\"$Files\">
</TDxTDxINPUT TYPE=CHECKBOX NAME= \"Rename [] \"
VALUE=\"$Files\"xINPUT TYPE=TEXT NAME=
\"NewName[$Files]\"x/TDx/TR>\n") ;
closedir (SYS-PAGE-CONTENTpen);
Здесь задан цикл для обращения к каждому файлу (и каталогу), расположен ному в каталоге users. В этом случае мы хотим работать только с файлами, про пуская каталоги. Вот почему использовалась функция проверки типа is_f ile ( ) , которая обеспечивает создание списка файлов.
print ("<TRxTD COLSPAN=4 ALIGN=CENTER> </TDx/TR>\n") ;
print ("<TRxTD COLSPAN=4 ALIGN=CENTER><INPUT TYPE=CHECKBOX
NAME=\"Upload\" VALUE=\"Yes\">Upload a file to theserver:<INPUT
TYPE=FILE NAME=\"File\" SIZE=20x/TDx/TR>\n") ;
print ("<TRxTD COLSPAN=4 ALIGN=CENTERxINPUT TYPE=SUBMIT
NAME=\"SUBMIT\" VALUE=\"Submitl\"x/FORMx/TDx/TR>\n");
?></TABLEx/BODYx/HTML&g
Листинг 10.8 т Вместо функций на этой странице используются услов ные конструкции, а результаты похожи. Вы можете проверить свои знания, переписав этот сценарий с использованием функций, особенно раздел, кото рый выводит на экран список файлов каталога.
1 <HTML>
2 <HEAD>
3 <TITLE>Viewing Files in a Directory</TITLE>
4 </HEAD>
5 <BODY>
6 <TABLE BORDER=0 WIDTH='.'60%" CELLSPACING=2 CELLPADDING=2 ALIGN=CENTER>
7 <?php
8 /* Сценарий отображает информацию о файлах в директории и позволяет
пользователю удалять, загружать и'переименовывать файлы. */
9
10 if ($Upload) { // Обработка загрузки файла.
11 print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Uploaded file name:
$File_name</TDx/TR>\n") ;
12 print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Uploaded file size:
$File_size</TDx/TR>\n") ;
13 if (copy ($File, "users/.$File_name")) {
14 print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Your file, $File_name,
was successfully uploaded!</TDx/TR>\n");
15 } else {
16 print ("<TRxTD COLSPAN=4 ALIGN=CENTER>Your file, $File_name,
could not be copied. </TDx/TR>\n") ;
17 } '
18 unlink ($File);
19 print ("<TRxTD COLSPAN=4 ALIGN=CENTER> </TDx/TR>\n"') ;
20 }
21
22 if ($Delete) { // Handle file deletions.
23 for ( = 0; < count ($Delete); $i++) {
24 if ( unlink ("users/$Delete[$i]") ) {
25 print ("<TR><TD COLSPAN«4 ALIGN=CENTER>Your file,
$Delete[$i], was successfully deleted!</TDx/TR>\n");
26 } else {
27 print ("<TRXTD COLSPAN=4 ALIGN-CENTER>Your file,
$Delete[$i], could not be deleted.</TDx/TR>\n");
28 }
29 }
30 print (n<TRxTD COLSPAN«4 ALIGN=CENTER>Snbsp;</TDx/TR>\n") ;
31 }
32
33 if ($Rename) { // Handle file renaming.
34 for ($n = 0; $n < count ($Rename); $h++) {
35 dPilename = $P.ename[$n];
36 d = »users/dFilename";
37 $New ш "users/$NewName[dPilename]";
38 if ( rename (d, $New) ) {
39 print ("<TRXTD COLSPAN=4 ALIGN=CENTER>Your file,
$Rename[$n], was successfully renamedI</TD></TR>\n");
40 } else {
-41 print (»<TRxTD COLSPAN=4 ALIGN=CENTER>Your file,
$Rename[$n], could not be renamed.</TDx/TR>\n");
42 }
43 } .
44 print ("<TRxTD COLSPAN-4 ALIGN=CENTER>Snbsp;</TDx/TR>\n") ;
45 }
46
47 // Начало формы.
48 print ("<FORM ACTION=\"files.php\" METHOD=POST ENCTYPE=\"multipart/
form-data\">\n");
49 Переименование и удаление файлов и каталогов
print ("<TRxTDxB>File Name</Bx/TDxTD><B>File Size</B>
</TD><TD><B>Delete</Bx/TD><TDxB>Rename<
/B> Enter the New Name in the Box)</TDx/TR>\n") ;
50
51 // Чтение файлов из каталога.
52 SYS-PAGE-CONTENTpen = opendir ("users");
53 while ($Files = readdir (SYS-PAGE-CONTENTpen)) {
54 $Pilename = "users/" . $Files;
55 if (is_file ($Filename)) {
56 $Size = filesize ("users/$Files");
57 print ("<TRxTD>$Files</TD><TD>$Size</TD><TDxINPUT
TYPE=CHECKBOX NAME=\"Delete[]\" VALUE=\"$Files\">
</TDxTDxINPUT TYPE=CHECKBOX NAME=\"Rename [] \"
VALUE=\"$Files\"xINPUT TYPE=TEXT NAME= \"NewName[$Files]\"
</TDx/TR>\n") ;
58 }
59 }
60 closedir (SYS-PAGE-CONTENTpen);
61 '
62 // Вывод поля для загрузки файлов.
63 print ("<TRxTD COLSPAN=4 ALIGN=CENTER> </TDx/TR>\n"} ;
64 print ("<TRxTD COLSPAN=4 ALIGN=CENTERxINPUT TYPE=CHECKBOX
NAME=\"Upload\" VALUE=\"Yes\">Upload a f i l e to theserver:<INPUT
TYPE=FILE NAME=\"File\" SIZE=20x/TDx/TR>\n") ;
65 print ("<TRxTD COLSPAN=4 ALIGN=CENTER><INPUT TYPE=SUBMIT
NAME=\"SUBMIT\" VALUE=\ " Submit !V"x/FORMx/TDx/TR>\n") ;
66 ?>
67 </TABLE>
68 </BODY>
69 </HTML>

