Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач PHP.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
687.62 Кб
Скачать

8. Файлы и каталоги

Создание файла data.txt

Для выполнения действия сделаем следующее:

1. Откроем текстовый редактор и создадим новый документ.

2. Сохраним файл как data.txt, ничего в нем не печатая.

3. Загрузим файл на сервер.

8.1 Запись данных в файл

Чтобы считывать информацию из файла, сначала ее надо записать туда. Запись в файл на сервере состоит из трех этапов: открытие файла, собственно запись данных, закрытие файла. К счастью, в РНР для выполнения каждого из этих действий есть встроенные функции:

$FileName = "data.txt";

$FilePointer = fopen ($FileName, "mode");

fwrite ($FilePointer, "data to be written");

fclose ($FilePointer);

8.2 Чтение файла

Считывать информацию из файла так же легко, как и записывать ее туда. Здесь тоже есть три этапа: открытие файла, собственно считывание информации, закрытие файла.

$FileName = "data.txt";

$FilePointer = fopen ($FileName, "mode");

$Array = file ($FileName);

fclose (SFilePointer);

Встроенная функция file( ) - ценный инструмент PHP. С ее помощью информация из файла считывается и помещается в массив. Каждый элемент массива состоит из отдельной строки файла, а номер строки становится индексом в массиве.

Каталоги

Чтение файла и запись в него на сервере - только часть процесса хранения данных. Часто используются и каталоги. Каталог можно представить в виде папки - это подраздел жесткого диска, где можно хранить файлы и другие каталоги. По умолчанию все посещаемые вами Web-страницы попадают в ваш так называемый «домашний» каталог, в котором можно создать другие «базы» для хранения изображений, картинок, данных и т.д.

В РНР каталог создается с помощью команды:

  • mkdir ("path", "permissions");

8.3 Переименование и удаление файлов и каталогов

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

Функция rename ( ) имеет следующий синтаксис:

  • rename (“старое имя”, “новое имя”);

Она применима как к файлам, так и каталогам.

Еще одна функция - filesize ( ) . Она

определяет размер файла в байтах. Это значение может быть присвоено переменной или распечатано.

  • $Number = filesize ("filename");

Для наглядного примера создадим панель управления каталогами:

1. Откроем текстовый редактор и начнем новый РНР-документ.

2. Создадим стандартный HTML-заголовок.

<HTML><HEAD><TITLE>Viewing Files in a Directory</TITLE> </HEAD><BODY>

3. Начнем с таблицы, затем откроем РНР-раздел.

<TABLE BORDER=0 WIDTH="60%" CELLSPACING=2

CELLPADDING=2 ALIGN=CENTER>

<?php

Чтобы страница выглядела аккуратно, разместим данные в таблице.

4. Напишем несколько условных конструкций, проверяющих, нужно ли выполнять определенные действия исходя из заданных пользователем указаний. Нажав на кнопки в форме, в массивы $Delete (удаление файлов)

и $Rename (переименование файлов) вы запишете списки файлов для этих

операций. Если задана переменная $Upload (загрузка файлов), то она также будет содержать имя файла.

if ($Upload) { // Обработка загрузки файла.

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Uploaded

— file name: $File_name</TD></TR>\n") ;

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Uploaded

-file size: $File_size</TD></TR>\n") ;

if (copy ($File, "users/$File_name")) {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

—SFile_name, was successfully uploaded!</TD></TR>\n");

} else {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

-$File_name, could not be copied.</TD></TR>\n");

}

unlink ($File);

print ("<TR><TD COLSPAN=4 ALIGN=CENTER> </TD></TR>\n" ) ;}

Переменная $Upload будет задана, если пользователь хочет загрузить файл на сервер. Следовательно, если переменная $Upload существует, загружаемый файл будет обработан так, как мы видели выше.

Последняя инструкция print, которая создает пустой ряд в таблице, используется исключительно в эстетических целях, как и в последующих двух условиях. Пустая строка сделает Web-страницу менее загроможденной.

