
- •Язык php
- •Динамические сайты
- •Преимущества обработки страниц на стороне сервера
- •Современные технологии обработки страниц на стороне сервера
- •Active Server Pages (asp)
- •Java Servlets и jsp
- •Контрольные вопросы
- •Возможности языкаPhp ОбработкаHtmLформ
- •ГенерированиеHtmLстраниц
- •Взаимодействие с субд
- •Поддержка большого количества библиотек
- •Контрольные вопросы
- •Создание динамических страниц Создание простейшегоPhp-скрипта
- •Рнр и код, выполняемый на стороне клиента
- •Взаимодействие с пользователем
- •Контрольные вопросы
- •Синтаксис языкаPhp Типы данных
- •Константы
- •Объявление и инициализация переменных
- •Преобразование типов
- •Арифметические операторы
- •Унарный оператор
- •Оператор конкатенации строк
- •Сокращенная запись для присвоениязначений переменным
- •Операторы сравнения
- •Условные операторы
- •Функции пользователя
- •Массивы
- •Работа с файлами
- •Контрольные вопросы
- •Рнр иMySql Обработка и хранение структурированных данных
- •Динамические сайты, использующие базу данных
- •Построение реляционной базы данных
- •Продавцы
- •Заказчики
- •SqLзапросы к реляционной базе данных
- •Insert into salespeople values(1001,'Иванов','Москва',0.12);
- •Insert into customers values(2001,'Белкин','Москва',100,1001);
- •Insert into orders values(3008,4723.00,'2002-10-05',2006,1001);
- •Особенности реализацииMySql
- •ВзаимодействиеPhp иMySql
- •Контрольные вопросы
- •Разработка системы "Прайс-лист"
- •Постановка задачи
- •Принципы функционирования программного комплекса
- •Разработка структуры базы данных
- •Проектирование системы администрирования
- •Проектирование генератора прайс-листа
- •Контрольные вопросы
Работа с файлами
В этом разделе будут рассмотрены функции языка PHP, предназначенные для работы с файлами.
Функция fopen предназначена для открытия файлов. В общем виде вызов функции выглядит следующим образом:
fopen(имя файла, режим);
В качестве параметров, функция получает имя файла и информацию о режиме работы с файлом. Информация о возможных режимах приведена в таблице.
Режим |
Описание |
a |
Открыть файл только для дополнения. Данные будут дописаны в конец существующего файла; если файл не существует, РНР пытается создать его |
a+ |
Открыть файл для дополнения и чтения. Данные будут дописаны в конец существующего файла; если файл не существует, РНР пытается создать его |
r |
Открыть файл только для чтения |
r+ |
Открыть файл для чтения и записи. Данные будут записаны в начало существующего файла |
w |
Открыть файл только для записи. Существующее содержимое файла будет утрачено. Если файл не существует, РНР пытается создать его |
w+ |
Открыть файл для чтения и записи. Существующее содержимое файла будет утрачено. Если файл не существует, РНР пытается создать его |
При успешном выполнении функция fopen () возвращает дескриптор файла - целое число, позволяющее ссылаться на файл при последующих обращениях к нему; при неудаче функция fopen () возвращает “ложь”:
if (!$file=fopen("text.txt", "r")) {
echo "Невозможно открыть файл";
}
else {
fpassthru($file); // Вывести содержимое файла
fclose($file);
}
Программа пытается открыть файл “text.txt”, расположенный в одном каталоге с исполняемым скриптом. В случае неудачи будет выведено сообщение об ошибке. Если файл открыт успешно, функция fpassthru выведет содержимое текстового файла.
После того, как работа с файлом завершена, файл необходимо закрыть. Для закрытия файла применяется функция fclose, которая в качестве параметра получает дескриптор файла.
Для того, чтобы прочитать из файла блок данных определенной длины, нужно воспользоваться функцией fread, получающей в качестве параметров дескриптор файла и длину считываемого блока. Если конец файла достигнут прежде, чем прочитано заданное количество символов, функция fread возвратит все символы, которые удалось прочитать.
if (!$file=fopen("text.txt", "r")) {
echo "Невозможно открыть файл";
}
else {
$text=fread($file,10); // Прочесть первые 10 символов
fclose($file);
}
Функция fgetc используется для чтения из файла одного символа. Единственный параметр, который принимает fgetc - дескриптор открытого файла. Возвращаемое значение является строкой из одного символа, или значением “ложь” (пустил строка), если достигнут конец файла. Следующая программа читает первый символ файла:
if (!$file=fopen("text.txt", "r")) {
echo "Невозможно открыть файл";
}
else {
$char=(fgetc($file)); // Прочитать первый символ файла
fclose($file);
}
Хотя этот метод можно использовать для поочередного прочтения всех символов файла, очевидно, что для чтения всего файла он неэффективен. Функция fgets позволяет прочесть строку заданной длины:
Помимо дескриптора файла функция fgets принимает в качестве параметра количество символов (плюс один), которые нужно прочесть из файла. Следует заметить, что указываемое количество считываемых символов на единицу больше фактического количества прочтенных символов. Чтение завершится, если будет достигнут символ перевода строки или конец файла, поэтому peaльное количество возвращенных символов нельзя предсказать. Функция возвращает строку или значение “ложь”, если произойдет ошибка.
if (!$file=fopen("text.txt", "r")) {
echo "Невозможно открыть файл";
}
else {
$text=(fgets($file,11)); // Прочесть-первые 10 символов
fclose($file);
}
Для записи строки в файл используются функции fputs или fwrite. Их вызов совершенно идентичен, параметрами служат дескриптор файла, в который осуществляется запись, строка, записываемая в файл, и (необязательный параметр) количество символов, которое нужно записать в файл из строки. Если последний параметр не указан, записывается вся строка. В случае успеха возвращаемым значением является “истина”, а в случае неудачи – “ложь”.
if ($file=fopen("text.txt", "a")) {
fputs($file,"Текстовая строка"); //Дописать строку в конец файла
}
Одной из важнейших проблем при работе с файлами является проблема позиционирования указателя внутри файла. Это необходимо для того, чтобы иметь возможность обратиться к произвольному фрагменту данных внутри файла. В PHP реализовано несколько функций для перемещения внутри открытого файла.
Простейшей функцией является rewind. Она устанавливает текущую позицию в начало файла. Единственным параметром функции является дескриптор соответствующего файла. Возвращаемым значением является “истина” в случае успеха и “ложь” в случае неудачи.
rewind($file);
Для перемещения на заданную позицию в файле используется функция fseek. Параметрами функции являются файловый дескриптор и смещение, указывающее, на сколько байт необходимо сместиться от начала файла. Следует заметить, что, в отличие от большинства других функций PHP, fseek возвращает -1 при ошибке, а в случае успеха 0.
fseek($file,1);
В результате указатель позиции файла устанавливается после первого символа файла.
Узнать текущую позицию в файле можно с помощью функции ftell. В качестве параметра функция получает дескриптор файла.
echo ftell($file);
На экран будет выведено текущее положение указателя внутри файла.
Другой полезной функцией является feof, которая указывает, находится текущая позиция в конце файла или нет. Она возвращает “истина”, если текущая позиция в файле находится в конце файла. В противном случае возвращается “ложь”. Эта функция обычно используется при циклическом проходе по файлу:
if (!$file=fopen("text.txt", "r")) {
echo("Невозможно открыть файл");
}
else {
while (!feof($file)) {
echo fgetc($file);
}
}
Этот сценарий считывает символы файла text.txt по одному до тех пор, пока не будет достигнут конец файла.
Помимо чтения и записи РНР позволяет копировать файлы из одного каталога в другой, удалять их и переименовывать.
Для копирования файла используется функция сору. Она получает в качестве параметров имя копируемого файла, а так же имя файла, в который будет скопировано содержимое источника.
Удаление файла осуществляется при помощи функции unlink, получающей в качестве параметра имя удаляемого файла.
Для переименования файла используется функция rename, получающая в качестве параметра старое и новое имя файла.
copy ("text.txt", "temp/text2.txt");
rename ("text.txt", "old.txt");
unlink ("old.txt");
Программа копирует файл text.txt в каталог temp под именем text2.txt, переименовывает исходный файл text.txt в old.txt, после чего удаляет файл old.txt .