Тема 3/3 Практическая работа 8 Работа с файлами. Часть 1 (2 часа)

advertisement
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Тема 3/3
Практическая работа 8
Работа с файлами. Часть 1 (2 часа)
Цель: познакомиться с методами работы с файлами на PHP.
Задачи:
 освоить методы анализа существования файла с заданным именем
и его основных характеристик;
 освоить различные методы чтения информации, хранимой в файле,
созданном в текстовом редакторе;
 освоить методы внесения информации в файл с использованием
диалоговой формы на PHP;
 освоить технологию изменения информации в файле.
Теоретические сведения
Для работы с файлами на PHP существует множество функций. Большинство
из них кратко описаны в материалах лекций. Поставим перед собой конкретную
задачу и научимся ее решать. Нам надо научиться читать из файла информацию
и анализировать ее. Решим сначала наиболее простую задачу — научимся выводить
построчно информацию, которая была записана в файл.
Последовательность работы с файлом в режиме чтения всегда состоит из ряда
стандартных шагов.
1. Проанализировать существование файла, который надо прочитать и его
доступность для режима чтения. Если файл существует и его нам разрешено
читать, то переходим к шагу 2, в противном случае выводим сообщение
о невозможности выполнить чтение, и завершаем работу скрипта.
2. Открываем файл в режиме чтения и получаем указатель на файл, который
сохраняем в специальной переменной для дальнейшей работы. Если открытие
произошло успешно, то переходим к шагу 3, в противном случае формируем
сообщение об ошибке и завершаем работу нашего скрипта.
3. Читаем текущую строку из файла в символьную переменную. Если это не конец
файла, то переходим к пункту 4. В противном случае переходим к пункту 5.
4. Выводим на печать прочитанную строку и переходим к пункту 3.
5. Закрываем файл. Заканчиваем работу скрипта.
6. Теперь, когда мы составили общий алгоритм обработки файла, перейдем
к детальному рассмотрению каждого шага.
Проверка файла на существование выполняется с использованием функции:
file_exists($
f)
Здесь $ f — это символьная переменная, содержащая имя файла. Функция
возвращает истину (TRUE), если указанный файл существует, и ложь (FALSE)
в противном случае. Пример использования функции:
1
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
$f=”f1.txt”;
If (file_exists($f) ) echo “ Файл $f существует ”;
Else echo “ Возможно вы ошиблись с именем, файл $ f не
существует”;
Для проверки
функцией:
Is_
able($f)
доступности
режима
чтения
файла
можно
воспользоваться
read
Здесь $ f — символьная переменная, содержащая имя файла. Функция возвращает
истину, если читать файл можно, и ложь в противном случае. Аналогично работает
функция анализа допустимости записи:
is_writeable($
f).
Задание 1
Создайте файл с именем f1.txt
Запишите в него 3 строки текста.
в директории, где хранятся
ваши скрипты.
Напишите скрипт проверки существования файла и доступности его на чтение
и на запись. Текст скрипта может выглядеть следующим образом (рис. 1):
Рис. 1. Текст скрипта по заданию 1
Исполните скрипт, вы должны получить сообщения типа (рис. 2):
2
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 2. Результат анализа файла, который существует
Переименуйте файл
сообщения (рис. 3).
на f 2. txt,
снова
выполните
скрипт
и получите
новые
Рис. 3. Проверка файла после изменения его имени
Верните
старое
название
файлу,
но измените
его
характеристики
с использованием закладки «Свойства», установите флажок «Только для чтения»
(рис. 4):
3
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 4. Изменение свойств файла f 1. txt
Снова запустите скрипт
отличается от предыдущих?
и получите
соответствующее
сообщение,
чем
оно
Снова верните файл в исходное состояние, снимите флажок «Только чтение».
Сделайте выводы по проделанной работе.
Продолжим изучать основные функции по работе с файлами. Для того чтобы
можно было прочитать файл, его сначала надо открыть. Файл открывается
функцией:
fopen($ f, $
r)
Здесь $ f — символьная переменная с именем файла; $ r — символьная
переменная, определяющая режим открытия файла. Если мы будем только читать
файл, то режим открытия ‘ r ’, при этом указатель устанавливается на начало файла.
Если же мы собираемся читать и записывать в файл, то режим открытия
записывается как ‘ R +’, при этом указатель так же устанавливается на начало
файла.
Все
возможные
варианты
задания
указателей
в табл. 3.1 темы
3 теоретического материала.
4
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Функция возвращает указатель на файл или ложь (FALSE), если файл открыть
не удается в заданном режиме. Указатель на файл — целое положительное число,
которое в дальнейшем используется в функциях чтения-записи файла.
Для чтения файла можно использовать несколько функций PHP.
Функция fread() читает из файла, заданного файловым указателем, заданное
количество байт:
string
длина)
fread(int
манипулятор,
int
Возвращаемое значение — символьная переменная. Длина читаемого фрагмента
задается в символах или байтах.
Для определения размера файла необходимо воспользоваться функцией filesize
($ f), которая возвращает размер файла в байтах.
После обработки файл обязательно надо закрыть командой close ($ h), здесь $ h —
указатель на файл; $ f — символьная переменная, содержащая имя файла.
Закрытие файла в текущем скрипте предотвращает возможность доступа к нему
после завершения работы скрипта. Если не закрыть файл, то через его открытый
указатель можно прочитать закрытую для посторонних информацию.
Задание 2
Написать скрипт, который открывает ранее созданный файл f 1. txt в режиме
чтения с установкой указателя на начало файла. Определить длину файла,
прочитать всю информацию, хранимую в файле, и вывести ее на печать. В конце
работы обязательно закрыть файл. При открытии файла обязательно проверить,
существует ли данный файл и доступен ли он для чтения. Результат работы вашего
скрипта представлен на рис. 5.
Рис. 5. Результат чтения файла f 1. txt
Добавьте две новые строки в файл f 1. txt, сохраните изменения и снова запустите
скрипт задания 2. Вы должны получить результат, отличный от предыдущего,
например такой (рис. 6):
5
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 6. Вывод содержимого файла после добавления в него новых строк
Функция filesize () — кешируется. Если вы получили одинаковый размер в обоих
случаях, необходимо перед применением функции очистить статический кеш
функцией clearstatcache($ f).
Задание 3
Кроме функции fread() для чтения файла можно использовать функции fgets($h)
и fgets s ($h) и fgetс($h).
Функция fgets ($ h) — считывает из файла текущую строку и перестанавливает
указатель текущей строки на следующую.
Функция fgetss ($ h,$ n [, список тегов, которые надо оставить для
интерпретации]) — аналогична функции fgets ($ h), позволяет удалить из файла
HTML- и PHP-теги. Параметр $n — длина анализируемой строки.
Функция fget с($ h) читает файл посимвольно.
После открытия файла указатель файла находится на первой строке или
на первом символе. Для определения конца файла существует специальная
функция feof ($ h), здесь $ h — указатель на открытый файл. Функция возвращает
истину (TRUE), если достигнут конец файла, и ложь (FALSE) в противном случае.
Поэтому для организации построчного чтения файла достаточно организовать цикл
while (), задав в качестве условия выполнения тела цикла отсутствие конца файла.
While (!feof($h))
{
$str
fgets($h);
=
Echo
$str.”<br>”;
}
6
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Fclose($h);
Порядок выполнения работы.
 Изменить файл f 1. txt, добавив теги HTML в некоторые строки, например
(рис. 7):
Рис. 7. Содержимое файла f 1. txt с дополнительными HTML-тегами
 Написать скрипт, который выводит построчно содержимое файла f 1. txt
с использованием функции fgets (), дополнительно проводить подсчет строк
и выводить номер строки файла. Результат должен выглядеть примерно
следующим образом (рис. 8):
Рис. 8. Чтение файла функцией fgets ()
После окончания чтения файл обязательно закрыть. Снова открыть файл
и прочитать его с использованием функции fgetss (). Сравнить результаты и сделать
выводы.
7
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Задание 4
Организовать чтение файла f1.txt в массиве с использованием функции file($f),
здесь $f — строковая переменная, содержащая имя файла.
Массив индексируется стандартным образом, и каждый элемент массива содержит
одну строку файла, ассоциативным ключом служит номер текущей строки в массиве
строк:
Array (0=> первая строка, 1=> вторая строка, 2=> третья
строка);
Обработку массива можно проводить, например, с использованием функций list ()
и each (), или с использованием оператора цикла foreach () (рис. 9):
Рис. 9. Чтение файла в массиве с последующей расшифровкой массива
Результат работы должен быть следующим (рис. 10):
Рис. 10. Результат чтения файла в массиве
8
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Для того чтобы можно было игнорировать (не интерпретировать) HTML-теги,
необходимо воспользоваться специальной функцией htmlspecialchars($ s), которая
экранирует все теги, оставляя их в виде символов, и мы получим результат в виде
(рис. 11):
Рис. 11. Вывод содержимого файла с использованием функции htmlspecialchars()
Задание 5
Наиболее интересной является задача изменения информации в файле
с возможностью сохранения новой информации. Для записи в файл используются
следующие функции:
 fwrite() записывает содержимое строковой переменной в файл, заданный
файловым указателем. Синтаксис функции fwrite():
int fwrite(int манипулятор, string переменная [, int
длина]).
Перед применением операции записи файл должен быть открыт в режиме,
допускающем запись. Для этих режимов используются следующие указатели:
 w — чтение и запись. Указатель текущей позиции устанавливается в начало
файла, а все содержимое файла уничтожается. Если файл не существует,
функция пытается создать его;
 a—
только
запись
в конец
файла.
Указатель
текущей
позиции
устанавливается в конец файла. Если файл не существует, функция пытается
создать его;
 a + — чтение и дозапись. Указатель текущей позиции устанавливается в конец
файла. Если файл не существует, функция пытается создать его.
Наиболее часто применяется режим a + — режим дозаписи в конец файла.
Задание: написать скрипт, который дописывает заданную строку в конец файла.
Строку передать с использованием специально разработанной формы. Скрипт
должен выводить исходное состояние файла до записи новой строки, а затем новое
состояние файла после ввода новой строки. Если мы хотим записать новую строку
в файл, то она должна заканчиваться знаком \n — конец строки.
Общий алгоритм работы скрипта будет следующий:
1. Создать новый текстовый файл f1_1.txt и заполнить его 3 записями в текстовом
редакторе.
9
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
2. Получить и расшифровать переданную строку через массив $_ POST [].
3. Открыть файл в режиме чтения и дозаписи (режим a +).
4. Прочитать файл построчно и вывести на печать его предыдущее содержание.
5. Сформировать новую строку, добавив в переданной символьной переменной
знак конца строки \ n.
6. Записать в файл новую строку.
7. Закрыть файл.
8. Открыть файл в режиме чтения и вывести построчно содержимое файла.
Сравнить результаты и сделать выводы.
Рис. 12. Результаты работы скрипта по заданию 5
Задание 6
Изучение методов удаления записей из файла
Не существует функции удаления записи из файла. Эту операцию можно
выполнить путем создания нового файла и копирования в него только оставшихся
записей, за исключением удаляемой, а затем удаления старого файла.
Операция копирования файла может быть выполнена функцией:
Copy($f_old,$f_ne
w)
Здесь
 $ f _ old — символьная переменная, содержащая имя исходного файла;
 $ f _ new — символьная переменная, содержащая имя файла, в который
помещается копия исходного файла.
Функция rename() переименовывает файл. В случае успеха возвращается TRUE,
a при неудаче — FALSE. Синтаксис функции rename():
10
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
bool
rename
новое_имя)
(string
старое_имя,
string
Функция unlink() удаляет файл с заданным именем. Синтаксис:
int
unlink
файл).
(string
Удаляемая строка может быть задана своим номером. В этом случае при чтении
в массиве функцией file ($ f) мы переписываем построчно массив, кроме строки
с индексом на 1 меньше указанного номера, потому что в массиве нумерация
начинается с 0, и логично предположить, что в файле при удалении нам будет задан
реальной номер строки.
Формулировка задания. Написать скрипт, который удаляет заданную номером
строку из файла. Общий алгоритм работы скрипта следующий:
1. Передать в скрипт номер удаляемой строки (можно через форму, можно через
параметр по протоколу GET).
2. Вывести номер удаляемой строки.
3. Открыть исходный файл в режиме чтения.
4. Открыть новый файл в режиме дозаписи.
5. Организовать цикл построчного вывода исходного файла, каждую строку
выводить на печать. Если номер текущей строки меньше чем номер удаляемой
строки, уменьшенный на 1, то прочитанную строку записать в новый файл.
В противном случае продолжить цикл.
6. Закрыть исходный файл.
7. Закрыть новый файл.
8. Удалить исходный файл, новый файл переименовать, присвоив ему имя
исходного файла.
9. Новый файл открыть в режиме чтения и вывести построчно его содержимое
на печать, убедиться, что нужная строка удалена.
Выполнить все задания, предъявить выполненную
и получить зачет по данной практической работе.
11
работу
преподавателю
Download