5. if ($Delete) { // Handle file deletions.

for ($1 = 0; $1 < count ($Delete); $i++) {

if ( unlink users/$Delete[$i]"-) ) {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

— $Delete[$i] , was successfully deleted! </TDx/TR>\n" ) ;

} else {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

-$Delete[$i] ,. could not be deleted. </TD></TR>\n" ) ;

print ("<TR><TD COLSPAN=4 ALIGN=CENTER> </TD></TR>\n" ) ;}

Переменная $Delete используется для определения того, нужно ли удалять какие-либо файлы. Так как желательно удалять несколько файлов сразу, то был создан массив. Цикл обработает каждый элемент массива, удаляя -файлы по очереди.

6. if ($Rename) { // Handle file renaming.

for ($n - 0; $n < count ($Rename); $n+f) {

$OldFilename = $Rename[$n] ;

$Old = "users/$01dFilename" ;

$New = "users/$NewName[$01dFilename] " ;

if ( rename ($01d, $New) ) {

print 1"<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

— $Rename[$n] , was successfully renamed!</TD></TR>\n" ) ;

} else {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

— $Rename[$n] , could not be renamed. < /TD>< /TR> \n ");

}}

print ("<TR><TD COLSPAN=4 ALIGN=CENTER> </TD></TR>\n") ;}

Механизм работы с элементами массива для переименования файлов такой же, как и при удалении файлов. Как только вы присвоили новое и старое имена файлов, вызывается функция rename ( ) , которая и выполняет указанные изменения.

7. Создадим HTML-форму, не забыв включить код ENCTYPE для загрузки файла на сервер.

print ("<FORM ACTION=\"files.php\" METHOD=POST

-ENCTYPE=\"multipart/form-data\">\n");

8. Распечатаем заголовки таблицы.

print ("<TR><TD><B>File Name</B></TD><TD><B>File

—Size</B></TD><TD><B>Delete</B></TD><TD><B>Rename</B>

—Enter the New Name in the Box)</TD></TR>\n") ;

9. Напишем код, позволяющий считывать информацию из каталога.

$Open = opendir ("users");

while ($Files = readdir ($Open)) {

$Filename = "users/" . $Files;

if (is_file ($Filename)) {

$Size = filesize ("users/$Files");

print ("<TR><TD>$Files</TD><TD>$Size</TD><TD><INPUT

-TYPE=CHECKBOX NAME=\"Delete[]\" VALUE=\"$Files\">

-</TD><TD><INPUT TYPE=CHECKBOX NAME= \"Rename [] \"

-VALUE=\"$Files\"><INPUT TYPE=TEXT NAME=

-\"NewName[$Files]\"></TD></TR>\n") ; -

closedir ($Open);

Здесь задан цикл для обращения к каждому файлу (и каталогу), расположенному в каталоге users. В этом случае мы хотим работать только с файлами, пропуская каталоги. Вот почему использовалась функция проверки типа is_file ( ) , которая обеспечивает создание списка файлов.

10. Создаём в форме опцию загрузки на сервер.

print ("<TR><TD COLSPAN=4 ALIGN=CENTER> </TDx/TR>\n") ;

print ("<TR><TD COLSPAN=4 ALIGN=CENTER><INPUT TYPE=CHECKBOX

-NAME=\"Upload\" VALUE=\"Yes\">Upload a file to the server:<INPUT

-TYPE=FILE NAME=\"File\" SIZE=20></TD></TR>\n") ;

print ("<TR><TD COLSPAN=4 ALIGN=CENTER><INPUT TYPE=SUBMIT

-NAME=\"SUBMIT\" VALUE=\"Submitl\"></FORM></TD></TR>\n");

11. Закрываем PHP и HTML.

?>

</TABLE></BODY></HTML>

12. Сохраняем сценарий как files.php и загружаем его на сервер

в одно место с каталогом users.

Рис. 7 files.php загрузили на сервер в одно место с каталогом users

Рис. 8 В каталоге users создали 6 файлов (В некоторых ввели текст)

<HTML>

<HEAD>

<TITLE>Viewing Files in a Directory</TITLE>

</HEAD>

<BODY>

<TABLE BORDER=0 WIDTH="60%" CELLSPACING=2 CELLPADDING=2 ALIGN=CENTER>

<?php

/* Сценарий отображает информацию о файлах в директории и позволяет

пользователю удалять, загружать и переименовывать файлы. */

if ($Upload) { // Обработка загрузки файла.

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Uploaded file name:

$File_name</TD></TR>\n") ;

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Uploaded file size:

$File_size</TD></TR>\n") ;

if (copy ($File, "users/$File_name")) {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file, $File_name,

was successfully uploaded!</TD></TR>\n");

} else {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file, $File_name,

could not be copied. </TD></TR>\n") ;

}

unlink ($File);

print ("<TR><TD COLSPAN=4 ALIGN=CENTER> </TD></TR>\n") ;

}

if ($Delete) {

for ($i = 0; $i < count ($Delete); $i++) {

if ( unlink ("users/$Delete[$i]") ) {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

$Delete[$i], was successfully deleted!</TD></TR>\n");

} else {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

$Delete[$i], could not be deleted.</TD></TR>\n");

}

}

print ("<TR><TD COLSPAN=4 ALIGN=CENTER> </TD></TR>\n") ;

}

if ($Rename) {

for ($n = 0; $n < count ($Rename); $n++) {

$OldFilename = $Rename[$n];

$Old = "users/$OldFilename";

$New = "users/$NewName[$OldFilename]";

if ( rename ($Old, $New) ) {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

$Rename[$n], was successfully renamed.</TD></TR>\n");

} else {

print ("<TR><TD COLSPAN=4 ALIGN=CENTER>Your file,

$Rename[$n], could not be renamed.</TD></TR>\n");

}

}

print ("<TR><TD COLSPAN=4 ALIGN=CENTER> </TD></TR>\n") ;

}

// Начало формы.

print ("<FORMACTION=\"files.php\" METHOD=POST ENCTYPE=\"multipart/

form-data\">\n");

print ("<TR><TD><B>File Name</B></TD><TD><B>File Size</B>

</TD><TD><B>Delete</B></TD><TD><B>Rename</B> Enter the New Name in

the Box</TD></TR>\n") ;

// Чтение файлов из каталога.

$Open = opendir ("users");

while ($Files = readdir ($Open)) {

$Filename = "users/" . $Files;

if (is_file ($Filename)) {

$Size = filesize ("users/$Files");

print ("<TR><TD>$Files</TD><TD>$Size</TD><TD><INPUT

TYPE=CHECKBOX NAME=\"Delete[]\" VALUE=\"$Files\">

</TD><TD><INPUT TYPE=CHECKBOX NAME=\"Rename [] \"

VALUE=\"$Files\"><INPUT TYPE=TEXT NAME= \"NewName[$Files]\">

</TD></TR>\n") ;

}}

closedir ($Open);

// Вывод поля для загрузки файлов.

print ("<TR><TD COLSPAN=4 ALIGN=CENTER> </TD></TR>\n") ;

print ("<TR><TD COLSPAN=4 ALIGN=CENTER><INPUT TYPE=CHECKBOX

NAME=\"Upload\" VALUE=\"Yes\">Upload a file to the server:<INPUT

TYPE=FILE NAME=\"File\" SIZE=20></TD></TR>\n") ;

print ("<TR><TD COLSPAN=4 ALIGN=CENTER><INPUT TYPE=SUBMIT

NAME=\"SUBMIT\" VALUE=\"Submit!\"></FORM></TD></TR>\n") ;

?>

</TABLE>

</BODY>

</HTML>

Переименуем файл F ile4.txt в Another_Name (Рис. 9)

Рис. 9 Пользователь видит такую страницу, если посещает ресурс впервые. Триггерные кнопки позволяют пользователю удалять и переименовывать файлы, а также загружать их на сервер.

Удалим файл File1.txt и переименуем data.txt в new_data(Рис. 10)

Рис. 10 Демонстрация работы формы.

Рис. 11 Демонстрация работы формы.