
- •«Основы программирования на php»
- •Оглавление
- •Введение
- •1. Первые шаги с php
- •1.1 Основы синтаксиса
- •1.2 Передача данных в браузер
- •1.3 Тестирование сценария
- •1.4 Передача простого текста в браузер
- •1.5 Передача страницы html в браузер с помощью рнр
- •2. Переменные
- •2.1 Синтаксис переменных
- •2.2 Типы переменных
- •2.3 Присвоение значений переменным
- •3. Html-формы и php
- •3.1 Создание html-формы
- •3.2 Получение данных из формы в рнр
- •4. Работа с числами и строками
- •4.1 Сложение, вычитание, умножение и деление.
- •4.2 Встроенные математические функций
- •4.3 Соединение строк
- •5. Управляющие структуры
- •5.1 Условный оператор if
- •5.2 Операторы сравнения
- •5.7 Цикл while
- •5.8 Цикл for
- •6. Массивы
- •6.1 Создание массива
- •6.2 Добавление элементов в массив
- •6.3 Объединение массивов:
- •6.4 Доступ к элементам массива
- •6.5 Сортировка массивов
- •6.6 Многомерные массивы
- •7. Функции
- •7.1 Создание и использование простых функций
- •7.2 Создание и вызов функций, принимающих аргументы
- •8. Файлы и каталоги
- •8.1 Запись данных в файл
- •8.2 Чтение файла
- •8.3 Переименование и удаление файлов и каталогов
- •Заключение
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 Демонстрация работы формы.